一、需求背景
通过ELK来分析nginx日志文件,默认格式为log格式,传输到es中需要经过grok插件进行处理并转换成json格式,这一过程很消耗logstash资源的,而且传入到es中的字段并不容易分析,所以在收集端先将日志转为json格式。
二、具体配置
修改Nginx主配置文件
vim /usr/local/nginx/conf/nginx.conf
在http对应站点log_format模块增加以下配置:
log_format json '{ "@timestamp": "$time_iso8601", ''"time": "$time_iso8601", ''"clientip": "$remote_addr", ''"remote_user": "$remote_user", ''"body_bytes_sent": "$body_bytes_sent", ''"request_time": "$request_time", ''"status": "$status", ''"host": "$host", ''"request": "$request", ''"request_method": "$request_method", ''"uri": "$uri", ''"http_referrer": "$http_referer", ''"body_bytes_sent":"$body_bytes_sent", ''"http_x_forwarded_for": "$http_x_forwarded_for", ''"http_user_agent": "$http_user_agent" ''}';
在server配置项之下,增加:
access_log /var/log/nginx/io.log json;

三、重载nginx生效

[root@ELK-Master nginx]# tail -f /var/log/nginx/io.log{ "@timestamp": "2023-11-07T10:45:03+08:00", "time": "2023-11-07T10:45:03+08:00", "clientip": "192.168.3.13", "remote_user": "-", "body_bytes_sent": "0", "request_time": "0.000", "status": "304", "host": "192.168.3.88", "request": "GET / HTTP/1.1", "request_method": "GET", "uri": "/index.html", "http_referrer": "-", "body_bytes_sent":"0", "http_x_forwarded_for": "-", "http_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" }

