filebeat收集json格式的nginx程序日志(二)

举报
jiangxl 发表于 2022/04/14 02:03:32 2022/04/14
【摘要】 filebeat收集json格式的nginx日志 1.为什么要收集json格式的日志类型 由于nginx普通日志收集过来的日志内容都是存在一个字段中的值,我们想单独对日志中的某一项进行查询统计,比如我...

filebeat收集json格式的nginx日志

1.为什么要收集json格式的日志类型

由于nginx普通日志收集过来的日志内容都是存在一个字段中的值,我们想单独对日志中的某一项进行查询统计,比如我只想查看某个IP请求了我那些页面,一共访问了多少次,在普通的日志中是无法过滤的,不是很满意

如下图,可以明显的看出,收集过来的日志信息都是在一块的,不能够根据某一项内容进行查询

在这里插入图片描述

因此就需要让filebeat收集json格式日志内容,把日志内容分成不同的字段,也就是Key/value,这样我们就可以根据一个字段去统计这个字段的相关内容了

我们期望日志收集过来是这个样子的

$remote_addr:192.168.81.210
$remote_user:-
[$time_local]:[15/Jan/2021:15:03:39 +0800]
$request:GET /yem HTTP/1.1" 
$status:404 
$body_bytes_sent:3650
$http_referer: -
$http_user_agent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
$http_x_forwarded_for:-


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

中文格式更是我们期望的

客户端地址:192.168.81.210
访问时间:[15/Jan/2021:15:03:39 +0800]
请求的页面:GET /yem HTTP/1.1" 
状态码:404 
传输流量:3650
跳转来源: -
客户端程序:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
客户端外网地址:-
请求响应时间:-
后端地址:-

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.配置nginx支持json格式的日志输出

1.修改主配置文件
[root@logsj ~]# vim /etc/nginx/nginx.conf
http {
    log_format  main '{"客户端内网地址":"$remote_addr",'
                       '"时间":"$time_iso8601",'
                       '"URL":"$request",'
                       '"状态码":$status,'
                       '"传输流量":$body_bytes_sent,'
                       '"跳转来源":"$http_referer",'
                       '"浏览器":"$http_user_agent",'
                       '"客户端外网地址":"$http_x_forwarded_for",'
                       '"请求响应时间":$request_time,'
                       '"后端地址":"$upstream_addr"}';
}   

2.重启
[root@logsj ~]# nginx  -t
[root@logsj ~]# systemctl reload nginx

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

日志已经输出为json格式

在这里插入图片描述

3.配置filebeat解析json格式的日志

一定要改filebeat配置文件,使其支持json格式的日志解析,否则写入es索引库的时候还是一串字符串,无法识别每个字段的值

1.在配置文件增加json格式解析配置
[root@logsj ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
  json.keys_under_root: true							
  json.overwrite_keys: true

output.elasticsearch:
  hosts: ["192.168.81.210:9200"]

2.重启filebeat
[root@logsj ~]# systemctl restart filebeat.service 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4.清空之前收集的旧格式数据

一定要清空es之前收集的传统日志格式的数据,还要把nginx日志情况,如果有多台nginx服务器,则改完json格式的日志后,一定要把日志清空,否则将会在kibana中显示两种日志格式

4.1.停掉filebeat

停掉filebeat,不再收集日志

[root@logsj ~]# systemctl stop filebeat.service

  
 
  • 1

4.2.删除es日志索引库

kibana展示的数据都是从es库拿过来的,如果es库不删除重建的,也会是两种格式的数据

在这里插入图片描述

4.3.删除kibana的日志索引库

kibana上对应es的日志索引库也需要删除,否则新日志进来后,由于是json格式,很多字段会提示感叹号

点击Managerment—索引模式—索引库—删除

在这里插入图片描述

5.配置filebeat指定索引库名称

filebeat每次自动创建的索引都是filebeat-xxx,对应我们生产环境来说不太友好,我们可以自定义索引名称

1.修改配置文件
[root@logsj ~]# vim /etc/filebeat/filebeat.yml 
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
  fields:											#类似于标签
    index: nginx
  json.keys_under_root: true
  json.overwrite_keys: true

output.elasticsearch:
  hosts: ["192.168.81.210:9200"]
  indices:													#定义索引名
    - index: "elk-nginx-%{+yyyy.MM.dd}"
      when.equals:									#与那个标签关联
        fields:
          index: "nginx"	
 
2.重启
[root@logsj ~]# systemctl restart filebeat

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述

6.kibana创建日志索引库

全部删除完成后就可以启动filebeat并在kibana上创建索引库,展示json格式的日志了

刚才es上的索引库已经建立了,下面去kibana上建立同名的索引进行关联调用,也类似于软连接的效果

点击Managerment—创建索引—索引名称使用通配符形式,与es上的索引进行关联

填写索引名elk-nginx-*之后会列出es上elk-nginx开头的索引库并进行关联

在这里插入图片描述

字段选择@timestamp

在这里插入图片描述

创建完成

在这里插入图片描述

查看json格式收集来的日志数据,已经将每一项内容变成了一个字段值便于查询
在这里插入图片描述

7.使用kibana统计json格式的日志

7.1.统计客户端地址为192.168.81.210访问了多少次页面

7.1.1.找到客户端内网地址的字段点击添加

找到下面的客户端内网地址的字段点击ADD即可添加
在这里插入图片描述

7.1.2.添加一个筛选器筛选指定的客户端地址

在这里插入图片描述

7.1.3.查看数据

点击完保存后即可查询,右上角可以看到总数,中间可以看到具体的日志信息

在这里插入图片描述

7.2.统计客户端地址为192.168.81.210访问/jiangxl页面多少次

7.1.添加筛选条件

1)客户端地址为192.168.81.210

筛选的时候选择客户端内网地址字段,在写上匹配的值

在这里插入图片描述

2)请求的页面为/jiangxl

筛选URL字段值为/jiangxl HTTP/1.1

7.2.查看统计数据

两个筛选器都勾选后即可字段筛选出统计数据,右上角为总数,中间为具体日志内容
在这里插入图片描述

文章来源: jiangxl.blog.csdn.net,作者:Jiangxl~,版权归原作者所有,如需转载,请联系作者。

原文链接:jiangxl.blog.csdn.net/article/details/117412622

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。