Closed2
GKE上で動くnginxのアクセスログを構造化ログとしてCloud Loggingに書き込む
Google Kubernetes Engine または App Engine フレキシブル環境を使用している場合は、構造化されたログを 1 行でシリアル化された JSON オブジェクトとして stdout または stderr に書き込めます。すると、構造化ログは、Logging エージェントにより、LogEntry 構造の jsonPayload として Cloud Logging に送信されます。
GKEの場合は、JSONオブジェクトで標準出力に書き込めば良い。
Default: access_log logs/access.log combined;
nginxのアクセスログの形式はデフォルトだと combined 。これをJSONにすれば良い。
Syntax: log_format name [escape=default|json|none] string ...;
...
For json escaping, all characters not allowed in JSON strings will be escaped: characters
escape=json を使う。
設定
nginx.conf
http {
log_format cloudlogging escape=json '{'
'"timestamp":"$time_local",'
'"httpRequest":{'
'"remoteIp":"$remote_addr",'
'"requestMethod":"$request_method",'
'"requestUrl":"$request_uri",'
'"requestSize":$request_length,'
'"status":$status,'
'"responseSize":$bytes_sent,'
'"referer":"$http_referer",'
'"userAgent":"$http_user_agent",'
'"latency":"${request_time}s",'
'"protocol":"$server_protocol"'
'}'
'}';
server {
access_log /dev/stdout cloudlogging;
error_log /dev/stderr;
}
}
https://839.hateblo.jp/entry/2019/12/20/090000 を参考にさせていただいた。
ログエントリー
log_entry.json
{
"jsonPayload": {
"timestamp": "10/May/2020:00:00:00 +0000",
},
"httpRequest": {
},
"severity": "INFO"
}
上記設定で出力されるログエントリー。
このスクラップは2021/05/22にクローズされました