Google CloudのログをDatadogへ連携する
はじめに
こんにちは。
クラウド事業本部コンサルティング部の渡邉です。
前回の記事では、Google CloudとDatadogをインテグレーションして、メトリクスを収集する方法を紹介しました。
今回は、その続編として、Google Cloud環境のログをDatadogへ連携する方法について紹介したいと思います。
Google Cloudには標準でCloud Loggingが提供されていますが、マルチクラウド環境での統合的なログ管理や、より高度なログ分析、セキュリティモニタリングを実現するためには、Datadogのログ管理機能を活用することが有効です。
本記事では、Cloud LoggingからPub/Sub、Dataflowを経由してDatadogにログを連携する方法を、Datadogの公式ドキュメントを参考に紹介します。
前提知識と概要
Cloud Loggingとは
Cloud Loggingは、Google Cloudの統合ログ管理サービスです。
Cloud Loggingの主な機能は以下の通りです。
- Google Cloudサービスのログ自動収集
- カスタムログの収集と保存
- リアルタイムログ分析
- ログベースのメトリクス作成
- ログルーティング機能
Datadogログ管理との比較
Google Cloudには標準でCloud Loggingが提供されていますが、Datadogのログ管理機能を使用することで以下のようなメリットがあります。
| 観点 | Cloud Logging | Datadog Logs |
|---|---|---|
| マルチクラウド対応 | 基本的にGCP中心 | AWS、Azure、GCP等に対応 |
| ログ分析 | 標準的なクエリ機能 | 高度な分析とパターン検出 |
| メトリクス統合 | 別途設定が必要 | ログとメトリクスの統合ビュー |
| 長期保存 | Cloud Storage連携が必要 | 標準で長期保存に対応 |
ログ連携のアーキテクチャ
本記事で紹介するログ連携のアーキテクチャは以下の通りです。

このアーキテクチャでは、以下の流れでログが転送されます。
- Cloud Logging: Google Cloudの各サービスからログを収集
- ログシンク: 特定のログをPub/Subトピックに転送
- Pub/Sub: ログメッセージをキューイング(Pullサブスクリプション)
- Dataflow: Pub/Subからログを取得し、Datadog形式に変換してDatadog Logs APIに送信
- 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キーを取得します。
-
Datadogコンソールの左下の【Organization Settings】をクリックします。
-
【API Keys】タブを選択し、【New Key】をクリックします。

Datadog APIキーの取得

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

Datadog APIキーの取得
- 作成された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と管理】→【サービス アカウント】へアクセスし、作成したサービスアカウントを確認します。

サービスアカウントの作成
サービスアカウントへの権限付与
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つのロールが付与されていることを確認します。

サービスアカウントへのIAMロールの付与
Pub/Subトピックの作成
Google Cloud環境のログを転送するためのPub/Subトピックを作成します。
# トピックの作成
gcloud pubsub topics create datadog-logs-topic
Google Cloud コンソールから【Pub/Sub】→【トピック】へアクセスし、作成したトピックを確認します。

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」タイプであることを確認します。

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 コンソールから【ロギング】→【ログルーター】へアクセスし、作成したログシンクを確認します。

ログシンク
ログシンクのサービスアカウントへの権限付与
ログシンクが作成されると、専用のサービスアカウントが自動生成されます。このサービスアカウントに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とサブネットを確認します。

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を確認します。

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 \

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】→【シークレット】へアクセスし、作成したシークレットを確認します。

Secret Manager
Dataflowジョブの起動
DatadogのPub/Sub to Datadog Dataflowテンプレートを使用してジョブを起動します。
Dataflowコンソールへアクセスし、【テンプレートからジョブを作成する】をクリックします。

以下の基本情報を入力します。
- ジョブ名:
pubsub-to-datadog-logs - リージョンエンドポイント:
asia-northeast1(東京) - Dataflowテンプレート:
Pub/Sub to Datadog

テンプレートからジョブの作成
必須パラメータの設定
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

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

Dataflowジョブ
動作確認
ログの検索と分析
Datadogコンソールでログが正しく収集され、検索できることを確認します。
Cloud Runのログ確認
- Datadogコンソールの左メニューから【Logs】→【Search】を選択
- 検索バーに
source:gcp.cloud.run.revisionを入力 - Cloud Runのログが表示されることを確認

Datadog上でのCloud Runログの確認
ログの詳細を確認すると、以下のような情報が含まれています。
- タイムスタンプ
- ログレベル(INFO、ERROR、WARNING等)
- リソース情報(プロジェクトID、リージョン、サービス名等)
- ログメッセージ

Datadog上でのCloud Runログの確認
最後に
今回は、Google CloudのログをDatadogへ連携する方法を、Pub/SubとDataflowを使用したアーキテクチャで紹介しました。
Cloud LoggingからPub/Sub、Dataflowを経由してDatadogにログを転送することで、マルチクラウド環境での統合的なログ管理が可能になり、より高度なログ分析とセキュリティモニタリングを実現できます。
Datadogのログ管理機能には他にも以下のような活用方法があります。
- ログアーカイブによる長期保存とコンプライアンス対応
- ログベースのSLI/SLO設定
- アラート(モニター)設定
前回のメトリクス連携と今回のログ連携を組み合わせることで、Google Cloud環境の包括的な監視体制を構築することができます。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部コンサルティング部の渡邉でした!






