filebeat收集json格式的nginx日志

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

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

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

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

因此就需要让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:-

中文格式更是我们期望的

客户端地址: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"
客户端外网地址:-
请求响应时间:-
后端地址:-

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

日志已经输出为json格式

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

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 

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

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

4.1.停掉filebeat

停掉filebeat,不再收集日志

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

4.2.删除es日志索引库

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

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

4.3.删除kibana的日志索引库

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

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

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

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

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

6.kibana创建日志索引库

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

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

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

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

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

字段选择@timestamp

filebeat收集json格式的nginx程序日志(二)_运维_07

创建完成

filebeat收集json格式的nginx程序日志(二)_字段_08

查看json格式收集来的日志数据,已经将每一项内容变成了一个字段值便于查询
filebeat收集json格式的nginx程序日志(二)_json_09

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

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

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

找到下面的客户端内网地址的字段点击ADD即可添加
filebeat收集json格式的nginx程序日志(二)_json_10

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

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

7.1.3.查看数据

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

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

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

7.1.添加筛选条件

1)客户端地址为192.168.81.210

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

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

2)请求的页面为/jiangxl

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

7.2.查看统计数据

两个筛选器都勾选后即可字段筛选出统计数据,右上角为总数,中间为具体日志内容
filebeat收集json格式的nginx程序日志(二)_json格式_14