1. はじめに
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. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「
PROJECT_ID
」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。 - 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud Console で課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルを終了した後に課金が発生しないようにリソースをシャットダウンするには、Codelab の最後にある「クリーンアップ」の手順を行います。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。
プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。
この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 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 コンソールでも確認できます。
チャンネルの状態は 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
統合タイルを検索します。
Google Cloud Platform
にカーソルを合わせると、[Install
] ページに移動します。
Upload Private Key File
セクションでサービス アカウント キーをアップロードし、Install Integration
をクリックして、統合をインストールします。
インテグレーションが完了すると、Datadog は Google Cloud 関連のいくつかのダッシュボードを Dashboards
に自動的に作成します。
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 が表示されます。
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
ページで、次のようにモニターを作成します。
- 検出方法(
Threshold
)を選択します。 - 指標の定義:
gcp.gce.instance.is_running
(すべての場所)sum by
(すべて) - アラートの条件を設定します。
- トリガー: 直近の
5 minutes
で指標がbelow
のしきい値at least once
の場合 - アラートのしきい値:
< 2
- チームに通知する:
@eventarc_<your-project-id>_<your-region>_<your-channel-name>
- モニター名の例:
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
セクションでこれを検出してアラートを出します。
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 により作成されたものです。
10.完了
お疲れさまでした。これでこの Codelab は終了です。
学習した内容
- Datadog の Google Cloud インテグレーションを有効にする方法。
- Compute Engine VM を確認、作成するワークフローを作成する方法。
- Eventarc を使用して Datadog のモニタリング アラートを Workflows に接続する方法。
- Datadog のモニターを作成し、VM の削除に関するアラートを通知する方法について説明します。