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

1. はじめに

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

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

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

Workflows はフルマネージドのオーケストレーション プラットフォームで、ワークフローと呼ばれる、ユーザーが定義した順序でサービスを実行します。これらのワークフローでは、Cloud Run や Cloud Functions でホストされているサービス、Cloud Vision AI や BigQuery などの Google Cloud サービス、任意の HTTP ベースの API を組み合わせることができます。

最初の Codelab では、Eventarc を使用して Datadog のモニタリング アラートを Google Cloud にルーティングする方法を学習しました。この 2 番目の Codelab では、Workflows を使用して Datadog のモニタリング アラートに応答する方法を学びます。具体的には、2 つの Compute Engine 仮想マシンを作成し、Datadog モニターでモニタリングします。いずれかの VM が削除されると、Eventarc 経由で Datadog から Workflows にアラートが届きます。次に、Workflows は削除された VM を再作成して、実行中の VM の数を 2 に戻します。

学習内容

  • Datadog の Google Cloud インテグレーションを有効にする方法。
  • Compute Engine VM を確認、作成するワークフローを作成する方法。
  • Eventarc を使用して Datadog のモニタリング アラートを Workflows に接続する方法。
  • Datadog のモニターを作成し、VM の削除に関するアラートを通知する方法について説明します。

2. 設定と要件

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「PROJECT_ID」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。
  • 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud Console で課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルを終了した後に課金が発生しないようにリソースをシャットダウンするには、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 で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。

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 \
  workflows.googleapis.com \
  workflowexecutions.googleapis.com

3. Datadog チャネルを確認する

最初の Codelab で作成した Datadog チャンネルが有効になっていることを確認します。Cloud Shell で次のコマンドを実行して、チャネルの詳細を取得します。

CHANNEL_NAME=datadog-channel
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: ACTIVE
uid: 183d3323-8cas-4e95-8d72-7d8c8b27cf9e
updateTime: '2022-03-09T09:53:48.290217299Z'

チャンネルの状態は Google Cloud コンソールでも確認できます。

8399d528ccbd4c20.png

チャンネルの状態は ACTIVE である必要があります。そうでない場合は、最初の Codelab に戻り、手順に沿って Datadog でチャネルを作成して有効にします。

4. Datadog の Google Cloud インテグレーションを有効にする

Datadog を使用してプロジェクトをモニタリングするには、Datadog に必要な API を有効にし、サービス アカウントを作成して、サービス アカウントを Datadog に接続する必要があります。

Datadog の API を有効にする

gcloud services enable compute.googleapis.com \
  cloudasset.googleapis.com \
  monitoring.googleapis.com

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

Datadog の Google Cloud インテグレーションでは、サービス アカウントを使用して Cloud Logging API を呼び出し、Compute Engine インスタンスからノードレベルの指標を収集します。

Datadog のサービス アカウントを作成します。

DATADOG_SA_NAME=datadog-service-account

gcloud iam service-accounts create $DATADOG_SA_NAME \
    --display-name "Datadog Service Account"

次の IAM ロールを付与して、Datadog サービス アカウントに指標、タグ、イベント、ユーザーラベルを収集できるようにします。

DATADOG_SA_EMAIL=$DATADOG_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$DATADOG_SA_EMAIL \
    --role roles/cloudasset.viewer

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$DATADOG_SA_EMAIL \
    --role roles/compute.viewer

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$DATADOG_SA_EMAIL \
    --role roles/monitoring.viewer

サービス アカウント キーを作成してダウンロードします。Datadog とのインテグレーションを完了するには、キーファイルが必要です。

Cloud Shell ホーム ディレクトリにサービス アカウント キー ファイルを作成します。

gcloud iam service-accounts keys create ~/key.json \
  --iam-account $DATADOG_SA_EMAIL

Cloud Shell で More ⁝ をクリックし、Download File を選択します。[File path] フィールドに「key.json」と入力します。キーファイルをダウンロードするには、Download をクリックします。

サービス アカウントを Datadog に接続する

Datadog アカウントで Integrations セクションに移動し、Google Cloud 統合タイルを検索します。

cf1ffa6547fba3e4.png

Google Cloud Platform にカーソルを合わせると、[Install] ページに移動します。

31b365a31bc50cc8.png

Upload Private Key File セクションでサービス アカウント キーをアップロードし、Install Integration をクリックして、統合をインストールします。

92e475e4da7f826.png

インテグレーションが完了すると、Datadog は Google Cloud 関連のいくつかのダッシュボードを Dashboards に自動的に作成します。

66fdf2d26e4710d.png

5. Compute Engine VM を作成する

次に、Compute Engine 仮想マシン(VM)をいくつか作成します。Datadog のモニタリングでこれらの VM をモニタリングし、Google Cloud のワークフローで Datadog のアラートに応答します。

2 つの Compute Engine VM を作成します。

gcloud compute instances create instance-1 instance-2 --zone us-central1-a

