S3 内のログを Datadog に連携して、Datadog Pipelines で扱ってみる

S3 内のログを Datadog に連携して、Datadog Pipelines で扱ってみる

2026.01.31

概要

S3 に出力したログを Datadog に連携して、Pipelines 機能で扱ってみます。

log-forward-2.png

S3 に配置されるログとしては、下記形式の Nginx のアクセスログを扱います。

10.0.1.164 - - [30/Jan/2026:09:55:14 +0000] "GET / HTTP/1.1" 200 615 "-" "ELB-HealthChecker/2.0" "-"

S3 に配置したログの Datadog への連携

Datadog Forwarder 経由で S3 に配置したログを Datadog に連携します。
Datadog Forwarder は AWS から Datadog にログを送信するための Lambda 関数で、公式ドキュメント記載のクイックリンクから CloudFormation スタックを作成して利用できます。

https://docs.datadoghq.com/ja/logs/guide/forwarder/?tab=cloudformation#インストール

この際、API キーとサイトの指定が必要です。
API キーは Organization Settings から発行可能です。

スクリーンショット 2026-01-31 12.49.55.png

サイトは US1 なら datadoghq.com、AP1 なら ap1.datadoghq.com になります。
https:// は不要なのでご注意下さい。

https://docs.datadoghq.com/ja/getting_started/site/

CloudFormation スタックの作成が完了すると、 DatadogIntegration-ForwarderStack-xxxxxx-Forwarder-xxxxxxxxxx という名前で Lambda 関数が作成されました。
続いて、ログを保管している S3 からイベントトリガーを設定します。

スクリーンショット 2026-01-31 12.58.36.png

スクリーンショット 2026-01-31 13.00.15.png

ここまで完了すると S3 に配置されたログが Datadog 側で確認できるようになります。

スクリーンショット 2026-01-31 13.08.58.png

Datadog の Pipelines 機能で扱う

この状態だとログメッセージを上手くパースできていないので、HTTP ステータスも上手く認識できていません。

スクリーンショット 2026-01-31 13.09.32.png

Pipeline 機能のページに移動します。

スクリーンショット 2026-01-31 13.11.51.png

Nginx 用のパイプラインは設定されていましたが、Datadog エージェント経由では無いためにサービスタグが付与されておらず、上手く認識できていないようです。

スクリーンショット 2026-01-31 13.13.55.png

Pipeline Scanner で確認した所、S3 アクセスログとして処理されていることがわかりました。

スクリーンショット 2026-01-31 13.28.52.png

Datadog ではインテグレーションパイプラインライブラリが存在して、各ログフォーマットを扱うための処理が予め定義されています。
「Once Datadog receives the first log with the corresponding source, the installation will be automatically triggered.」と記載されている通り、該当ログが検出されたら自動で追加されます。

スクリーンショット 2026-01-31 13.23.47.png

ただし、この形でインストールされたパイプラインは編集することができません。
今回は FILTER 条件を編集する必要があるため、Nginx 用のパイプラインをクローンして、S3 から連携されたログが上手く認識されるようにします。

スクリーンショット 2026-01-31 13.16.40.png

クローンすれば、編集できるようになります。

スクリーンショット 2026-01-31 13.32.16.png

FILTER 条件を host:バケット名 に変更して Update をクリックします。

スクリーンショット 2026-01-31 13.33.34.png

この状態だと、作成した Nginx 用のパイプラインと S3 アクセスログ用のパイプラインの両方にマッチします。

スクリーンショット 2026-01-31 13.37.57.png

S3 アクセルログ用の FILTER 条件を書き換えても良いですが、今回は利用していなかったので無効化します。

スクリーンショット 2026-01-31 13.39.54.png

スクリーンショット 2026-01-31 13.40.00.png

これで作成したパイプラインにのみマッチするようになりました。

スクリーンショット 2026-01-31 13.44.08.png

良い感じにパースできています。

スクリーンショット 2026-01-31 13.47.31.png

Status Remapper が設定されたので、HTTP ステータスコードによる重要度の識別もできるようになりました。

スクリーンショット 2026-01-31 13.50.07.png

インデックスするログを選択する

続いて、ヘルスチェック用のリクエストはインデックスしないようにします。
より詳細には user-agentELB-HealthChecker/2.0 であるものはインデックス化しないよう設定します。

スクリーンショット 2026-01-31 16.43.31.png

@http.useragent:ELB-HealthChecker/2.0 でフィルタリングして、インデックス化から除外します。

スクリーンショット 2026-01-31 16.43.53.png

設定後、ヘルスチェック用のリクエストがインデックス化されないようになりました。

スクリーンショット 2026-01-31 16.51.59.png

最後に

今回は Nginx のアクセスログを扱いましたが、その他のログ形式でもインテグレーションパイプラインライブラリで公開されているパイプラインからクローンして、FILTER 条件を変更すれば簡単に扱うことができます。
是非試してみて下さい!

この記事をシェアする

FacebookHatena blogX

関連記事