1.上一篇文章:Filebeat收集简单nginx日志
不完善的地方:所有日志都存储在message的value里,不能拆分单独显示
2.理想中的情况
可以把日志所有字段拆分出来
{ $remote_addr : 192.168.12.254 - : - $remote_user : - [$time_local]: [10/Sep/2019:10:52:08 +0800] $request: GET /jhdgsjfgjhshj HTTP/1.0 $status : 404 $body_bytes_sent : 153 $http_referer : - $http_user_agent :ApacheBench/2.3 $http_x_forwarded_for:- }
3.目标如何使nginx日志格式转换成我们想要的json格式
修改nginx.conf配置文件使日志转换成json
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"' ' }'; access_log /var/log/nginx/access.log json;
修改如下图
清除旧日志
> /var/log/nginx/access.log
检查并重启nginx
nginx -t
systemctl restart nginx
4.nginx转换成json之后仍然不完善的地方
通过查看发现,虽然nginx日志变成了json,但是es里还是存储在message里仍然不能拆分
目标: 如何在ES里展示的是json格式
5.修改filebeat配置文件支持json解析
cat >/etc/filebeat/filebeat.yml<<EOF filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/access.log json.keys_under_root: true json.overwrite_keys: true output.Elasticsearch: hosts: ["10.0.0.51:9200"] EOF
6.删除ES里以前的索引
es-head >> filebeat-6.6.0-2019.11.15 >> 动作 >>删除
7.重启filebeat
systemctl restart filebeat
赞赏
微信赞赏
支付宝赞赏