Datadog-Monitoringbenachrichtigungen mit Eventarc an Google Cloud weiterleiten (Teil 2)

1. Einführung

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc vereinfacht die Verbindung von Google Cloud-Diensten mit Ereignissen aus einer Vielzahl von Quellen. Damit können Sie ereignisgesteuerte Architekturen erstellen, in denen Mikrodienste lose miteinander verknüpft und verteilt sind. Außerdem übernimmt er die Ereignisaufnahme, -bereitstellung, -sicherheit, -autorisierung und -behebung für Sie, was die Agilität der Entwickler und die Ausfallsicherheit von Anwendungen verbessert.

Datadog ist eine Monitoring- und Sicherheitsplattform für Cloud-Anwendungen. Es führt End-to-End-Traces, -Messwerte und -Logs zusammen, um Ihre Anwendungen, Infrastruktur und Dienste von Drittanbietern zu beobachten.

Workflows ist eine vollständig verwaltete Orchestrierungsplattform, die Dienste in einer von Ihnen definierten Reihenfolge ausführt. Diese wird als Workflow bezeichnet. In diesen Workflows können in Cloud Run oder Cloud Functions gehostete Dienste, Google Cloud-Dienste wie Cloud Vision AI und BigQuery und eine beliebige HTTP-basierte API kombiniert werden.

Im ersten Codelab haben Sie erfahren, wie Sie Datadog-Monitoringbenachrichtigungen mit Eventarc an Google Cloud weiterleiten. In diesem zweiten Codelab erfahren Sie, wie Sie mit Workflows auf Datadog-Monitoring-Benachrichtigungen reagieren. Genauer gesagt, erstellen Sie zwei virtuelle Compute Engine-Maschinen und überwachen sie mit einem Datadog-Monitor. Sobald eine der VMs gelöscht wurde, erhalten Sie eine Benachrichtigung von Datadog zu Workflows über Eventarc. Workflows erstellt wiederum die gelöschte VM neu, um die Anzahl der ausgeführten VMs wieder auf 2 zu erhöhen.

Lerninhalte

  • So aktivieren Sie die Google Cloud-Integration von Datadog.
  • Hier erfahren Sie, wie Sie einen Workflow zum Prüfen und Erstellen von Compute Engine-VMs erstellen.
  • Anleitung zum Verbinden von Datadog-Monitoring-Benachrichtigungen mit Workflows mit Eventarc.
  • Datadog-Monitoring und -Benachrichtigung zu VM-Löschungen erstellen

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird und jederzeit aktualisiert werden kann.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die in der Regel als PROJECT_ID identifiziert wird. Wenn es dir nicht gefällt, kannst du eine weitere zufällige Projekt-ID generieren. Du kannst aber auch selbst eine andere testen, um zu sehen, ob sie verfügbar ist. Dann ist es „eingefroren“ nachdem das Projekt erstellt wurde.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte ohne großen Aufwand betrieben werden. Wenn Sie Ressourcen beenden möchten, damit über diese Anleitung hinaus keine Kosten anfallen, führen Sie eine Bereinigung durch am Ende des Codelabs. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion von 300$.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Sie können alle Aufgaben in diesem Lab ganz einfach in einem Browser erledigen.

gcloud einrichten

Legen Sie in Cloud Shell Ihre Projekt-ID fest und speichern Sie sie als Variable PROJECT_ID.

Legen Sie außerdem die Variable REGION auf us-central1 fest. Dies ist die Region, in der Sie später Ressourcen erstellen.

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

APIs aktivieren

Aktivieren Sie alle erforderlichen Dienste:

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

3. Datadog-Kanal prüfen

Prüfen Sie, ob der Datadog-Kanal, den Sie im ersten Codelab erstellt haben, aktiv ist. Führen Sie in Cloud Shell den folgenden Befehl aus, um die Details des Kanals abzurufen:

CHANNEL_NAME=datadog-channel
gcloud eventarc channels describe $CHANNEL_NAME --location $REGION

Die Ausgabe sollte in etwa so aussehen:

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'

Sie können den Kanalstatus auch in der Google Cloud Console ansehen:

