intdashサーバー内のアプリケーションは、以下のようにログを出力します。
ログファイル
ログは/var/log/messages
内のファイルに出力されます。ファイル名は以下の通りです。
-
標準出力(通常のログ)
- <アプリケーション名>_stdout.log
-
標準エラー出力(エラーログ)
- <アプリケーション名>_stderr.log
ログローテーションが設定されている場合、過去のログファイルには日付等の接尾辞が付与されます。例:
- intdashd_stdout.log.1
- intdashd_stdout.log-20200123
- intdashd_stdout.log-20200123.bz2
ログファイルはアプリケーションごとに出力されます。intdashを構成するアプリケーションの一覧については、intdashサーバーを構成するサービスの一覧(インフラ管理者向け) を参照してください。
ログのフォーマット
ログは、JSONオブジェクトの形式で、1レコードが1行で出力されます。
以下は、1レコードの例です。
以下の例は見やすいようにレイアウトしたもので、実際にはレコードの途中には改行は含まれません。1つのレコードの末尾にのみ改行が出力されます。
{
"level": "info",
"ts": "2020-09-16T02:19:18.913Z",
"name": "auth",
"caller": "logmiddleware/middleware.go:43",
"msg": "Received request.",
"user_id": "00112233-4455-6677-8899-aabbccddeeff",
"path": "/api/v1/edges/00112233-4455-6677-8899-aabbccddeeff/authz",
"trace_id": "6103-6869-9253",
"method": "GET",
"query_string": "is_temporary=false&method=get&resource=%2Fedges%2Fme",
"ua": "intdah-api",
"remote_ip": "127.0.0.1:51926",
"referer": "",
"hostname": "ip-172-29-1-226",
"in_bytes": 0,
"proto": "HTTP/1.1"
}
ログのレコードに含まれる情報
以下の項目は、多くのレコードに共通です。
キー | 値の意味 | この項目が出力されるレコード | 値の例 |
---|---|---|---|
level | ログレベル(debug, info, warn, error, fatal) | すべてのレコード | info |
ts | ログイベントが発生した時刻のタイムスタンプ(RFC3339) | すべてのレコード | 2020-09-16T02:19:18.913Z |
name または log_role | アプリケーションの名称 | すべてのレコード | auth |
caller | 事象の発生元(<パッケージ名>/<ファイル名>:<行数>) | すべてのレコード | logmiddleware/middleware.go:43 |
msg | メッセージ | すべてのレコード | Received request. |
trace_id | 追跡ID | 起動ログ以外のすべてのレコード | 6103-6869-9253 |
user_id | 処理を開始したエッジのUUID | 認証後のすべてのレコード | 00112233-4455-6677-8899-aabbccddeeff |
trace_id
の数字はランダムです。
これら以外に、ログには適宜必要な情報が出力されます。例えば、HTTPリクエストを受信したときのレコードには、HTTPメソッドの種別を示すmethod
や、エンドポイントのパスを示すpath
が出力されます。
以下は、172.18.0.1
から/api/v1/edges
へのGET
リクエストを受け、それに応答した場合のログ例です:
{
"level": "info",
...
"msg":"Received request.",
...
"path": "/api/v1/edges",
"trace_id": "1234-5678-9012",
"method": "GET",
"query_string": "",
"ua": "curl/7.75.0",
"remote_ip": "172.18.0.1:48138",
"referer": "",
"hostname": "1b758ceb7f17",
"in_bytes": 0,
"proto": "HTTP/1.1"
}
{
"level": "info",
...
"msg":"Responded request",
...
"path": "/api/v1/edges",
"trace_id": "1234-5678-9012",
"method": "GET",
"user_id": "00112233-4455-6677-8899-aabbccddeeff",
"status": 200,
"status_text": "OK",
"response_millis": 25,
"out_bytes": 2177
}
ログレベルの詳細
debug: デバッグ用の情報です。通常、実際の運用環境ではdebug
レベルのログは出力されません。
info: 以下のような事象がinfo
レベルで出力されます。
- アプリケーションの起動および終了
- アプリケーションの正常処理
infoレベルのログについては、基本的に対処の必要はありません。しかし、同様のログが短時間に大量に出力されている場合など、通常の出力状況と異なる場合は確認する必要があります。
warn: 異常ではないものの、注意すべき事象が生じている場合に出力されます。同様のログが短時間に大量に出力されている場合など、通常の出力状況と異なる場合は確認する必要があります。
error: 予期しない動作によりアプリケーションでエラーが発生した場合に出力されます。基本的に、対処する必要があります。
fatal: 予期しない動作によりアプリケーションで重大なエラーが生じ、アプリケーションが終了した場合に出力されます。対処する必要があります。