アクセスログをCloudWatchなどに出す場合にjson形式にすると便利なため、nginxのアクセスログをjson形式で出すようにします。
また4xxや5xxなどのステータスコードの場合もjsonで書き出すことで判定が楽になるかと思います。
- nginx.conf
http {
...中略...
# ログファイルの設定
# ログファイルのフォーマットをjson形式に設定
log_format json escape=json '{'
'"time":"$time_iso8601",'
'"host":"$remote_addr",'
'"port":"$remote_port",'
'"method":"$request_method",'
'"uri":"$request_uri",'
'"status":"$status",'
'"body_bytes":"$body_bytes_sent",'
'"referer":"$http_referer",'
'"ua":"$http_user_agent",'
'"request_time":"$request_time",'
'"respons_time":"$upstream_response_time"'
'}';
# 40x系のログを出力するための変数を設定
map $status $res_status_4xx {
~^[4] 1;
default 0;
}
# 50x系のログを出力するための変数を設定
map $status $res_status_5xx {
~^[5] 1;
default 0;
}
# access.logにjson形式で出力
access_log /var/log/nginx/access.log json;
# エラーログを出力
access_log /var/log/nginx/error4xx.log json if=$res_status_4xx;
access_log /var/log/nginx/error5xx.log json if=$res_status_5xx;
...中略...
}
「log_format」に「json」の内容を定義して、それを「access_log」に設定します。
またステータスが4xxや5xxの場合も分けて定義することでエラー時のログが特定しやくなります。