【こうぞうかろぎんぐ】

構造化ロギング とは?

最終更新:
💡 ログを項目名と値で記録する

ログの内容を、項目名と値を持つデータとして記録する手法。JSONなどで時刻・レベル・処理時間などを分けて出力し、ログ基盤で項目ごとの検索や集計をしやすくする。

📌 このページのポイント
ログを項目名と値で記録する 文章のログERROR 利用者42処理に失敗文字を検索できるJSONの例level: "ERROR"user_id: 42項目ごとに扱えるログ集約基盤levelとuser_idで絞る件数や処理時間を集計JSONは構造化ログの代表的な形式項目名・型・単位をそろえる
左は文章、右は同じ出来事を項目として記録する例。表示の右側はJSONのフィールドを抜き出したもので、完全なJSON構文ではない。橙は文章、緑は項目、青は検索・集計。下への矢印はログ基盤への取り込みで、設定が必要。文章ログも検索できる。
ひよこ ひよこ
文章で書くログとは何が違うの?
ペンギン先生 ペンギン先生
たとえば「ERROR ユーザー42が見つからない」という文章を、level、user_id、messageなどの項目に分けて記録するんだ。人が読むだけでなく、プログラムがそれぞれの値を扱いやすくなるよ。
ひよこ ひよこ
JSONで書けばいいの?
ペンギン先生 ペンギン先生
JSONは代表例だよ。{"level":"ERROR","user_id":42,"message":"ユーザーが見つからない"}なら、レベルは文字列、利用者IDは数値として分かれている。ただし構造化の中心は項目と値を持つことで、JSONだけが唯一の形式ではないんだ。
ひよこ ひよこ
普通の文章は検索できないの?
ペンギン先生 ペンギン先生
文章のログも検索できるよ。Cloud LoggingではtextPayloadの文字を検索でき、JSONオブジェクトのjsonPayloadでは特定のパスを検索したり項目をインデックス化したりできる。levelがERROR、user_idが42という条件を分けて指定しやすいんだ。
ひよこ ひよこ
毎回JSONを手で作るの?
ペンギン先生 ペンギン先生
ロギングライブラリに項目を渡して出力できるよ。Pythonのstructlogではイベントを辞書として扱い、JSONRendererを設定するとJSONにできる。ライブラリを使うだけで出力が必ずJSONになるわけではなく、形式の設定も確認するんだ。
ひよこ ひよこ
項目を分ければ、調査はいつも速くなる?
ペンギン先生 ペンギン先生
調査しやすくなるけれど、必要な情報の記録やログ基盤への取り込みも大切だよ。たとえばelapsed_msを数値にそろえれば処理時間を集計しやすい。同じ意味なのにサービスごとに名前や単位が違うと、横断的な比較には調整が必要になるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「構造化ロギング」って出てきたら「ログを項目名と値で記録する方法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Structured Logging」 = 構造化されたログ出力
💬 structured(構造化された)+ logging(ログ記録)の組み合わせ。フリーテキストのログを「構造」として扱えるようにした手法だよ

参考資料

← 用語集にもどる