ゴール設定
テキストログを分析するとき、エラー内容等がキーIDで表示されるとき、そのキーIDを外部ファイルから検索して、日本語で読みやすいメッセージをログに追加したい時がある。
例えば、下記のようなコード表が外部ファイルに保存されていて
Code0010, ぶどう
Code0020, りんご
アプリ実行時に
'2025-09-09 [ERROR]Code0020'
というログが出力された時、
'2025-09-09 [ERROR]Code0020 りんご'
と置き換えて表示されると便利です。
誰でも簡単で素早く、分析ができるような気がします。
使う機能:Reference Table
Datadogでは[Reference Table]という機能があります。キーとメッセージが含まれるCSVファイル他の外部ファイルをアップロードし、ログパイプラインから参照できます。
STEP1. CSVファイルをアップロード
Excelで表を作ります。これをCSVファイルで保存します。
Datadogのメニューは[Integrations]>[Reference Tables]です。
初回は[+Create Your First Table]ボタン押下。[Local CSV]を選びます。外部ファイルはAWS S3他も選ぶことができます。
説明文とプライマリーキーを選択(下図ではKey)して[Save]ボタン押下
アップロードが完了すると、メニュー[Reference Tables]でテーブル一覧を表示できるようになります。
STEP2. ログのモニタリング設定
(1) datadogコンフィグ
ログモニタリングを有効にする
##################################
## Log collection Configuration ##
##################################
logs_enabled: true
取得したいログファイルを指定する。
logs:
- type: file
path: /home/todo/app/todo1.log # ログファイルのパス+ファイル名
source: todo-app-log1 # 自分で好きな名前を定義
service: education # 〃
- type: file
path: /home/todo/app/todo2.log # ログファイルのパス+ファイル名
source: todo-app-log2 # 自分で好きな名前を定義
service: education # 〃
Datadogを再起動し、ログ取得状況を検査する
$ sudo systemctl restart datadog-agent
$ sudo datadog-agent status
ログエージェントのステータスにエラーが無いか?
下記はログファイルの読み取り権限がないエラーが表示されている
==========
Logs Agent
==========
============
Integrations
============
custom_log_collection
---------------------
- Type: file
Path: /home/todo/app/logs/todo.log
Service: education
Source: todo-app-log
Status: Error: open /home/todo/app/logs/todo.log: permission denied
(2) ログファイルにアクセス権を付与
datadog-agentがログファイルを読み取り(r)を実行(x)できるようにする。
$ namei -m todo.log
-rw------- 1 todo todo 22158 Sep 9 21:34 todo.log
$ sudo chmod o+rx todo.log
$ namei -m todo.log
-rw----r-x 1 todo todo 22158 Sep 9 21:34 todo.log
もう一度、Datadogエージェントを再起動して、ログエージェントにエラーが無いか検査する
STEP3. ログ・パイプライン
Datadogの[Log Pipeline]機能を設定する。キーを見つけてメッセージを追加するパイプライン。
(1) 新しいパイプラインを追加
[+ Add a new pipeline]メニューを押下する。対象ログをフィルタリングし、パイプライン名と説明を登録
(2) キーを見つける:新しい Grok Parser を追加
[+ Add Processor]メニューを押下する。
[Grok Parser]を選び、処理名とログのサンプルを入力する。
パース規則を定義する。パース規則を自動で生成するメニューはこちらで説明しています
新しい属性を定義する[例: %{word:app_code}]。この例では[app_code:App01]が追加されます。
(3) テキストを追加する:新しい Lookup Processor を追加
[+ Add Processor]メニューを押下する。
[Lookup Processor]を選び、[Reference Table]およびテーブル名を設定する。
[3 Set source attribute]のところには、検出したいキーの属性を指定します。この例ではGroke Parserで追加した[app_code]を指定します。
[4 Set target attribute path]のところには、Logs Explorer画面に表示したい項目を定義します。この例では”codemessage”とします。
STEP4. 動作検査
Log Explorerを表示します。対象のログを見つけてクリック。Fields&Attributesに、Parserされた値とLookup Processorで追加された値が表示されることを検査します。
STEP5. 分析する
Log Explorerの画面に列項目を追加します。Lookup Processorで指定したtarget attributeの項目名をoptionに追加します。
追加したメッセージが表示される! この例では
[App001]の時は[動作テスト Try]が、
[App002]の時は[動作テスト Test]が表示される。
まとめ
Datadogのログ分析は、キーIDに対するメッセージを外部ファイルから検索して追加できる!
数字の連番で表現するエラーコードやアプリ処理名称などがあるなら、日本語で読みやすいテキストを表示できるので誰でも分析が容易になる。はず。