Datadog でログを自在に操る!パイプラインとプロセッサーの活用法
こんにちは。テクニカルサポートチームのShiinaです。
はじめに
Datadog のログ管理機能はコスト効率よく、制限なしにすべてのログを収集、処理、アーカイブ、検索、監視することが可能です。
しかしながらログの形式は多種多様であり、すべてのログ形式を処理しやすいように変換してくれるものではありません。
ログメッセージの重要度を示すステータスが一致しなかったり、メッセージ自体がパースされない場合もあります。
今回は上記ケースの例をもとに、パイプラインとプロセッサーの活用方法を紹介します。
パイプラインとは
広範囲の形式から取得したログを Datadog で一般的に扱えるような形式に変換する機能のことです。
JSON 形式のログは自動でパースしてくれますが、それ以外の形式ではパイプラインを利用する必要があります。
Datadog ではインテグレーションごとに専用のパイプラインライブラリが用意されています。
ログの収集設定を行うコンフィグレーションファイル(conf.yaml
)で正しいログソースを設定することで、パイプラインライブラリーを利用してログの形式変換を自動でしてくれます。
例えば、source:nginx
とした場合、nginx のパイプラインが利用されます。
プロセッサーとは
ログを加工・変換するためのツールで、パイプライン内で順次実行されます。
そのため、プロセッサーの順序には注意が必要です。
主な機能として、パース処理、属性の追加/削除、文字列の置換、ルックアップテーブルの適用などがあります。
これらのプロセッサーを組み合わせることで、生ログから構造化されたデータへの変換や、必要な情報の抽出が可能になります。
Grok パーサーとは
Datadog で利用される半構造化されたメッセージをパースする専用プロセッサーです。
メッセージから属性を抽出することができます。
パース規則は、正規表現よりも簡単な %{MATCHER:EXTRACT:FILTER}
構文を使用して記述します。
- ログメッセージ
Welcome to Production Web-Server - Logged in as admin
- パース構文
Rule Welcome to %{word:env} %{data:server} - Logged in as %{word:user}
- 結果
次のようなログ属性が生成されます。
{
"server": "Web-Server",
"env": "Production",
"user": "admin"
}
ログ属性は JSON のキーにように動作するため、キーと値を指定したログ検索を行うことが可能になります。
ログメッセージのステータス
Datadog はログメッセージの重大度によってステータスをマッピングします。
Log Explorer ではステータスに応じてログメッセージの背景色が変わります。
また、ログメッセージのステータスに応じた Standard Attributes の Status によるフィルタ検索も可能となります。
ログソースごとに定められている重要度を示す属性の値となっている文字列によってログのステータスが決まります。
上記はログステータスリマッパーを利用することで任意の属性に割り当てることができます。
文字列 | マッピング |
---|---|
emerg*, f* | emerg (0) |
a* | alert (1) |
c* | critical (2) |
err* | error (3) |
w* | warning (4) |
n* | notice (5) |
i* | info (6) |
d*, t*, v*, trace*, verbose* | debug (7) |
o*, s*, OK, Success | OK |
その他 | info (6) |
整数値を受け取った場合、()の値に示す、Syslog の重大度標準にマップされます。
例として、3の場合は error
となります。
日本語版 Windows イベントログのステータスの例
日本語にローカライズされた Windows ではイベントログの重大度表記も日本語となります。
重大度を示す属性である level
の値が "エラー" という文字列となっており、マッピング表では "その他" と分類されます。
その結果、ステータスは info
と割り当てされてしまいます。
info
で統一されてしまうと可視性が低下し、Status によるフィルタ検索が行えません。
パイプライン設定を行い、正しいステータスに割り当てを行ってみます。
ログ収集設定
Windows のイベントログを収集する Datadog エージェントのコンフィギュレーションファイルのサンプルは次のとおりです。
logs:
- type: windows_event
channel_path: Application
source: windows.events
service: web-server
- type: windows_event
channel_path: System
source: windows.events
service: web-server
- type: windows_event
channel_path: Security
source: windows.events
service: web-server
ファイル修正後、Datadog エージェントを再起動して設定を反映させます。
パイプライン設定
Logs から Pipelines を選択します。
Pipelines 一覧より Windows Events にカーソルを移動し、「Clone」をクリックします。
※source: windows.events
と設定することで Windows Events インテグレーションが有効化され、自動でパイプラインが登録されます。
Are you sure? と聞かれるので「Clone」をクリックします。
元のパイプラインが無効化され、クローンされたパイプラインが追加されます。
プロセッサー設定
カテゴリープロセッサーとステータスリマッパーをパイプラインに追加します。
Pipelines 一覧より Clone した Windows Events のパイプラインを選択します。
選択するとパイプラインに登録されているプロセッサーの一覧が表示されます。
①カテゴリープロセッサー追加
「Add Processor」をクリックします。
次のように入力を行い、「Create」をクリックします。
- Select the processor type
Category Processor - Name the processor
JapaneseWindowsEventlog-CategoryRemapper - Set target category attribute
eventlog_level - Populate category
All events that match と Appear under the value name に対して以下の値を入力し、「Add」をクリックします。
重大度ごとにそれぞれ設定を行います。
All events that match | Appear under the value name |
---|---|
@level:重大 |
Emergency |
@level:エラー |
Error |
@level:警告 |
Warning |
@level:情報 |
Info |
②ステータスリマッパーの追加
「Add Processor」をクリックします。
次のように入力を行い、「Create」をクリックします。
- Select the processor type
Status Remapper - Name the processor
JapaneseWindowsEventlog-StatusRemapper - Set status attribute(s)
eventlog_level
設定後、プロセッサーの一覧が次のように表示されていれば OK です。
パイプライン設定後のログメッセージ
情報、警告、エラーのイベントログを擬似的に出力し、Log Explorer でログを見てみます。
ステータスが割り当てされていることが確認できます。
ログメッセージをクリックし、メッセージの属性も見てみます。
カテゴリープロセッサーにより level:エラー
の属性から eventlog_level:Error
という新しい属性が付与されています。
さらにステータスリマッパーにより重要度の属性を eventlog_level
と割り当てたため、マッピングされるメッセージのステータスは Error
になりました。
RDS for MySQL のエラーログ(CloudWatch Logs)の例
CloudWatch Logs に出力される RDS for MySQL のエラーログは source:rds
が設定されます。
上記ログソースに対するパイプラインは用意されていません。
メッセージのパースが行われないため、生ログメッセージがそのまま出力されています。
また、重要度を示す属性がなく、ステータスは info
と割り当てされてしまいます。
パイプライン設定を行い、パースおよびステータスの割り当てを行ってみます。
ログ収集設定
はじめに RDS の設定でログのエクスポートでエラーログタイプを選択し、CloudWatch Logs にログを発行させます。
次に Datadog Forwarder Lambda 関数を利用して CloudWatch Logs のログを収集します。
Lambda サブスクリプションフィルターを作成し、Datadog Forwarder Lambda 関数にサブスクライブさせます。
パイプライン設定
Logs から Pipelines を選択します。
Pipelines 一覧より「Add a new pipeline」をクリックします。
次のように入力を行い、「Create」をクリックします。
- Filter
source:rds - Name
RDS for MySQL Error Log
プロセッサー設定
Grok パーサー、ステータスリマッパー、メッセージリマッパーをパイプラインに追加します。
Pipelines 一覧より追加した RDS for MySQL Error Log のパイプラインを選択します。
①Grok パーサー追加
「Add Processor」をクリックします。
次のように入力を行い、「Create」をクリックします。
- Select the processor type
Grok Parser - Name
RDS for MySQL Error Log-Grok Parser - log samples
2024-11-27T06:59:09.482526Z 5 [Note] [MY-010051] [Server] Event Scheduler: scheduler thread started with id 5 (event_scheduler.cc:564)
- Define parsing rules
Rule %{date("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'"):timestamp} %{number:thread} \[%{word:label}\] \[%{data:err_code}\] \[%{word:subsystem}\] %{data:msg}
エラーログ出力形式[1]および MySQL Server ログのコアエラーイベントフィールド[2]を参考に、パースを行います。
②ステータスリマッパーの追加
「Add Processor」をクリックします。
次のように入力を行い、「Create」をクリックします。
- Select the processor type
Status Remapper - Name the processor
RDS for MySQL Error Log-StatusRemapper - Set status attribute(s)
label
③メッセージリマッパーの追加
「Add Processor」をクリックします。
次のように入力を行い、「Create」をクリックします。
- Select the processor type
Message Remapper - Name the processor
RDS for MySQL Error Log-MessageRemapper - Set status attribute(s)
msg
設定後、プロセッサーの一覧が次のように表示されていれば OK です。
パイプライン設定後のログメッセージ
Log Explorer でログを見てみます。
ステータスが割り当てされていることが確認できます。
Log Explorer では属性をカラムに追加することができるため、@err_code
@subsystem
も追加してみました。
CONTEXT 列にはメッセージ内容のみ表示されて、だいぶスッキリしました。
ログメッセージをクリックし、メッセージの属性も見てみます。
Grok パーサーにより次の属性が追加されました。
・timestamp
・thread
・label
・err_code
・subsystem
・msg
ステータスリマッパーにより重要度の属性を label
と割り当てたため、マッピングされるメッセージのステータスは Warning
になりました。
メッセージリマッパーでメッセージ属性に msg
を割り当てたため、 CONTEXT 列に表示されました。
まとめ
Datadog のログ管理機能では、パイプラインとプロセッサーを活用してログの形式変換や処理が可能です。
Grok パーサーを用いて半構造化データを解析し、ステータスリマッパーでステータス属性をカスタマイズできます。
日本語版 Windows イベントログや CloudWatch Logs に出力される RDS for MySQL のエラーログにも柔軟に対応が可能です。
ログの検索性と可視性が向上しますので、ぜひパイプラインを活用してみてください。
本記事が誰かのお役に立てれば幸いです。
参考