Google CloudのログをDatadogへ連携する

Google CloudのログをDatadogへ連携する

2025.11.26

はじめに

こんにちは。
クラウド事業本部コンサルティング部の渡邉です。

前回の記事では、Google CloudとDatadogをインテグレーションして、メトリクスを収集する方法を紹介しました。

https://dev.classmethod.jp/articles/try-integration-gcp-datadog/

今回は、その続編として、Google Cloud環境のログをDatadogへ連携する方法について紹介したいと思います。

Google Cloudには標準でCloud Loggingが提供されていますが、マルチクラウド環境での統合的なログ管理や、より高度なログ分析、セキュリティモニタリングを実現するためには、Datadogのログ管理機能を活用することが有効です。

本記事では、Cloud LoggingからPub/Sub、Dataflowを経由してDatadogにログを連携する方法を、Datadogの公式ドキュメントを参考に紹介します。

https://docs.datadoghq.com/ja/integrations/google-cloud-platform/?tab=organdfolderlevelprojectdiscovery#log-collection

前提知識と概要

Cloud Loggingとは

Cloud Loggingは、Google Cloudの統合ログ管理サービスです。

https://cloud.google.com/logging

Cloud Loggingの主な機能は以下の通りです。

  • Google Cloudサービスのログ自動収集
  • カスタムログの収集と保存
  • リアルタイムログ分析
  • ログベースのメトリクス作成
  • ログルーティング機能

Datadogログ管理との比較

Google Cloudには標準でCloud Loggingが提供されていますが、Datadogのログ管理機能を使用することで以下のようなメリットがあります。

観点 Cloud Logging Datadog Logs
マルチクラウド対応 基本的にGCP中心 AWS、Azure、GCP等に対応
ログ分析 標準的なクエリ機能 高度な分析とパターン検出
メトリクス統合 別途設定が必要 ログとメトリクスの統合ビュー
長期保存 Cloud Storage連携が必要 標準で長期保存に対応

ログ連携のアーキテクチャ

本記事で紹介するログ連携のアーキテクチャは以下の通りです。

alt text

このアーキテクチャでは、以下の流れでログが転送されます。

  1. Cloud Logging: Google Cloudの各サービスからログを収集
  2. ログシンク: 特定のログをPub/Subトピックに転送
  3. Pub/Sub: ログメッセージをキューイング(Pullサブスクリプション)
  4. Dataflow: Pub/Subからログを取得し、Datadog形式に変換してDatadog Logs APIに送信
  5. Cloud Nat: DataflowはPrivate IPで構成されているため、Cloud Nat経由でDatadogへアクセス (公式ドキュメントに記載されている構成よりもセキュアにするために構築)

環境準備

Datadogの前提条件

  • Datadogアカウントをすでに作成済みとします。

Google Cloud側の前提条件

  • Google Cloudプロジェクトはすでに作成済みとします。
  • Cloud Run / Cloud SQLなどのログを出力するリソースは作成済みとします。
  • 以下のAPIを事前に有効化しておきます。
    • logging.googleapis.com : Cloud Loggingの利用
    • pubsub.googleapis.com : Pub/Subの利用
    • dataflow.googleapis.com : Dataflowの利用
    • compute.googleapis.com : Compute Engineの利用(Dataflowのワーカー用)
    • secretmanager.googleapis.com : Secret Managerの利用(APIキーの安全な保存)
    • cloudresourcemanager.googleapis.com : プロジェクトリソース管理
gcloud services enable \
  logging.googleapis.com \
  pubsub.googleapis.com \
  dataflow.googleapis.com \
  compute.googleapis.com \
  secretmanager.googleapis.com \
  cloudresourcemanager.googleapis.com

Datadog側の設定

Datadog APIキーの取得

DatadogにログをPushするために、Datadog APIキーを取得します。

  1. Datadogコンソールの左下の【Organization Settings】をクリックします。

  2. 【API Keys】タブを選択し、【New Key】をクリックします。

alt text
Datadog APIキーの取得

alt text
Datadog APIキーの取得

  1. キーの名前(例:Google Cloud Logging Integration)を入力し、【Create Key】をクリックします。

alt text
Datadog APIキーの取得

  1. 作成されたAPIキーの値をコピーして、安全な場所に保存しておきます。

Google Cloud側の設定

サービスアカウントの作成

Dataflowジョブを実行するためのサービスアカウントを作成します。

# Dataflowワーカー用のサービスアカウントを作成
gcloud iam service-accounts create datadog-dataflow-worker \
  --display-name="Datadog Dataflow Worker Service Account" \
  --description="Service Account for Dataflow to send logs to Datadog"

【IAMと管理】→【サービス アカウント】へアクセスし、作成したサービスアカウントを確認します。

alt text
サービスアカウントの作成

サービスアカウントへの権限付与

Dataflowワーカーが必要なリソースにアクセスできるよう、サービスアカウントに権限を付与します。

# Dataflow Adminロール - Dataflowの管理者タスクを実行
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:datadog-dataflow-worker@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
  --role="roles/dataflow.admin"

