NginnxログをJSON形式に変更しました。
6272 ワード
Nginxログはデフォルトでは普通のテキストのフォーマットです。例えば、次の行はNginxのアクセスログです。http://www.ttlsa.com/nginx/nginx-log-records-in-json-format/ http://www.iteye.com/topic/1138111
10.88.122.105 - - [02/Dec/2017:09:15:04 +0800] "GET /js/pagination.js HTTP/1.1" 304 0 "http://10.88.105.20:8063/stockrecommand.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)" "-" 0.000
Elastic Stockのログプラットフォームを利用して、Ngixを展示するログを収集するために、Ngixのログを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 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36", "x_forwarded": "-", "up_addr": "-","up_host": "-","up_resp_time": "-","request_time": "0.000" }
Nginxのログフォーマットをjsonに変更するためには、Ngixのプロファイルを修正する必要があります。筆者のNgixのプロファイルは/usr/local/nginx/conf/nginx.com nfです。http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time';
log_format log_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_log logs/access.log log_json;
( )
}
Nginxのプロファイルnginx.conf
では、2つのログフォーマットを定義している。main
とlog_json
と、ここでは、main
は普通のテキスト形式であり、log_json
はjson形式である。log_json
は実は手作りでjson文字列を作っています。jsonのログフォーマットを定義したら、access logsをjson形式に指定できます。access_log logs/access.log log_json;
Nginnxの設定を変更して、Ngixを再起動すると、json形式のログが表示され、Ngixを再起動することができます。nginx -s reload
参考資料