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安装启动成功
安装ES插件
可以通过浏览器插件:es-head-0.1.4_0.crx
查看ES的状态
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安装成功
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里就能看到发过来的日志了
在kibana里添加索引
在kibana就能展示指定索引的日志了
三、调优
3.1 日志拆分
如果日志里的内容都在一起,像这样:
我们需要将日志内容进行拆分,将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格式的了
(注意:改完日志格式后要重启filebeat)
未拆分日志前kibana收集到的内容:
拆分日志后kibana收集到的内容:
如果要删除kibana和ES的数据,删除以下文件并重启:
rm -rf /var/lib/kibana/*
rm -rf /var/lib/elasticsearch/*
3.2 画图
访问IP的TOP图
在kibana中打开Visualize
新建可视化
选择水平条形图
添加要统计的字段和展示条数
这样一个统计IP的条形图就做好了
访问URL的TOP图
创建数据表
配置要统计的字段和显示条数
状态码TOP图
将TOP图组合
打开仪表板
创建
点击添加
选择上面新建的图形
图形可以拖拽位置以及调整大小
还能筛选其中的内容,其他图表也会根据条件筛选内容
收集Tomcat日志
安装Tomcat
yum install -y tomcat tomcat-webapps tomcat-admin-webapps
修改Tomcat的日志格式
vim /etc/tomcat/server.xml
删除默认的pattern
配置
将该段替换为:
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"
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分钟内告诉我结果
评论(0)