Eventarc を使用して Datadog のモニタリング アラートを Google Cloud に転送する(パート 1)

1. はじめに

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png

Eventarc を使用すると、さまざまなソースのイベントと Google Cloud サービスを簡単に接続できます。マイクロサービスが疎結合かつ分散されたイベント ドリブン アーキテクチャを構築できます。また、イベントの取り込み、配信、セキュリティ、認可、エラー処理も行うため、デベロッパーのアジリティとアプリケーションの復元力が向上します。

Datadog は、クラウド アプリケーション用のモニタリングおよびセキュリティ プラットフォームです。エンドツーエンドのトレース、指標、ログを集約し、アプリケーション、インフラストラクチャ、サードパーティ サービスを監視できるようにします。

この最初の Codelab では、Eventarc を使用してシンプルな Datadog モニタリング アラートを Google Cloud に転送する方法を学びます。

学習内容

  • Datadog プロバイダを見つける方法。
  • Datadog プロバイダへのチャネルを設定する方法。
  • イベントをロギングするワークフローを作成する方法。
  • チャネルで Eventarc トリガーを作成する方法。
  • Datadog モニターの作成方法
  • Datadog のモニター、Eventarc トリガー、ワークフローをテストする方法。

2. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。この値はいつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常、それが何であるかは関係ありません。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常は PROJECT_ID として識別されます)。生成された ID が気に入らない場合は、別のランダムな ID を生成できます。または、ご自身でお試しになることもできます。このステップを終えた後は変更できず、プロジェクト期間中は維持されます。
  • なお、3 つ目の値は、一部の API で使用される [プロジェクト番号] です。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアル以降課金が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクト全体を削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。

55efc1aaa7a4d3ad.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

7ffe5cbb04455448.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。この Codelab での作業はすべて、ブラウザ内から実行できます。インストールは不要です。

gcloud を設定する

Cloud Shell でプロジェクト ID を設定し、PROJECT_ID 変数として保存します。

また、REGION 変数を us-central1 に設定します。これは、後でリソースを作成するリージョンです。

PROJECT_ID=[YOUR-PROJECT-ID]
REGION=us-central1
gcloud config set core/project $PROJECT_ID

API を有効にする

必要なサービスをすべて有効にします。

gcloud services enable \
  eventarc.googleapis.com \
  eventarcpublishing.googleapis.com \
  workflows.googleapis.com \
  workflowexecutions.googleapis.com

3. Datadog プロバイダを確認する

Eventarc プロバイダは、Google Cloud に直接イベントを発行し、そのイベントがプロジェクトに転送されるサービスまたはエンティティです。Datadog などのサードパーティ プロバイダは、Eventarc を介して Google Cloud と統合される Google Cloud 以外のプロバイダです。

Cloud Shell で次のコマンドを実行して、Google Cloud プロバイダとサードパーティ プロバイダのリストを表示します。

gcloud eventarc providers list

以下に、Google Cloud プロバイダとサードパーティ プロバイダを一覧表示し、利用可能なロケーションを示します。

NAME: storage.googleapis.com
LOCATION: asia

NAME: cloudaudit.googleapis.com
LOCATION: asia

NAME: pubsub.googleapis.com
LOCATION: asia

...

次のコマンドを使用すると、リストをサードパーティ プロバイダに絞り込むことができます。

gcloud eventarc providers list --filter='eventTypes.type!~^google*'

リストに Datadog が表示されます。

NAME: datadog
LOCATION: us-central1

Datadog プロバイダの説明を取得して、サポートされているイベントを確認することもできます。

gcloud eventarc providers describe datadog --location $REGION

displayName: Datadog
eventTypes:
- type: datadog.v1.alert
name: projects/project-id/locations/us-central1/providers/datadog

4. チャンネルを設定する

プロジェクトをプロバイダと統合するためのチャネルを設定する必要があります。これには、チャンネルの作成、チャンネルの詳細の取得、プロバイダへの情報の送信が含まれます。プロバイダがチャネルへの接続を初期化すると、プロジェクトへのイベントの送信を開始できます。