8399d528ccbd4c20.png

Der Kanalstatus sollte ACTIVE sein. Falls nicht, kehren Sie zum ersten Codelab zurück und folgen Sie den Schritten zum Erstellen und Aktivieren eines Kanals mit Datadog.

4. Google Cloud-Integration von Datadog aktivieren

Wenn Sie Datadog zum Überwachen eines Projekts verwenden möchten, müssen Sie die für Datadog erforderlichen APIs aktivieren, ein Dienstkonto erstellen und das Dienstkonto mit Datadog verbinden.

APIs für Datadog aktivieren

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

Dienstkonto erstellen

Bei der Google Cloud-Integration von Datadog wird über ein Dienstkonto die Cloud Logging API aufgerufen, um Messwerte auf Knotenebene aus Ihren Compute Engine-Instanzen zu erfassen.

Erstellen Sie ein Dienstkonto für Datadog:

DATADOG_SA_NAME=datadog-service-account

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

Aktivieren Sie das Datadog-Dienstkonto, um Messwerte, Tags, Ereignisse und Nutzerlabels zu erfassen, indem Sie die folgenden IAM-Rollen zuweisen:

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

Erstellen Sie einen Dienstkontoschlüssel und laden Sie ihn herunter. Sie benötigen die Schlüsseldatei, um die Datadog-Integration abzuschließen.

Erstellen Sie in Ihrem Cloud Shell-Basisverzeichnis eine Schlüsseldatei für das Dienstkonto:

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

Klicken Sie in Cloud Shell auf More ⁝ und wählen Sie Download File aus. Geben Sie im Feld File path den Wert key.json ein. Klicken Sie zum Herunterladen der Schlüsseldatei auf Download.

Dienstkonto mit Datadog verbinden

Gehen Sie in Ihrem Datadog-Konto zum Abschnitt Integrations und suchen Sie nach der Integrationskachel Google Cloud:

cf1ffa6547fba3e4.png

Bewegen Sie den Mauszeiger auf Google Cloud Platform, um die Seite Install aufzurufen:

31b365a31bc50cc8.png

Installieren Sie die Integration, indem Sie den Dienstkontoschlüssel in den Abschnitt Upload Private Key File hochladen und dann auf Install Integration klicken:

92e475e4da7f826.png

Nachdem Sie die Integration abgeschlossen haben, erstellt Datadog automatisch eine Reihe von Google Cloud-bezogenen Dashboards unter Dashboards:

66fdf2d26e4710d.png

5. Compute Engine-VMs erstellen

Erstellen Sie als Nächstes einige virtuelle Compute Engine-Maschinen (VMs). Sie überwachen diese VMs mit einem Datadog-Monitor und reagieren auf Datadog-Benachrichtigungen mit einem Workflow in Google Cloud.

Erstellen Sie zwei Compute Engine-VMs:

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

In der Cloud Console sollten innerhalb von etwa einer Minute VMs angezeigt werden, die erstellt und ausgeführt werden. Nach einiger Zeit (in der Regel 10 Minuten) sollten diese VMs auch in Datadog im Google Compute Engine-Dashboard unter Dashboards angezeigt werden:

78a51374c1d0c11e.png

6. Workflow erstellen

Da nun zwei VMs ausgeführt werden, erstellen Sie einen Workflow, der auf Warnungen von einem Datadog-Monitor reagieren soll. Der Workflow kann beliebig komplex sein. In diesem Fall prüft er die Anzahl der ausgeführten VM-Instanzen. Wenn sie unter 2 liegt, erstellt er neue VM-Instanzen, um sicherzustellen, dass immer 2 VMs ausgeführt werden.

Erstellen Sie eine workflow-datadog2.yaml-Datei mit folgendem Inhalt:

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}

Der Workflow empfängt ein Ereignis als Parameter. Dieses Ereignis stammt aus dem Datadog-Monitoring über Eventarc. Sobald das Ereignis empfangen wurde, prüft der Workflow die Anzahl der ausgeführten Instanzen und erstellt bei Bedarf neue VM-Instanzen.

Stellen Sie den Workflow bereit:

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