# Dataflow Workerロール - Dataflowのジョブオペレーションを実行
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:datadog-dataflow-worker@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
  --role="roles/dataflow.worker"

# Pub/Sub Viewerロール - Pub/Subサブスクリプションからのメッセージを表示
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:datadog-dataflow-worker@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
  --role="roles/pubsub.viewer"

# Pub/Sub Subscriberロール - Pub/Subサブスクリプションからのメッセージを取得
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:datadog-dataflow-worker@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
  --role="roles/pubsub.subscriber"

# Pub/Sub Publisherロール - 失敗したメッセージを別のサブスクリプションに公開
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:datadog-dataflow-worker@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
  --role="roles/pubsub.publisher"

# Secret Manager Secret Accessorロール - Secret ManagerでDatadog APIキーにアクセス
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:datadog-dataflow-worker@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
  --role="roles/secretmanager.secretAccessor"

# Storage Object Adminロール - Cloud Storageバケットに対する読み取りと書き込み
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
  --member="serviceAccount:datadog-dataflow-worker@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
  --role="roles/storage.objectAdmin"

【IAMと管理】→【IAM】へアクセスし、作成したサービスアカウントに7つのロールが付与されていることを確認します。

alt text
サービスアカウントへのIAMロールの付与

Pub/Subトピックの作成

Google Cloud環境のログを転送するためのPub/Subトピックを作成します。

# トピックの作成
gcloud pubsub topics create datadog-logs-topic

Google Cloud コンソールから【Pub/Sub】→【トピック】へアクセスし、作成したトピックを確認します。

alt text
Pub/Subトピック

Pub/Subサブスクリプションの作成(Pull型)

Pull型のサブスクリプションを作成します。これによりDataflowがPub/Subからログを取得できるようになります。

# Pullサブスクリプションの作成
gcloud pubsub subscriptions create datadog-logs-pull-subscription \
  --topic=datadog-logs-topic \
  --ack-deadline=60

Google Cloud コンソールから【Pub/Sub】→【サブスクリプション】へアクセスし、作成したサブスクリプションが「Pull」タイプであることを確認します。

alt text
Pub/Subサブスクリプション

ログルーターの設定

Cloud Loggingのログシンクを作成して、特定のログをPub/Subトピックに転送します。すべてのログを転送対象とすることも可能ですが、コストの兼ね合い上、今回はCloud Runのログのみを転送対象として設定します。

特定のリソースのログのみを転送する場合

# Cloud Runのログのみを転送
gcloud logging sinks create datadog-cloudrun-logs-sink \
  pubsub.googleapis.com/projects/${GOOGLE_CLOUD_PROJECT}/topics/datadog-logs-topic \
  --log-filter='resource.type="cloud_run_revision"'

Google Cloud コンソールから【ロギング】→【ログルーター】へアクセスし、作成したログシンクを確認します。

alt text
ログシンク

ログシンクのサービスアカウントへの権限付与

ログシンクが作成されると、専用のサービスアカウントが自動生成されます。このサービスアカウントにPub/Subへの書き込み権限を付与します。

# ログシンクのサービスアカウントを取得
LOG_SINK_SERVICE_ACCOUNT=$(gcloud logging sinks describe datadog-cloudrun-logs-sink --format='value(writerIdentity)')

# Pub/Sub Publisherロールを付与
gcloud pubsub topics add-iam-policy-binding datadog-logs-topic \
  --member="${LOG_SINK_SERVICE_ACCOUNT}" \
  --role="roles/pubsub.publisher"

VPCネットワークとサブネットの作成

Google Cloud環境のログをセキュアにDatadogへ転送するため、Dataflowワーカー用のVPCネットワークとサブネットを作成します。DataflowワーカーはCompute Engineで動作をし、パブリックIPとプライベートIPどちらかを付与することができます。デフォルトではパブリックIPが付与されますが、よりセキュアにDatadogへ転送するため、DataflowワーカーはプライベートIPで構築し、Cloud Natを経由してDatadog APIへアクセスさせるようにします。

# VPCネットワークを作成(カスタムモード)
gcloud compute networks create datadog-vpc \
  --subnet-mode=custom \
  --bgp-routing-mode=regional

# サブネットを作成
gcloud compute networks subnets create datadog-subnet \
  --network=datadog-vpc \
  --region=asia-northeast1 \
  --range=10.0.0.0/24 \
  --enable-private-ip-google-access

Google Cloud コンソールから【VPCネットワーク】→【VPCネットワーク】へアクセスし、作成したVPCとサブネットを確認します。

alt text
VPC/サブネット

Cloud RouterとCloud NATの作成

プライベートIPアドレスを使用するDataflowワーカーがインターネットにアクセスできるよう、Cloud RouterとCloud NATを作成します。

# Cloud Routerを作成
gcloud compute routers create datadog-router \
  --network=datadog-vpc \
  --region=asia-northeast1

# Cloud NATを作成
gcloud compute routers nats create datadog-nat \
  --router=datadog-router \
  --region=asia-northeast1 \
  --nat-all-subnet-ip-ranges \
  --auto-allocate-nat-external-ips

