使用Filebeat收集并分析nginx的访问日志

之前我们已经搞定了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文件,它记录了读取位置

在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。如果需要修改

Ref

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值