0、效果

学完本文,可以实现:
在日志系统里可统计网站的访问IP、状态码、停留时长、统计等信息。
效果图如下:
【补图】

一、环境搭建

E:elasticsearch,日志搜索引擎
B:filebeat,收集日志
L:logstash
K:kibana,图形化展示页面

ES低版本需要安装java,高版本已集成,无需安装

linux常见工具安装

yum install -y tree vim wget bash-completion bash-completion-extras lrzsz net-tools sysstat iotop iftop htop unzip telnet ntpdate

安装ES,filebeat,kibana,nginx

rpm -ivh elasticsearch-7.9.1-x86_64.rpm
rpm -ivh filebeat-7.9.1-x86_64.rpm
rpm -ivh kibana-7.9.1-x86_64.rpm
sh install_nginx/setup.sh

二、配置

2.1 配置ES

# 停止ES服务
systemctl stop elasticsearch
# 删除索引存储路径
rm -rf /var/lib/elasticsearch/*
# 写入新配置(注意,修改里面的)
cat > /etc/elasticsearch/elasticsearch.yml << 'EOF'
# 节点名
node.name: node-1
# 数据存储路径
path.data: /var/lib/elasticsearch
# 日志路径
path.logs: /var/log/elasticsearch
# 本机地址
network.host: 127.0.0.1,192.168.1.190
# 端口
http.port: 9200
# 节点
discovery.seed_hosts: ["192.168.1.190"]
# 主节点
cluster.initial_master_nodes: ["192.168.1.190"]
EOF
# 启动ES
systemctl start elasticsearch

检查

浏览器访问ip:9200若出现下图所示,则表示ES安装启动成功
file

安装ES插件

可以通过浏览器插件:es-head-0.1.4_0.crx查看ES的状态
file

2.2 配置kibana

vim /etc/kibana/kibana.yml
# 修改以下条目
# 端口号
server.por: 5601
# 主机地址
server.host: "192.168.1.190"
# ES地址
elasticsearch.hosts: ["http://localhost:9200"]
# 默认索引
kibana.index: ".kibana"
# 界面展示的语言
i18n.locale: "zh-CN"

检查

浏览器访问ip:5601显示如下图则表示KIBANA安装成功
file

2.3 配置filebeat

将指定路径的日志传给ES

vim /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    -  /data/nginx_logs/newops*.log
  # 将日志按照json格式解析
  json.keys_under_root: true
  json.overwrite_keys: true

output.elasticsearch:
  hosts: ["192.168.1.190:9200"]
  # 自定义索引名称
  index: "newops-%{[agent.version]}-%{+yyyy.MM}"

# 禁用默认索引名称
setup.ilm.enabled: false
setup.template.enabled: false

重启filebeat后,在ES里就能看到发过来的日志了
file
在kibana里添加索引
file
在kibana就能展示指定索引的日志了
file

三、调优

3.1 日志拆分

如果日志里的内容都在一起,像这样:
file
我们需要将日志内容进行拆分,将nginx的日志转换成json格式。在nginx的配置文件里加上:

log_format json '{ "time_local": "$time_local", '
                          '"remote_addr": "$remote_addr", '
                          '"referer": "$http_referer", '
                          '"request": "$request", '
                          '"status": $status, '
                          '"bytes": $body_bytes_sent, '
                          '"agent": "$http_user_agent", '
                          '"x_forwarded": "$http_x_forwarded_for", '
                          '"up_addr": "$upstream_addr",'
                          '"up_host": "$upstream_http_host",'
                          '"upstream_time": "$upstream_response_time",'
                          '"request_time": "$request_time"'
    ' }';
    #注意:在日志路径后面加上"json",指定使用的日志格式
    access_log  /var/log/nginx/access.log  json;

这样,日志输出的就是json格式的了
file
(注意:改完日志格式后要重启filebeat)
未拆分日志前kibana收集到的内容:
file
拆分日志后kibana收集到的内容:
file

如果要删除kibana和ES的数据,删除以下文件并重启:

rm -rf /var/lib/kibana/*
rm -rf /var/lib/elasticsearch/*

3.2 画图

访问IP的TOP图

在kibana中打开Visualize
file
新建可视化
file
选择水平条形图
file
添加要统计的字段和展示条数
file
这样一个统计IP的条形图就做好了

访问URL的TOP图

创建数据表
file
配置要统计的字段和显示条数
file

状态码TOP图

file

将TOP图组合

打开仪表板
file
创建
file
点击添加
file
选择上面新建的图形
file
图形可以拖拽位置以及调整大小
file
还能筛选其中的内容,其他图表也会根据条件筛选内容
file

收集Tomcat日志

安装Tomcat

yum install -y tomcat tomcat-webapps tomcat-admin-webapps

修改Tomcat的日志格式

vim /etc/tomcat/server.xml

删除默认的pattern配置
file
将该段替换为:

pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}"/>

清空日志,重启Tomcat

> /var/log/tomcat/localhost_access_log.txt
systemctl restart tomcat

上报Tomcat的日志到es

# 修改filebeat
vim /etc/filebeat/filebeat.yml
# 因为要收集多个日志,所以要设置不同日志的索引名称
indices:
  - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM}"
    when.contains:
      tags: "tomcat"

file

JAVA日志收集

因为java的一条报错日志会出现很多行,而filebeat默认一行为一条日志。
我们需要配置判断条件,满足条件的多行为一条日志
(比如每条日志都是"[2022-0x-0x 22:00:00]xxxx"开头,我们就判断如果下一行不是这种格式开头,则两天合并,看下一行。如果下一行是这种格式,则将上面合并的日志发给es)

# filebeat配置
## 多行匹配模式,匹配以"["开头的语句,把下一个匹配到的语句之前的语句当成一条
multiline:pattern: ^\[
multiline.negate: true
multiline.match: after

日志分析需求:
1.找出访问排名前十的IP,URL
2.找出10点到12点之间排名前十的IP,URL
3.对比昨天这个时间段访问情况有什么变化
4.对比上个星期同一天同一时间段的访问变化
5.找出搜索引擎访问的次数和每个搜索引擎各访问了多少次
6.指定域名的关键链接访问次数,响应时间
7.网站HTTP状态码情况
8.找出攻击者的IP地址,这个IP访问了什么页面,这个IP什么时候来的,什么时候走的,共访问了多少次
9.5分钟内告诉我结果

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。