Google Cloud コンソールから【ネットワーク サービス】→【Cloud NAT】へアクセスし、作成したCloud NATを確認します。

alt text
Cloud Nat

Cloud Storageバケットの作成

Dataflowの一時ファイル保存用にCloud Storageバケットを作成します。

# バケット名を設定(グローバルでユニークな名前にする必要があります)
export BUCKET_NAME="${GOOGLE_CLOUD_PROJECT}-dataflow-temp"

# バケットを作成
gcloud storage buckets create gs://${BUCKET_NAME} \
  --location=asia-northeast1 \
  --uniform-bucket-level-access \

alt text
Cloud Storage

Secret ManagerへのDatadog APIキーの保存

先ほど作成したDatadog APIキーをSecret Managerに保存します。

# Secretを作成
gcloud secrets create datadog-api-key \
  --replication-policy="automatic"

# Datadog APIキーをSecretに保存
echo -n "your-datadog-api-key" | gcloud secrets versions add datadog-api-key --data-file=-

Google Cloud コンソールから【Secret Manager】→【シークレット】へアクセスし、作成したシークレットを確認します。

alt text
Secret Manager

Dataflowジョブの起動

DatadogのPub/Sub to Datadog Dataflowテンプレートを使用してジョブを起動します。

Dataflowコンソールへアクセスし、【テンプレートからジョブを作成する】をクリックします。

alt text

以下の基本情報を入力します。

  • ジョブ名:pubsub-to-datadog-logs
  • リージョンエンドポイント:asia-northeast1(東京)
  • Dataflowテンプレート:Pub/Sub to Datadog

alt text
テンプレートからジョブの作成

必須パラメータの設定

Dataflowテンプレートに【Pub/Sub to Datadog】を選択すると、さらに詳細情報を入力できるようになるので、以下を入力します。

必須パラメータ:

  • Pub/Sub input subscription: projects/YOUR_PROJECT_ID/subscriptions/datadog-logs-pull-subscription
  • Datadog Logs API URL: https://http-intake.logs.datadoghq.com

ネットワーク設定(プライベートIP使用)

セキュアな環境で実行するため、ネットワーク設定を行います。

【オプションパラメータ】をクリックして展開し、以下を設定します。

ネットワーキング:

  • ワーカーIPアドレス構成: プライベート (Use Private IPs)
  • ネットワーク: datadog-vpc
  • サブネットワーク: https://www.googleapis.com/compute/v1/projects/YOUR_PROJECT_ID/regions/asia-northeast1/subnetworks/datadog-subnet

APIキー:

  • Google Cloud Secret Manger ID: Secret Managerに保存したAPIキーを指定 projects/YOUR_PROJECT_ID/secrets/datadog-api-key/versions/1
  • Source of The API key passed. One of PLAINTEXT,KMS or SECRET_MANAGER: SECRET_MANAGER

サービスアカウントの設定

サービスアカウント:

  • サービスアカウントのメール: datadog-dataflow-worker@YOUR_PROJECT_ID.iam.gserviceaccount.com

ワーカー設定

ワーカーリソース:

  • 最大ワーカー数: 2
  • ワーカーの数: 1
  • ワーカーのリージョン: asia-northeast1
  • ワーカーの数: asia-northeast1-a

alt text
Dataflowテンプレートの設定項目

すべての設定を入力したら、【ジョブを実行】をクリックします。

Google Cloud コンソールから【Dataflow】→【ジョブ】へアクセスし、起動したジョブのステータスが「実行中」になっていることを確認します。

alt text
Dataflowジョブ

動作確認

ログの検索と分析

Datadogコンソールでログが正しく収集され、検索できることを確認します。

Cloud Runのログ確認

  1. Datadogコンソールの左メニューから【Logs】→【Search】を選択
  2. 検索バーにsource:gcp.cloud.run.revisionを入力
  3. Cloud Runのログが表示されることを確認

alt text
Datadog上でのCloud Runログの確認

ログの詳細を確認すると、以下のような情報が含まれています。

  • タイムスタンプ
  • ログレベル(INFO、ERROR、WARNING等)
  • リソース情報(プロジェクトID、リージョン、サービス名等)
  • ログメッセージ

alt text
Datadog上でのCloud Runログの確認

最後に

今回は、Google CloudのログをDatadogへ連携する方法を、Pub/SubとDataflowを使用したアーキテクチャで紹介しました。

Cloud LoggingからPub/Sub、Dataflowを経由してDatadogにログを転送することで、マルチクラウド環境での統合的なログ管理が可能になり、より高度なログ分析とセキュリティモニタリングを実現できます。

Datadogのログ管理機能には他にも以下のような活用方法があります。

  • ログアーカイブによる長期保存とコンプライアンス対応
  • ログベースのSLI/SLO設定
  • アラート(モニター)設定

前回のメトリクス連携と今回のログ連携を組み合わせることで、Google Cloud環境の包括的な監視体制を構築することができます。

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部コンサルティング部の渡邉でした!

この記事をシェアする

FacebookHatena blogX

関連記事