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 のいずれかが削除されると、Datadog から Eventarc 経由で 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 は Dashboards に Google Cloud 関連のダッシュボードを自動的に作成します。

66fdf2d26e4710d.png

5. Compute Engine VM を作成する

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

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

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

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

78a51374c1d0c11e.png

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

2 つの VM が実行されているので、Datadog モニターからのアラートに応答するワークフローを作成します。ワークフローは必要に応じて複雑にできますが、この例では、ワークフローは実行中の VM インスタンスの数を確認し、2 を下回った場合は、常に 2 つの VM が実行されるように新しい 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 の間にしきい値 at least oncebelow したときにトリガー
  5. アラートのしきい値: < 2
  6. チームに通知する: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. モニター名の例: Compute Engine instances < 2

画面下部の Create をクリックして、モニターを作成します。

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

Datadog モニター、Eventarc トリガー、最終的にはワークフローをテストするために、VM の 1 つを削除します。

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 によって作成された VM です。

11e42028e7142690.png

10. 完了

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

学習した内容

  • Datadog の Google Cloud 統合を有効にする方法。
  • Compute Engine VM を確認して作成するワークフローを作成する方法。
  • Eventarc を使用して Datadog モニタリング アラートを Workflows に接続する方法。
  • Datadog モニターを作成して VM の削除に関するアラートを設定する方法。