チャネルを作成する

gcloud を使用して、Datadog プロバイダのチャネルを作成できます。

CHANNEL_NAME=datadog-channel
gcloud eventarc channels create $CHANNEL_NAME \
   --provider datadog \
   --location $REGION

Google Cloud コンソールの [Eventarc] ページの [チャネル] セクションで作成することもできます。

d03a7173b25e5ea6.png

チャンネルの詳細を取得する

チャンネルを作成したら、gcloud からチャンネルの詳細を取得します。

gcloud eventarc channels describe $CHANNEL_NAME --location $REGION

出力例を以下に示します。

activationToken: so5g4Kdasda7y2MSasdaGn8njB2
createTime: '2022-03-09T09:53:42.428978603Z'
name: projects/project-id/locations/us-central1/channels/datadog-channel
provider: projects/project-id/locations/us-central1/providers/datadog
pubsubTopic: projects/project-id/topics/eventarc-channel-us-central1-datadog-channel-077
state: PENDING
uid: 183d3323-8cas-4e95-8d72-7d8c8b27cf9e
updateTime: '2022-03-09T09:53:48.290217299Z'

同様に、Google Cloud コンソールでこのチャンネルを確認できます。

80d8b2b6a46cb4c5.png

チャンネルの状態は、チャンネルのステータスを示します。これは次のいずれかになります。

  • PENDING - チャネルが正常に作成され、プロバイダとの接続の作成に使用できるアクティベーション トークンがあります。チャンネルの状態を PENDING から ACTIVE に変更するには、チャンネルの作成から 24 時間以内に、トークンをプロバイダに渡してチャンネルを接続するために使用する必要があります。
  • ACTIVE - チャネルはプロバイダと正常に接続されています。ACTIVE チャネルは、プロバイダからイベントを受信してルーティングする準備ができています。
  • INACTIVE - チャネルはイベントを受信できず、再度有効にすることもできません。プロバイダがこのチャンネルとの接続が解除されているか、チャンネル アクティベーション トークンの有効期限が切れてプロバイダが接続されていません。プロバイダとの接続を再確立するには、プロバイダ用の新しいチャネルを作成する必要があります。

アクティベーション トークンは、プロバイダとサブスクライバーのプロジェクト間の接続を作成するために使用される、1 回限りのトークンで時間制限付きです。トークンを使用できるのは、チャンネル作成プロセスで選択した特定のプロバイダのみです。トークンは、チャンネルの作成後 24 時間有効です。24 時間後、チャンネルは INACTIVE になります。

チャンネルの詳細をプロバイダに送信する

