先修改nginx 的日志为json 格式
修改nginx 的配置文件:
将下面内容添加到nginx.conf
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"'
' }';
vim /etc/nginx/nginx.conf
保存,退出,
先清空原来的nginx日志
重启nginx。 systemctl restart nginx
再用ab命令,压测一下nginx,产生日志。
ab -n 100 -c 100 http://192.168.189.118/abcx200s404.html
查看日志:
tail -f /var/log/nginx/access.log
觉得这个日志,看上去,不友好,可以这样,复制到json格式化网站,可以在线json格式化。
浏览器打开这个网站:www.bejson.com
清除ES里面原来的索引数据都删除:
重新清空一下 nginx 的日志,再重新写一些日志进来。
ab -n 100 -c 100 http://192.168.189.118/abcx200s404.html
Kibana 里面,清除原来的创建的索引模式
再重新创建一次索引模式。
你会发现,还是message里面的日志,还是原来的格式,并不是json格式。
同样,我们在ES里面看到的数据,也还是一样,message里面的内容并没有被拆分成json格式
这是因为filebeat的配置文件里面 还是按照原来的格式读取,并没有按照json格式解析。
修改filebeat配置文件,添加json格式参数
清除ES里面的索引数据,以及删除kibana里面的数据。重启filebeat
再清空nginx 的日志,并重新生成一些nginx 日志数据,
>/var/log/nginx/access.log
ab -n 120 -c 120 http://192.168.189.118/abcx200s404.html
也可以在其他虚拟机上,进行压力测试,或者访问189.118的nginx ,产生多一些的日志。
这时,我们再查看,ES里面的数据,会发现,日志格式分生了改变。
打开kibana ,再创建索引模式
我们可以在,左边,添加任意字段,并展示出来。
自定义filebeat 模板
当我们在kibana中,添加过滤条件时,会发现,Filter里面有好多字段是我们用不到的。
这些字段是在那里来的啦?
我们可以通过修改Filebeat的配置文件,来设定我们自己的模板。
vim /etc/filebeat/filebeat.yml
重启 filebeat
删除ES里面原来的索引,和 kibana里面的索引数据,清空nginx日志。
重新生成一些nginx 日志。
再查看ES里面的索引:
Kibana 创建索引
