之前我们已经搞定了nginx+keepalived双机,花了一个多星期时间把业务都迁移过来之后,基本稳定,中间还遇到一次意外宕机,keepalived也顺利做了主备切换,接下来就要做日志分析了。
日志分析,本身从等保的要求就是需要日志第三方存储的,另外就是日志也是分析访问量的一个重要依据,比如网站访问量、比如从错误日志中分析数据,等等。
nginx反代作为集中发布的平台,首先已经能够很完善的收集到数据了(否则你是拿不到分散在各个业务系统上的weblog的),接下来,就是转发和分析,这里就用elasticsearch来做了,毕竟平台之前已经搞定了。
因为是纯文本日志,这里我们就是用es的Filebeat组件直接转发给es,这是一个轻量的日志收集工具,也就省得再去转syslog,或者转logstash、kafka之类的,毕竟咱的数据量也不大。
安装Filebeat
CentOS 7
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.3-x86_64.rpm
sudo rpm -vi filebeat-7.16.3-x86_64.rpm
配置Filebeat
创建elasticsearch的连接密码
这样就不用再filebeat的配置文件里写入明文密码了。此时钥匙串的名字就叫做
password
filebeat keystore create
filebeat keystore add password
filebeat keystore list
启用nginx module
filebeat modules enable nginx
filebeat modules list
- 其实就是把nginx模块的配置文件的disable去掉了
- 配置文件参考如下
- module: nginx
access:
enabled: true
#注意日志的格式,是数组形式
var.paths: ["/var/log/nginx/access.log"]
error:
enabled: true
var.paths: ["/var/log/nginx/error.log"]
ingress_controller:
enabled: false
调整nginx日志格式
nginx的默认日志格式其实已经够用了,如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
唯一有个问题就是缺少了主机名
这个选项,所以我们要加一条$host
进去。如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$host"'
'"$http_user_agent" "$http_x_forwarded_for"';
$host
变量我加在了第二行,不知道为啥加在最后一行不生效。$host
在这里指的是http请求的主机头,如果$hostname
那就变成nginx主机的名字了
测试并运行filebeat
- 使用
filebeat test config -e
可以测试配置文件 - 使用
filebeat -e
可以运行filebeat,会同时输出日志。 - 当然如果确定没问题还是用
systemctl start filebeat
更好一点
如果提示
2023-01-18T15:40:10.917+0800 INFO [publisher_pipeline_output] pipeline/output.go:151 Connection to backoff(elasticsearch(http://192.168.0.1:9200)) established
说明已经成功连接上elastic
基本完成
至此,在Kibana
的仪表板
中已经可以看到一些基础数据了
重新读取文件
如果需要重新读取filebeat文件,需要删除掉/var/lib/filebeat/registry/filebeat
下的xxx.json文件,它记录了读取位置文章来源:https://www.toymoban.com/news/detail-432717.html
在Kibana中查看
- 打开Kibana,找到Analytics下的Dashboard
- 找到
[Filebeat Nginx] Overview ECS
这个Dashboard,顺利的话你已经看到所有的数据了。 - 但我们还有一些需要优化的
- 首先是它读取的是
filebeat-7.16.3-
这个默认的模板,所以如果你有多个nginx传输数据的话,那么就需要优化下(知道为啥要logstash多此一举了吧?) - 点这里的筛选,字段用
agent.id
或者host.id
识别一下就可以了 - 然后这里缺少了一个最重要的,按站点统计点击率,这时候我们之前添加的日志字段就有效果了
- 我们编辑Dashboard,创建可视化, 创建一个随便什么图,比如
垂直堆积条形图
- 水平选择计数,起个名字叫做点击率。也就是每条日志算一次。
- 垂直起个名字叫做排行,字段选择
traefik.access.user_agent.original
。啥,你问我他哪来的?你找一个日志看看不就知道了…😃,看,就是这个
其他
只查看数据
- 打开Kibana的Discover,索引模式选择
filebeat-*
ilm策略
默认filebeat的nginx模块写入了filebeat-7.16.3-2023.01.06-000011
这样的一个index。如果需要修改文章来源地址https://www.toymoban.com/news/detail-432717.html
Ref
- https://blog.51cto.com/jiangxl/4654145
- https://blog.csdn.net/UbuntuTouch/article/details/101604717
- https://www.elastic.co/guide/en/beats/filebeat/master//exported-fields-traefik.html#exported-fields-traefik
到了这里,关于使用Filebeat收集并分析nginx的访问日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!