intdashサーバーのログについて知りたい(インフラ管理者向け)

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: 予期しない動作によりアプリケーションで重大なエラーが生じ、アプリケーションが終了した場合に出力されます。対処する必要があります。