Contents
はじめに:Datadogでのログ集約の目的と利点
ログを中央集約すると、関連情報の相関検索で原因特定が速くなります。Datadogはログ・メトリクス・トレースの横断分析を提供し、復旧時間短縮と監査対応の効率化に寄与します。
評価指標
評価には具体的な指標を使います。短いサイクルで改善を回してください。
- 検索速度(平均応答時間)
- 総インジェスト量(GB/日)
- インデックス化イベント数
- パース失敗率(%)
- カバレッジ(重要エラーの取りこぼし率)
ログ収集方法の比較と実装パターン
収集方式はスループット、レイテンシ、運用負荷、セキュリティ要件で選びます。それぞれの特性を理解して設計してください。
主な収集方式と推奨用途
代表的な方式と用途を簡潔にまとめます。
- Datadog Agent(ホスト/コンテナ)
- メリット:公式サポートでOut-of-the-boxのタグ付けが可能です。
-
注意点:多数のログでエージェントに負荷が集中するためリソース設計が必要です。
-
DaemonSet(Kubernetes) + Fluent Bit/Agent
- メリット:ノード単位で安定収集できます。前処理が可能です。
-
注意点:短命Podや重複収集の設計に注意します。
-
Fluentd / Fluent Bit(転送型)
- メリット:パースやサンプリングを送信前に実行できます。高ボリュームに有利です。
-
注意点:プラグインやバージョン差の運用が必要です。ディスクバッファの設計を行ってください。
-
Lambda Forwarder(サーバレス) / クラウドネイティブ統合
- メリット:クラウドネイティブ経路で簡便に取り込めます。
- 注意点:呼び出し回数制限や認証の扱いを設計してください。
エンドポイントと認証(リージョン別)
送信先のホスト名/パスと必要なヘッダーはリージョンや専用環境で変わります。まずアカウントのインジェストリージョンを公式で確認してください。詳細は Datadog のログ送信 API ドキュメントを参照してください(例: https://docs.datadoghq.com/api/latest/logs/)。
一般的な送信先の形式は次の通りです。組織のリージョンに応じてドメイン部分が変わります。
- 形式: https://http-intake.logs.{region-domain}/v1/input
- 例(一般的な公開リージョン):
- 米国: https://http-intake.logs.datadoghq.com/v1/input
- 欧州: https://http-intake.logs.datadoghq.eu/v1/input
必要な HTTP 要素については公式を確認してください。一般的には Content-Type: application/json を付与します。APIキーの送付方法は以下のいずれかが使われますが、統一して運用してください。
- リクエストヘッダー: DD-API-KEY:
- クエリパラメータ: ?api_key=
- 補足: Authorization: Bearer はログ取り込みで標準的ではない場合があります。API・統合ごとに仕様が異なるため必ず公式ドキュメントを参照してください。
シークレット管理の考え方は次の通りです。API キーを設定ファイルに直書きしないでください。
- Kubernetes Secret、HashiCorp Vault、AWS Secrets Manager、Azure Key Vault、GCP Secret Manager 等で保管する
- Kubernetes では Secret をマウントして環境変数やファイルで参照する運用が一般的です
- ローテーション方針を定め、定期的にキーを更新して自動反映できる手順を用意する
- API キーは用途別に分け、最小権限化(例:集約用の専用キーを用意)する
Kubernetes の一例(概念的なスニペット。実際は Helm や envsubst で注入してください):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apiVersion: v1 kind: Secret metadata: name: datadog-api type: Opaque data: # base64でエンコードした API キーを設定する DD_API_KEY: REPLACE_WITH_BASE64_ENCODED_KEY --- # DaemonSet 等の Pod 定義で環境変数として注入する例 env: - name: DD_API_KEY valueFrom: secretKeyRef: name: datadog-api key: DD_API_KEY |
実運用では、可能なら Datadog Agent をノード上でリレーにし、API キーは Agent 側で管理する設計が安全です。直接 HTTP 送信する場合は、シークレットをPodにのみ露出し、ローテーションと監査を整備してください。
重複回避とバックプレッシャー対策
重複や送信先の輻輳に備えた対策を実施してください。
- Pod注釈やラベルで収集対象を厳密に指定する
- Fluent Bit/Fluentd のディスクバッファ、retry/backoff を設定する
- 送信先が 429 を返す場合は指数バックオフ+ジッタを実装する
- Agent リレー方式を使うと API キー管理が簡易になります
構造化ログとパイプライン設計(パーサ・プロセッサの順序)
構造化ログ(JSON)を基本に設計すると検索と集計が安定します。パースはパイプラインの早い段階で行う方が後続処理が単純になります。
推奨フィールド設計とカーディナリティ管理
フィールド設計の基本と「カーディナリティ」の扱いです。カーディナリティとはフィールドの一意値数を指します。高カーディナリティはインデックス肥大化や検索遅延を招きます。
- 推奨フィールド(小文字で統一):service, env, version, host, pod, severity, timestamp, trace_id, span_id, message, http.status_code
- 高カーディナリティの扱い:container_id や request_id は原則インデックス化しない。必要なら短期間のみインデックス化するか、ハッシュ化/バケット化する
具体策の例:
- ユーザーIDは索引用ではなく属性保存し、必要に応じて user_segment や user_type のような低カーディナリティ派生フィールドを作る
- トレースとの関連が必要な場合は trace_id をログに注入するが、インデックス化は限定的にする
主要プロセッサと順序のガイド
受信後の典型的な処理順序です。順序を守ると処理の安定性が上がります。
- 受信(Agent/Collector)→ パース(JSON優先)→ タイムスタンプ正規化 → Service/Severity 正規化
- 属性名マッピング(attribute remapper)→ マスキング(PII除去)→ サンプリング/ドロップ
- 補強(Kubernetes metadata、GeoIP 等)→ ファセット/メジャー抽出 → 最終出力(インデックスまたはアーカイブ)
パースに失敗したログは別タグで保管し、パース失敗率を監視してください。失敗増加はフォーマット変更の早期検知につながります。
PII対策とマスキングの技術的注意点
ログに含まれる個人情報(PII)は法規制の対象です。正規表現だけの対処は誤検出や未検出が起きやすい点に留意してください。下記を組み合わせて運用することを推奨します。
- 原則:アプリケーション側で PII を出さない(構造化ログで除外)
- マスキング:本番ではトークナイゼーションやハッシュ(HMAC を推奨)で可逆性を制御する
- マッピング管理:トークン→実データの対応は Vault 等で厳格に管理し、アクセス制御を設ける
- 検出精度向上:クレジットカードは正規表現+Luhnチェックで誤検出を減らす
- テスト:単体テスト、境界ケース、Fuzz テストで誤検出率と漏れ率を評価する
- 保持・削除:保持ポリシーを作成し、不要ログは自動削除する運用を組み込む
参考のサンプル正規表現は出発点であり、そのまま本番適用しないでください。法規制対応は法務と協働で設計してください。
サンプリング・除外ルールとインデックス設計(コスト最適化)
インデックスは検索性能とコストに直結します。重要イベントは保持し、デバッグ等はサンプリングで削減します。
サンプリング・Dropルールの実装例と注意点
典型的なルール例と技術的注意です。トレース単位のバイアスを避けるため、決定論的サンプリングを検討してください。
- 例:service:frontend AND severity:debug → sample 10%
- 例:service:payments AND severity:>=error → keep 100%
- 例:message contains "health check" OR path == "/health" → drop
決定論的サンプリングの考え方:
- trace_id のハッシュを用いてサンプルを決定する(例:hash(trace_id) % 100 < 10)
- ドロップ数をメトリクス化して監視し、想定外の削減が起きたらアラートする
緊急時に一時的に全体ドロップを有効化する運用手順を用意しておくと、過剰インジェストの即時対策が可能です。
インデックス(ファセット)設計と高カーディナリティ対応
インデックス化は利用頻度に基づいて選びます。高カーディナリティな項目はインデックス化の罠になります。
- 優先インデックス候補:service, env, version, http.status_code, severity
- メジャー登録:レスポンスタイム等の数値は measures にする
- 高カーディナリティ:container_id や request_id は原則インデックス化しない。短期インデックス(例:7日)で対応する運用を検討する
定期的に facet の利用状況をレビューし、使用されない索引は削除してください。
コスト試算の方法と参考
コストはプラン・地域で変わるため、次の手順で見積もります。具体単価は Datadog の料金ページで確認してください(例: https://www.datadoghq.com/pricing/log-management/)。
基本的な試算式(概念):
- 月間インジェスト GB = 日間平均インジェスト GB × 30
- インデックス保存量 GB = 月間インジェスト GB × (保持日数 / 30)
- 月間インデックスコスト = インデックス保存量 GB × 単価($/GB/月)
試算の例(サンプル、単価は仮定):
- 日間インジェスト: 100 GB → 月間 3,000 GB
- 30日保持のインデックス相当量 = 3,000 GB
- 仮定単価 = $1/GB/月 → 月間インデックスコスト = $3,000(サンプル)
実際の単価とリージョン、オプション(アーカイブ等)を掛け合わせて請求試算を行ってください。請求レポートと Billing API のデータを利用すると実測値に基づく推定が可能です。
アーカイブ・再取得(Rehydration)、セキュリティ設計とコスト試算
アーカイブはコスト低減の有効手段ですが、セキュリティと再取得運用を設計する必要があります。アーカイブ先の保護と再取得の権限管理を明確にしてください。
アーカイブ先のセキュリティ設計(S3ベストプラクティス)
S3 等にアーカイブする場合の最低限のセキュリティ対策です。
- サーバーサイド暗号化(SSE-KMS)を使用する。KMS キーには厳密なキー ポリシーを付与する
- バケットポリシーでアクセス主体を限定する(特定の IAM ロール/Datadog サービスアカウントのみ)
- パブリックアクセスブロックを有効にする
- バケットへのアクセスは VPC エンドポイントや PrivateLink で制限する
- バージョニング/Object Lock(必要な場合)で不正削除を防ぐ
- アクセス監査:S3 サーバーアクセスログと CloudTrail を有効にして監査を残す
- ライフサイクル管理で古いオブジェクトを自動削除する
運用上はアーカイブ用アカウントを分離し、アーカイブの読み取り権限のみを限定的に付与すると安全性が高まります。
Rehydrationの実務手順・権限・コスト影響
再取得(Rehydration)を行う際の実務手順と注意点を整理します。詳細は Datadog のアーカイブ/再取得ドキュメントを参照してください(例: https://docs.datadoghq.com/logs/archives/)。
手順の概略:
- 前提確認:対象期間がアーカイブに存在するか確認する。Datadog が S3 にアクセス可能か確認する(必要に応じてクロスアカウントロールの設定)。
- 権限確認:再取得操作を行うユーザー/サービスの API キーやロールにアーカイブ再取得の権限があるか確認する。S3 の読み取り権限(s3:GetObject 等)も必要になる場合があります。
- 再取得リクエスト:UI または API でアーカイブを指定し、再取得対象の時間範囲を指定する。API が提供されている場合は、アーカイブ ID と期間を指定してジョブを作成します。
- 進捗監視:ジョブの進捗を監視する。ボリュームにより復元時間は変動します(数GBは数分〜数十分、数百GB〜TB 単位は数時間〜それ以上のケースあり)。
- コスト確認:再取得したログは再度インジェスト処理されるため、通常のインジェスト課金が発生します。さらに S3 の取り出し(データ転送)コストも発生する場合があります。事前に推定してください。
- 後処理:調査終了後、不要なインデックス保持を解除するか、短期インデックスに留めるなどの運用を行います。
再取得は一時的なコストが発生し得る操作です。権限を限定した上で、承認フローやコスト見積もりのルールを整備してください。
アーカイブのアクセス管理と監査
アーカイブの監査とアクセス管理は必須です。
- S3 のアクセスは最小権限で付与する。Datadog に与える権限も限定する
- KMS キーのアクセスはロールベースで管理し、必要なサービスのみに付与する
- CloudTrail や S3 アクセスログで誰がいつ再取得や参照を行ったかを記録する
- キーのローテーションと監査ログの保存期限をポリシー化する
運用チェックリスト・トラブルシューティングと導入手順
運用は自動化と定期レビューを中心に設計します。障害時の手順を明確にしておくと対応が速くなります。
定期運用チェック項目
日次・週次・月次で確認すべき項目の例です。自動監視・アラート化を推奨します。
- パイプラインの自動テスト(ステージ環境でのパース/マスキング検証)
- パース失敗率の監視と閾値アラート
- インジェストスパイクの検出(ingested GB、events/sec)
- サンプリング・Dropルールの効果検証と定期見直し
- インデックス/ファセットの利用状況監査
- シークレットのローテーション履歴と期限管理
- アーカイブの健全性(S3のアクセス権、ライフサイクル)と再取得ログの監査
トラブルシューティングの一般手順
代表的な障害と対応の流れです。まずは影響範囲と緊急度を特定してください。
- 過剰インジェスト
- 即時対応:該当サービスの Debug レベルを落とすか、一時的に強いサンプリング/ドロップを適用する
-
次工程:原因ログの特定、アプリログレベルの恒久的見直し
-
パースエラー増加
- ログサンプルを抽出してフォーマット差分を確認する
-
Grok/JSON ルールを段階的に修正し、テストを回す
-
重複ログ
- 収集パスを洗い出し、同一ログを送る Collector を特定する
-
デデュープ用のハッシュキー(例:trace_id + timestamp + message_hash)を検討する
-
レート制限 / 429 応答
- 送信側で指数バックオフ+ジッタを実装する(初期 1s, 最大 30-60s 等)
- 永続的障害時はディスクバッファに溜めるか、別経路へ迂回する
導入・移行手順(段階的)
移行は段階的に実施し、各段階で検証を行ってください。
- PoC:小さなサービスで構造化ログ、trace 注入、基本パイプラインの検証を行う
- パイロット:重要サービスへ適用し、サンプリングとファセット設計を調整する
- スケール:DaemonSet/Fluent Bit 等で広範囲に展開。アーカイブを有効にして保管運用を開始する
- 本番切替:段階的に本番ログを集約し、インジェストと検索の KPI を監視する
各段階でシークレット管理、マルチライン解析、PII の除去、再取得(Rehydration)のテストを行ってください。
まとめ
ログ集約は可観測性向上と調査時間短縮に直結します。運用では認証・シークレット管理、PII 対策、インジェスト設計、アーカイブと再取得、コスト管理を包括的に扱うことが重要です。
- 認証はリージョン固有のエンドポイントとヘッダー仕様を確認し、シークレット管理で API キーの露出を防ぐ
- PII は正規表現だけに頼らずトークン化・ハッシュ・削除ポリシーで対処する
- 高カーディナリティはインデックス負荷とコスト増の要因になるため慎重に扱う
- アーカイブは SSE-KMS、バケットポリシー、監査ログで保護し、再取得時はインジェスト課金と S3 の取り出しコストを見積もる
- レート制限対策としてバッファ、指数バックオフ、決定論的サンプリングを組み合わせる
公式ドキュメントや料金ページを参照し、環境固有の差分を確認した上で上記設計を実装してください。
参考(公式):
- ログ管理ベストプラクティス: https://docs.datadoghq.com/logs/guide/best-practices-for-log-management/
- Logs API(送信仕様): https://docs.datadoghq.com/api/latest/logs/
- アーカイブと再取得: https://docs.datadoghq.com/logs/archives/
- 料金情報(ログ管理): https://www.datadoghq.com/pricing/log-management/