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

1. Einführung

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Mit Eventarc lassen sich Google Cloud-Dienste ganz einfach mit Ereignissen aus verschiedenen Quellen verbinden. Damit können Sie ereignisgesteuerte Architekturen erstellen, in denen Mikrodienste lose gekoppelt und verteilt sind. Außerdem werden die Aufnahme, Bereitstellung, Sicherheit, Autorisierung und Fehlerbehandlung von Ereignissen für Sie übernommen, was die Agilität von Entwicklern 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 Drittanbieterdienste beobachtbar zu machen.

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

Im ersten Codelab haben Sie gelernt, wie Sie Datadog-Monitoring-Benachrichtigungen mit Eventarc an Google Cloud weiterleiten. In diesem zweiten Codelab erfahren Sie, wie Sie mit Workflows auf Datadog-Monitoring-Benachrichtigungen reagieren. Sie erstellen zwei Compute Engine-VMs und überwachen sie mit einem Datadog-Monitor. Sobald eine der VMs gelöscht wird, erhalten Sie über Eventarc eine Benachrichtigung von Datadog an Workflows. Workflows erstellt dann die gelöschte VM neu, sodass wieder zwei VMs ausgeführt werden.

Lerninhalte

  • So aktivieren Sie die Google Cloud-Integration von Datadog.
  • So erstellen Sie einen Workflow zum Prüfen und Erstellen von Compute Engine-VMs.
  • Datadog-Monitoring-Benachrichtigungen mit Eventarc mit Workflows verbinden
  • So erstellen Sie einen Datadog-Monitor und richten Benachrichtigungen für das Löschen von VMs ein.

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. 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 Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird und den Sie jederzeit aktualisieren können.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich (kann nach der Festlegung nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (die in der Regel als PROJECT_ID angegeben wird). Wenn Ihnen die ID nicht gefällt, können Sie eine andere zufällige ID generieren oder eine eigene ID ausprobieren und sehen, ob sie verfügbar ist. Nachdem das Projekt erstellt wurde, wird es „eingefroren“.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit nach Abschluss dieses Codelabs keine Gebühren anfallen, folgen Sie den Bereinigungsanweisungen am Ende des Codelabs. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, 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 sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Für dieses Lab benötigen Sie lediglich einen Browser.

gcloud einrichten

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

Legen Sie außerdem eine REGION-Variable auf us-central1 fest. In dieser Region erstellen Sie später Ressourcen.

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-Channel prüfen

Achten Sie darauf, dass der Datadog-Channel, den Sie im ersten Codelab erstellt haben, aktiv ist. Führen Sie in Cloud Shell den folgenden Befehl aus, um die Details des Channels 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 Channelstatus auch in der Google Cloud Console einsehen:

8399d528ccbd4c20.png

Der Kanalstatus sollte ACTIVE sein. Falls nicht, kehren Sie zum ersten Codelab zurück und folgen Sie der Anleitung, um einen Channel mit Datadog zu erstellen und zu aktivieren.

4. Google Cloud-Integration von Datadog aktivieren

Wenn Sie Datadog verwenden möchten, um ein Projekt zu überwachen, 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

Für die Google Cloud-Integration von Datadog wird ein Dienstkonto verwendet, um die Cloud Logging API aufzurufen und Messwerte auf Knotenebene aus Ihren Compute Engine-Instanzen zu erfassen.

Dienstkonto für Datadog erstellen:

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. Dazu weisen Sie die folgenden IAM-Rollen zu:

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 Integration in Datadog abzuschließen.

Erstellen Sie eine Datei mit Dienstkontoschlüsseln in Ihrem Cloud Shell-Basisverzeichnis:

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

Klicken Sie in Cloud Shell auf More ⁝ und wählen Sie dann Download File aus. Geben Sie in das Feld File path den Wert key.json ein. Klicken Sie auf Download, um die Schlüsseldatei herunterzuladen.

Dienstkonto mit Datadog verbinden

Rufen Sie in Ihrem Datadog-Konto den Bereich Integrations auf und suchen Sie nach der Kachel für die Google Cloud-Integration:

cf1ffa6547fba3e4.png

Bewegen Sie den Mauszeiger auf Google Cloud Platform, um zur Seite Install zu gelangen:

31b365a31bc50cc8.png

Installieren Sie die Integration, indem Sie den Dienstkontoschlüssel im Bereich 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-Dashboards unter Dashboards:

66fdf2d26e4710d.png

5. Compute Engine-VMs erstellen

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

Erstellen Sie zwei Compute Engine-VMs:

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

In der Cloud Console sollten innerhalb einer Minute erstellte und ausgeführte VMs angezeigt werden. Nach einiger Zeit (normalerweise 10 Minuten) sollten diese VMs auch in Datadog im Google Compute Engine-Dashboard unter Dashboards angezeigt werden:

78a51374c1d0c11e.png

6. Workflow erstellen

Nachdem Sie nun zwei VMs ausführen, erstellen Sie einen Workflow, der auf Benachrichtigungen von einem Datadog-Monitor reagiert. Der Workflow kann beliebig komplex sein. In diesem Fall wird die Anzahl der ausgeführten VM-Instanzen geprüft. Wenn sie unter 2 fällt, werden neue VM-Instanzen erstellt, 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}