Der Workflow wurde bereitgestellt, wird aber noch nicht ausgeführt. Sie wird von einem Eventarc-Trigger ausgeführt, wenn eine Datadog-Benachrichtigung empfangen wird.

7. Eventarc-Trigger erstellen

Sie können jetzt Ereignisse vom Datadog-Anbieter über einen Eventarc-Trigger mit Workflows verbinden. Sie verwenden den Kanal und das Dienstkonto, das Sie im ersten Codelab eingerichtet haben.

Erstellen Sie einen Trigger mit dem Datadog-Kanal, dem Ereignistyp und einem Workflowziel:

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

Sie können sich die Trigger auflisten lassen, um zu sehen, ob der neu erstellte Trigger aktiv ist:

gcloud eventarc triggers list --location $REGION

NAME: datadog-trigger2
TYPE: datadog.v1.alert
DESTINATION: Workflows: workflow-datadog2
ACTIVE: Yes

8. Datadog-Monitor erstellen

Sie erstellen nun einen Datadog-Monitor und verbinden ihn mit Eventarc.

Das Monitoring prüft die Anzahl der ausgeführten Compute Engine-VMs und gibt eine Benachrichtigung aus, wenn sie unter 2 liegt.

Melden Sie sich bei Datadog an, um einen Monitor in Datadog zu erstellen. Bewegen Sie den Mauszeiger im Hauptmenü auf Monitors und klicken Sie im Untermenü auf New Monitor. Es gibt viele Monitortypen. Wählen Sie den Monitortyp Metric aus.

Erstellen Sie auf der Seite New Monitor einen Monitor mit Folgendem:

  1. Wählen Sie die Erkennungsmethode aus: Threshold.
  2. Definieren Sie den Messwert: gcp.gce.instance.is_running von (überall) sum by (alles)
  3. Legen Sie Benachrichtigungsbedingungen fest:
  4. Auslösen, wenn der Messwert in den letzten 5 minutes below den Grenzwert at least once erreicht hat
  5. Benachrichtigungsgrenzwert: < 2
  6. Team benachrichtigen: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Beispielname des Monitors: Compute Engine instances < 2

Drücken Sie nun unten auf Create, um den Monitor zu erstellen.

9. Überwachung und Trigger testen

Löschen Sie eine der VMs, um den Datadog-Monitor, den Eventarc-Trigger und schließlich den Workflow zu testen:

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

Nach einigen Sekunden sollte die Instanz in der Google Cloud Console gelöscht werden.

Es gibt eine gewisse Latenz, bis diese Änderung in Datadog angezeigt wird. Nach einiger Zeit (in der Regel 10 Minuten) sollte der Monitor in Datadog angezeigt werden, um diesen Fehler zu erkennen und im Abschnitt Manage Monitors zu melden:

50f93d560b6c1973.png

Sobald die Datadog-Überwachungsbenachrichtigungen abgeschlossen sind, sollten Sie sehen, dass diese Benachrichtigung über Eventarc an Workflows weitergeleitet wird. Wenn Sie die Logs von Workflows prüfen, sollten Sie sehen, dass Workflows den Unterschied zwischen der aktuellen und der erwarteten Anzahl von Instanzen ermitteln:

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

Als Reaktion auf diese Benachrichtigung erstellt er eine neue VM-Instanz mit dem Präfix datadog-instance-##.

Am Ende haben Sie noch zwei VMs in Ihrem Projekt: eine, die Sie ursprünglich erstellt haben, und die andere, die nach der Datadog-Benachrichtigung von Workflows erstellt wurde.

11e42028e7142690.png

10. Glückwunsch

Glückwunsch, du hast das Codelab abgeschlossen.

Behandelte Themen

  • So aktivieren Sie die Google Cloud-Integration von Datadog.
  • Hier erfahren Sie, wie Sie einen Workflow zum Prüfen und Erstellen von Compute Engine-VMs erstellen.
  • Anleitung zum Verbinden von Datadog-Monitoring-Benachrichtigungen mit Workflows mit Eventarc.
  • Datadog-Monitoring und -Benachrichtigung zu VM-Löschungen erstellen