【datadog】datadog pipeline ~ 入門編 ~

◾️はじめに

https://dk521123.hatenablog.com/entry/2025/04/14/145556
https://dk521123.hatenablog.com/entry/2025/02/14/200308

で、Datadogのpipeline(パイプライン)について扱った。
久しぶりに、datadog dashboard を触って、意図通りに表示されなかったのだが
その原因が、このdatadog pipelineの理解不足だったので、
改めて、datadog pipeline の構築を通して、曖昧だった知識を整理する

なお、基本的な用語などの知識に関しては、以下の関連記事を参照のこと

datadog pipeline ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2025/04/14/145556

目次

【1】Pipeline 構築する上での概要
【2】Pipeline構築手順
 0)お題
 1)Pipeline作成
 2)プロセッサーによるログのパース
【3】意図したようにログがパースされなかった場合
 1)フィルター部分が機能しているかどうかを確認
 2)新規ログで確認
【4】Tips
 1)パース規則は複数指定可能

【1】Pipeline 構築する上での概要

* pipeline 構築する際に大きく分けて、以下の2点を行う

1. パイプラインのフィルターで、処理対象のログを絞り込む
2. プロセッサーを使用して、ログに新たな属性(e.g. Tag)を追加

# 1. ありきの 2. ということが、ちゃんと整理できていなかったため
# 今日少しハマってしまった。 

【2】Pipeline構築手順

* 公式ドキュメントだと以下を参照。

https://docs.datadoghq.com/logs/log_configuration/pipelines/?tab=source#create-a-pipeline

0)お題

* 以下のログをパイプラインでパースする

今回のログ構文

[XXXX_Log] {<JSON>}

ログ例

[Custom_Log] {"id": "X001", "name": "Mike"}
[UserAPI_Log] {"id": "U001", "name": "Kevin"}
[Billing_Log] {"id": "B456", "name": "Smith"}

今回のログ仕様

* 「[XXXX_Log]」の「XXXX」部分は可変
* その後のJSON部分は、項目も含めて何が来るかは未定

1)Pipeline作成

[1] Datadog ログインし、[Logs]-[Pipelines] に移動
[2] 「Add a new pipeline」リンク or「New Pipeline」ボタン押下
[3] 以下を入力(後述「【3】ー1)」も参照)
Items Explanations Example
Filter フィルター条件 @message:¥[*_Log¥]
Name パイプライン名 hello-world
Tags タグ・任意(未入力でもOK。後述「補足1:Pipelineのタグについて」も参照) type:custom
Description 説明欄・任意(未入力でもOK) This is a sample
[4] 「Create」ボタンを押下

補足1:フィルター条件

* 「@message」は予約済み属性で、ログエントリの本文を表す
 => 「予約済み属性(Reserved attributes)」については
  以下の関連記事を参照のこと

datadog ~ 属性/ファセット/属性検索@ ~
https://dk521123.hatenablog.com/entry/2025/02/26/150349

補足2:Pipelineのタグについて

* パイプライン自体にメタデータとして付与されるもので「管理・検索用」
 => ex1 env:prod → 本番環境向け。 ex2. team:infra → 特定チーム管理

* 実行時のログには影響しない

2)プロセッサーによるログのパース

[1] 追加したパイプライン配下の「Add Processor」リンク 押下
[2] 以下を入力

https://docs.datadoghq.com/ja/logs/log_configuration/processors/?tab=ui

Items Explanations Example
Select the processor type 対象プロセッサーを選択 Grok Parser
Name the processor プロセッサー Hello world Processor
log samples ログサンプル(複数指定可能。実際のログを持ってくるといい) 上述「0)お題」の「ログ例」を入力
Define parsing rules パース規則(複数指定可能。「【4】Tips」参照) 後述「※ パース規則例」参照
[3] 「Match」になることを確認し、「Create」ボタン押下

※ パース規則例

MyRule1 \[%{word:log_type}\] %{json:log_contents}

# 詳細な解説は、以下の関連記事を参照

datadog Logs ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2025/02/15/213417

【3】意図したようにログがパースされなかった場合

1)フィルター部分が機能しているかどうかを確認

# ここでハマった、、、

* フィルター部分がありきなので、
 後の「2)プロセッサーによるログのパース」がちゃんと「Match」しても
 上手く動かない、、、
* 実際のログが入力したフィルター条件でヒットしているかを確認した方がいい

 => フィルターに誤りがある可能性があるため
 (そもそも実際に意図するログがない可能性があるので、
  できれば開発環境などで予め表示させておくと作業がスムーズになる)
 => ここで間違うと意図した表示にならないので慎重に、、、

2)新規ログで確認

* Pipeline作成後、過去ログは遡らないので、
 開発環境などで新しくログ出力してから確認してみる

【4】Tips

1)パース規則は複数指定可能

* パース規則は以下のように複数指定可能

パース規則例

MyParsingRule1 %{word:user} connected on %{date("MM/dd/yyyy"):date}
MyParsingRule2 ...

datadog Logs ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2025/02/15/213417

関連記事

datadog ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2024/03/30/004746
datadog pipeline ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2025/04/14/145556
datadog Logs ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/02/14/200308
datadog Logs ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2025/02/15/213417