1 分ほどで VM が作成されて実行されていることが Cloud コンソールに表示されます。しばらくすると(通常は 10 分)、Datadog の Google Compute Engine ダッシュボードの Dashboards の下にこれらの VM が表示されます。

78a51374c1d0c11e.png

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

2 つの VM を実行したので、Datadog モニターからのアラートに応答するワークフローを作成します。任意の高度なワークフローでもかまいませんが、この場合は、実行中の VM インスタンスの数がチェックされ、インスタンスが 2 を下回った場合は新しい VM インスタンスが作成され、常に 2 つの VM が実行されていることが確認されます。

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

main:
  params: [event]
  steps:
  - init:
      assign:
      - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
      - zone: "us-central1-a"
      - minInstanceCount: 2
      - namePattern: "datadog-instance-##"
  - listInstances:
      call: googleapis.compute.v1.instances.list
      args:
        project: ${projectId}
        zone: ${zone}
      result: listResult
  - getInstanceCount:
      steps:
          - initInstanceCount:
              assign:
                - instanceCount: 0
          - setInstanceCount:
              switch:
                - condition: ${"items" in listResult}
                  steps:
                    - stepA:
                        assign:
                          - instanceCount: ${len(listResult.items)}
  - findDiffInstanceCount:
      steps:
        - assignDiffInstanceCount:
            assign:
              - diffInstanceCount: ${minInstanceCount - instanceCount}
        - logDiffInstanceCount:
            call: sys.log
            args:
              data: ${"instanceCount->" + string(instanceCount) + " diffInstanceCount->" + string(diffInstanceCount)}
        - endEarlyIfNeeded:
            switch:
              - condition: ${diffInstanceCount < 1}
                next: returnResult
  - bulkInsert:
      call: googleapis.compute.v1.instances.bulkInsert
      args:
          project: ${projectId}
          zone: ${zone}
          body:
              count: ${diffInstanceCount}
              namePattern: ${namePattern}
              instanceProperties:
                  machineType: "e2-micro"
                  disks:
                  - autoDelete: true
                    boot: true
                    initializeParams:
                      sourceImage: projects/debian-cloud/global/images/debian-10-buster-v20220310
                  networkInterfaces:
                  - network: "global/networks/default"
      result: bulkInsertResult
  - returnResult:
      return: ${bulkInsertResult}

ワークフローはパラメータとしてイベントを受信しています。このイベントは、Eventarc を介した Datadog のモニタリングから取得されます。イベントを受信すると、ワークフローは実行中のインスタンスの数を確認し、必要に応じて新しい VM インスタンスを作成します。

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

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

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

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

これで、Eventarc トリガーを使用して Datadog プロバイダからのイベントを Workflows に接続する準備が整いました。最初の Codelab で設定したチャンネルとサービス アカウントを使用します。

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

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

gcloud eventarc triggers create datadog-trigger2 \
  --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-trigger2
TYPE: datadog.v1.alert
DESTINATION: Workflows: workflow-datadog2
ACTIVE: Yes

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

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

実行中の Compute Engine VM の数がモニターによってチェックされ、2 を下回った場合はアラートが表示されます。

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

New Monitor ページで、次のようにモニターを作成します。

  1. 検出方法(Threshold)を選択します。
  2. 指標の定義: gcp.gce.instance.is_running(すべての場所)sum by(すべて)
  3. アラートの条件を設定します。
  4. トリガー: 直近の 5 minutes で指標が below のしきい値 at least once の場合
  5. アラートのしきい値: < 2
  6. チームに通知する: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. モニター名の例: Compute Engine instances < 2

次に、下部にある Create キーを押してモニターを作成します。

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

Datadog のモニター、Eventarc トリガー、最終的にワークフローをテストするには、いずれかの VM を削除します。

gcloud compute instances delete instance-2 --zone us-central1-a

数秒後、Google Cloud コンソールにインスタンスが削除されたことを確認します。

この変更が Datadog に反映されるまでに若干時間がかかります。しばらくすると(通常は 10 分)、Datadog のモニターが表示され、Manage Monitors セクションでこれを検出してアラートを出します。

50f93d560b6c1973.png

Datadog がアラートをモニタリングすると、そのアラートが Eventarc 経由で Workflows に送信されるのを確認できます。Workflows のログを確認すると、Workflows によって現在のインスタンス数と予想されるインスタンス数の差異が検出されていることがわかります。

2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1

このアラートに応答して、datadog-instance-## 接頭辞を持つ新しい VM インスタンスを作成します。

最終的に、プロジェクトには 2 つの VM が残ります。1 つは最初に作成した VM で、もう 1 つは Datadog のアラート後に Workflows により作成されたものです。

11e42028e7142690.png

10.完了

お疲れさまでした。これでこの Codelab は終了です。

学習した内容

  • Datadog の Google Cloud インテグレーションを有効にする方法。
  • Compute Engine VM を確認、作成するワークフローを作成する方法。
  • Eventarc を使用して Datadog のモニタリング アラートを Workflows に接続する方法。
  • Datadog のモニターを作成し、VM の削除に関するアラートを通知する方法について説明します。