次のチャネルの詳細を Datadog プロバイダに送信する必要があります。

  • チャンネル名(例:projects/project-id/locations/us-central1/channels/datadog-channel
  • アクティベーション トークン(例:so5g4Kdasda7y2MSasdaGn8njB2

Datadog にログインし、[インテグレーション] ページに移動して、Google Eventarc インテグレーションがインストールされていることを確認します。

9736bd517e1fa19a.png

Google Eventarc の構成セクションで、完全なチャネル名とアクティベーション トークンを入力します。

a17f522075cdd92e.png

チャンネルのリストにチャンネルが表示され、数秒後に Google Cloud コンソールでもチャンネルが有効になります。

8399d528ccbd4c20.png

これでチャンネルを使用する準備が整いました。

5. ワークフローを作成する

プロバイダからイベントを受信するには、Google Cloud の宛先が必要です。Eventarc は、Cloud Run、Workflows、Kubernetes Service など、さまざまなイベントの宛先をサポートしています。この場合、受信したイベントを単純にロギングするワークフローをデプロイします。

workflow-datadog1.yaml ファイルを作成し、次の内容を追加します。

main:
  params: [event]
  steps:
  - logStep:
      call: sys.log
      args:
        data: ${event}

ワークフローはパラメータとしてイベントを受信しています。このイベントは、Eventarc を介した Datadog のモニタリングから取得されます。イベントを受信すると、ワークフローは受信したイベントをログに記録するだけです。

ワークフローをデプロイします。

WORKFLOW_NAME=workflow-datadog1
gcloud workflows deploy $WORKFLOW_NAME \
  --source workflow-datadog1.yaml \
  --location $REGION

ワークフローはデプロイされていますが、まだ実行されていません。Datadog のアラートを受信すると、Eventarc トリガーによって実行されます。

6. Eventarc トリガーを作成する

これで、Eventarc トリガーを使用して Datadog プロバイダからのイベントを Workflows に接続する準備が整いました。

サービス アカウントを構成する

トリガーを作成するときに、eventarc.eventReceiver ロールを持つサービス アカウントが必要です。専用のサービス アカウントを作成するか、デフォルトのコンピューティング サービス アカウントを使用できます。

わかりやすくするため、デフォルトのコンピューティング サービス アカウントを使用して eventarc.eventReceiver ロールを付与します。

PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
    --role roles/eventarc.eventReceiver

トリガーを作成する

Datadog のチャネル、イベントタイプ、ワークフローの宛先を指定してトリガーを作成します。

gcloud eventarc triggers create datadog-trigger1 \
  --location $REGION \
  --destination-workflow $WORKFLOW_NAME \
  --destination-workflow-location $REGION \
  --channel $CHANNEL_NAME \
  --event-filters type=datadog.v1.alert \
  --service-account $PROJECT_NUMBER-compute@developer.gserviceaccount.com

トリガーを一覧表示して、新しく作成されたトリガーが有効であることを確認できます。

gcloud eventarc triggers list --location $REGION

NAME: datadog-trigger1
TYPE: datadog.v1.alert
DESTINATION: Workflows: workflow-datadog1
ACTIVE: Yes

7. Datadog モニターを作成する

次に、Datadog モニターを作成して Eventarc に接続します。

これは、デフォルト値の Hello World タイプのモニターになります。手動でトリガーしてモニタリング アラートを生成し、それによって Google Cloud で Eventarc イベントが生成されます。

Datadog でモニターを作成するには、Datadog にログインします。メインメニューの Monitors にカーソルを合わせ、サブメニューの New Monitor をクリックします。モニターにはさまざまなタイプがあります。Metric モニタータイプを選択します。

New Monitor ページのステップ 1 と 2 はデフォルトのままにします。

  • ステップ 3 で、Alert threshold を 1 に設定します。
  • 手順 4 で、Test monitor for Eventarc をモニター名として設定し、Notify your team@eventarc_<your-project-id>_<your-region>_<your-channel-name> に設定します。

次のステップでモニターをテストするため、モニターのページは開いたままにしておいてください。

8. モニターとトリガーをテストする

Datadog モニターと Eventarc トリガーをテストするには、モニターを手動でトリガーします。

モニターの作成ページの下部にある [Test Notifications] ボタンをクリックします。

32ccf1cc47b01150.png

次に、[Run Test] ボタンをクリックします。

7f2ff70ec673007b.png

これにより、モニタリングで状態遷移がシミュレートされ、Eventarc イベントがトリガーされます。

workflow-datadog1 ワークフローを確認します。新しい実行内容が表示されます。

adf7cd97ca2e8da7.png

実行の詳細を確認します。ワークフローの入力とログに、モニタリング アラートから生成された Datadog のイベントタイプ datadog.v1.alert が表示されます。

dc78fd8460e5fc0e.png

9. 完了

これでこの Codelab は終了です。2 番目の Codelab に進み、Workflows で Datadog のモニタリング アラートに応答する方法を学びましょう。

学習した内容

  • Datadog プロバイダを見つける方法。
  • Datadog プロバイダへのチャネルを設定する方法。
  • イベントをロギングするワークフローを作成する方法。
  • チャネルで Eventarc トリガーを作成する方法。
  • Datadog モニターの作成方法
  • Datadog のモニター、Eventarc トリガー、ワークフローをテストする方法。