Beachten Sie, dass der Workflow ein Ereignis als Parameter empfängt. Dieses Ereignis stammt von der Datadog-Überwachung ü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-Warnung empfangen wird.

7. Eventarc-Trigger erstellen

Sie können jetzt Ereignisse vom Datadog-Anbieter mit einem Eventarc-Trigger mit Workflows verbinden. Sie verwenden den Channel und das Dienstkonto, die Sie im ersten Codelab eingerichtet haben.

Erstellen Sie einen Trigger mit dem Datadog-Channel, dem Ereignistyp und einem Workflow-Ziel:

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 die Trigger auflisten, 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 jetzt einen Datadog-Monitor und verbinden ihn mit Eventarc.

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

Melden Sie sich in Datadog an, um einen Monitor 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 den folgenden Einstellungen:

  1. Wählen Sie die Erkennungsmethode aus: Threshold.
  2. Messwert definieren: gcp.gce.instance.is_running aus (überall) sum by (alles)
  3. Benachrichtigungsbedingungen festlegen:
  4. Auslösen, wenn der Messwert in den letzten 5 minutes below dem Schwellenwert at least once ist
  5. Benachrichtigungsgrenzwert: < 2
  6. Team benachrichtigen: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Beispiel für den Namen des Monitors: Compute Engine instances < 2

Klicken Sie nun unten auf Create, um den Monitor zu erstellen.

9. Monitor und Trigger testen

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

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

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

Es kann etwas dauern, bis diese Änderung in Datadog angezeigt wird. Nach einiger Zeit (in der Regel 10 Minuten) sollte der Monitor in Datadog angezeigt werden, um dies im Bereich Manage Monitors zu erkennen und eine Benachrichtigung zu senden:

50f93d560b6c1973.png

Sobald der Datadog-Monitor eine Benachrichtigung ausgibt, sollte diese Benachrichtigung über Eventarc an Workflows gesendet werden. Wenn Sie die Logs von Workflows prüfen, sehen Sie, dass Workflows den Unterschied zwischen der aktuellen und der erwarteten Anzahl von Instanzen ermittelt:

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

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

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

11e42028e7142690.png

10. Glückwunsch

Herzlichen Glückwunsch! Sie haben das Codelab abgeschlossen.

Behandelte Themen

  • So aktivieren Sie die Google Cloud-Integration von Datadog.
  • So erstellen Sie einen Workflow zum Prüfen und Erstellen von Compute Engine-VMs.
  • Datadog-Monitoring-Benachrichtigungen mit Eventarc mit Workflows verbinden
  • So erstellen Sie einen Datadog-Monitor und richten Benachrichtigungen für das Löschen von VMs ein.