Nginx 日志改成 JSON 格式的方法
Nginx日志默认为普通文本的格式,例如,下面是Nginx的一行访问日志:
10.88.122.105--[02/Dec/2017:09:15:04+0800]"GET/js/pagination.jsHTTP/1.1"3040"http://10.88.105.20:8063/stockrecommand.html""Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.1;WOW64;Trident/7.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;MediaCenterPC6.0;.NET4.0C;.NET4.0E)""-"0.000
为了便于利用ElasticStack日志平台收集展示Nginx的日志,可以将Nginx的日志改成json的格式。修改后的json日志格式如下所示:
{"@timestamp":"12/Dec/2017:14:30:40+0800","remote_addr":"10.88.122.108","referer":"-","request":"GET/HTTP/1.1","status":304,"bytes":0,"agent":"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.84Safari/537.36","x_forwarded":"-","up_addr":"-","up_host":"-","up_resp_time":"-","request_time":"0.000"}
为了修改Nginx的日志格式改成json,需要修改Nginx的配置文件,笔者Nginx的配置文件为/usr/local/nginx/conf/nginx.conf。
http{ includemime.types; default_typeapplication/octet-stream; charsetutf-8; log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"$request_time'; log_formatlog_json'{"@timestamp":"$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",' '"up_resp_time":"$upstream_response_time",' '"request_time":"$request_time"' '}'; access_loglogs/access.loglog_json; (省略内容) }
在Nginx的配置文件nginx.conf中,我们定义了两种的日志格式:main和log_json,其中,main为普通的文本格式,log_json为json格式。log_json其实就是手工构造一个json字符串。定义了json的日志格式后,便可以指定accesslog为json格式:
access_loglogs/access.loglog_json;
修改Nginx的配置,重启Nginx,便可以看到json格式的日志,重启Nginx:
nginx-sreload
以上这篇Nginx日志改成JSON格式的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。