Kieruj alerty monitorowania Datadog do Google Cloud przy użyciu Eventarc (część 2)

1. Wprowadzenie

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc ułatwia łączenie usług Google Cloud ze zdarzeniami z różnych źródeł. Umożliwia tworzenie architektur opartych na zdarzeniach, w których mikroserwisy są luźno sprzężone i rozproszone. Zajmuje się też pozyskiwaniem, dostarczaniem, bezpieczeństwem, autoryzacją i obsługą błędów, co zwiększa elastyczność programistów oraz odporność aplikacji.

Datadog to platforma do monitorowania i zabezpieczania aplikacji internetowych. Łączy kompleksowe logi czasu, wskaźniki i logi, aby umożliwiać obserwację aplikacji, infrastruktury i usług innych firm.

Przepływy pracy to w pełni zarządzana platforma do administrowania, która wykonuje usługi w określonej przez Ciebie kolejności, czyli tzw. przepływem pracy. Te przepływy pracy mogą łączyć usługi hostowane w Cloud Run lub Cloud Functions, usługi Google Cloud, takie jak Cloud Vision AI i BigQuery, oraz dowolny interfejs API oparty na HTTP.

Podczas pierwszego ćwiczenia w Codelabs omówiliśmy, jak kierować alerty monitorowania Datadog do Google Cloud przy użyciu Eventarc. Z tego drugiego ćwiczenia w Codelabs dowiesz się, jak odpowiadać na alerty monitorowania Datadog za pomocą Workflows. Dokładniej rzecz biorąc, utworzysz 2 maszyny wirtualne Compute Engine i będziesz monitorować je za pomocą monitora Datadog. Gdy 1 maszyna wirtualna zostanie usunięta, otrzymasz alert z Datadog do Workflows przez Eventarc. Z kolei Workflows odtworzy usuniętą maszynę wirtualną, by liczba uruchomionych maszyn wirtualnych wróciła do 2.

Czego się nauczysz

  • Jak włączyć integrację z usługą Datadog z Google Cloud.
  • Jak utworzyć przepływ pracy do sprawdzania i tworzenia maszyn wirtualnych Compute Engine.
  • Łączenie alertów monitorowania Datadog z Workflows za pomocą Eventarc.
  • Jak utworzyć monitor Datadog i wysłać alerty o usuwaniu maszyn wirtualnych.

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google i w każdej chwili możesz go zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz odwoływać się do identyfikatora projektu (który zwykle nazywa się PROJECT_ID), więc jeśli Ci się nie podoba, wygeneruj kolejny losowy kod lub wypróbuj swój własny i sprawdź, czy jest dostępny. Potem urządzenie jest „zawieszone”. po utworzeniu projektu.
  • Występuje trzecia wartość – numer projektu – używany przez niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów i interfejsów API Cloud. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, wykonaj czynności „wyczyść” znajdziesz na końcu tego ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w Cloud.

W konsoli Google Cloud kliknij ikonę Cloud Shell na górnym pasku narzędzi:

55efc1aaa7a4d3ad.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

7ffe5cbb04455448.png

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w tym module możesz wykonać w przeglądarce.

Konfigurowanie gcloud

W Cloud Shell ustaw identyfikator projektu i zapisz go jako zmienną PROJECT_ID.

Ustaw też zmienną REGION na us-central1. To region, w którym utworzysz zasoby później.

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

Włącz interfejsy API

Włącz wszystkie niezbędne usługi:

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

3. Weryfikowanie kanału Datadog

Upewnij się, że kanał Datadog utworzony w ramach pierwszego ćwiczenia w Codelabs jest aktywny. Aby pobrać szczegóły kanału, uruchom w Cloud Shell to polecenie:

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

Dane wyjściowe powinny być podobne do tych:

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'

Stan kanału możesz też sprawdzić w konsoli Google Cloud:

8399d528ccbd4c20.png

Stanem kanału powinien być ACTIVE. Jeśli nie, wróć do pierwszego ćwiczenia w Codelabs i postępuj zgodnie z instrukcjami, aby utworzyć i aktywować kanał w Datadog.

4. Włącz integrację Datadog z Google Cloud

Aby używać Datadog do monitorowania projektu, musisz włączyć interfejsy API potrzebne dla Datadog, utworzyć konto usługi i połączyć je z Datadog.

Włączanie interfejsów API dla Datadog

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

utworzyć konto usługi,

Integracja Google Cloud z Datadog wykorzystuje konto usługi do wywoływania Cloud Logging API w celu zbierania wskaźników na poziomie węzła z instancji Compute Engine.

Utwórz konto usługi dla Datadog:

DATADOG_SA_NAME=datadog-service-account

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

Włącz konto usługi Datadog, aby zbierać wskaźniki, tagi, zdarzenia i etykiety użytkowników, przyznając te role uprawnień:

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

utworzyć i pobrać klucz konta usługi, Plik klucza jest potrzebny, aby zakończyć integrację z Datadog.

Utwórz plik klucza konta usługi w katalogu głównym Cloud Shell:

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

W Cloud Shell kliknij More ⁝, a następnie wybierz Download File. W polu File path wpisz key.json. Aby pobrać plik klucza, kliknij Download.

Łączenie konta usługi z Datadog

Na koncie Datadog przejdź do sekcji Integrations i wyszukaj kafelek integracji z usługą Google Cloud:

cf1ffa6547fba3e4.png

Najedź kursorem na Google Cloud Platform, by otworzyć stronę Install:

31b365a31bc50cc8.png

Zainstaluj integrację, przesyłając klucz konta usługi w sekcji Upload Private Key File, a następnie klikając Install Integration:

92e475e4da7f826.png

Po zakończeniu integracji Datadog automatycznie utworzy wiele paneli związanych z Google Cloud w usłudze Dashboards:

66fdf2d26e4710d.png

5. Tworzenie maszyn wirtualnych Compute Engine

Następnie utwórz maszyny wirtualne Compute Engine. Będziesz monitorować te maszyny wirtualne za pomocą monitora Datadog i reagować na alerty Datadog za pomocą przepływu pracy w Google Cloud.

Utwórz 2 maszyny wirtualne Compute Engine:

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

Za około minutę w konsoli Cloud powinny pojawić się maszyny wirtualne utworzone i uruchomione. Po pewnym czasie (zwykle po 10 minutach) w Datadog powinny być także widoczne te maszyny wirtualne w panelu Google Compute Engine w sekcji Dashboards:

78a51374c1d0c11e.png

6. Tworzenie przepływu pracy

Teraz gdy masz już uruchomione 2 maszyny wirtualne, utwórz przepływ pracy, który będzie odpowiadać na alerty z monitora Datadog. Przepływ pracy może być bardzo zaawansowany, ale w tym przypadku sprawdza liczbę uruchomionych instancji maszyn wirtualnych, a jeśli spadnie poniżej 2, utworzy nowe instancje maszyn wirtualnych, aby upewnić się, że w każdym momencie są uruchomione 2 maszyny wirtualne.

Utwórz plik workflow-datadog2.yaml z tą zawartością:

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}

Pamiętaj, że przepływ pracy odbiera zdarzenie jako parametr. To zdarzenie będzie pochodzić z monitorowania Datadog przez Eventarc. Po otrzymaniu zdarzenia przepływ pracy sprawdza liczbę uruchomionych instancji i w razie potrzeby tworzy nowe maszyny wirtualne.

Wdróż przepływ pracy:

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

Przepływ pracy został wdrożony, ale jeszcze nie jest uruchomiony. Zostanie on wykonany przez aktywator Eventarc po otrzymaniu alertu Datadog.

7. Tworzenie aktywatora Eventarc

Teraz możesz łączyć zdarzenia od dostawcy Datadog z Workflows za pomocą aktywatora Eventarc. Użyjesz kanału i konta usługi skonfigurowanego w pierwszym ćwiczeniu z programowania.

Utwórz regułę z kanałem Datadog, typem zdarzenia i miejscem docelowym przepływu pracy:

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

Możesz wyświetlić listę aktywatorów, aby sprawdzić, czy nowo utworzony aktywator jest aktywny:

gcloud eventarc triggers list --location $REGION

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

8. Tworzenie monitora Datadog

Teraz utworzysz monitor Datadog i połączysz go z Eventarc.

Monitor sprawdzi liczbę uruchomionych maszyn wirtualnych Compute Engine i wyświetli alert, jeśli spadnie poniżej 2.

Aby utworzyć monitor w Datadog, zaloguj się w Datadog. Najedź wskaźnikiem myszy na Monitors w menu głównym i kliknij New Monitor w menu podrzędnym. Istnieje wiele typów monitorów. Wybierz typ monitora: Metric.

Na stronie New Monitor utwórz monitor z tymi elementami:

  1. Wybierz metodę wykrywania: Threshold.
  2. Określ dane: gcp.gce.instance.is_running z (wszędzie) sum by (wszystko)
  3. Ustaw warunki tworzenia alertów:
  4. Wywołuj, gdy dane będą belowprzekraczać próg at least once w ciągu ostatnich 5 minutes
  5. Próg alertów: < 2
  6. Powiadom swój zespół: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Przykładowa nazwa monitora: Compute Engine instances < 2

Naciśnij Create na dole, aby utworzyć monitor.

9. Monitor testów i aktywator

Aby przetestować monitor Datadog, aktywator Eventarc, a na koniec przepływ pracy, usuniesz jedną z maszyn wirtualnych:

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

Po kilku sekundach instancja powinna być usunięta w konsoli Google Cloud.

Zanim ta zmiana pojawi się w Datadog, może minąć trochę czasu. Po pewnym czasie (zwykle po 10 minutach) powinien pojawić się monitor w Datadog, aby wykryć ten błąd i przesłać alert w sekcji Manage Monitors:

50f93d560b6c1973.png

Gdy alerty monitorowania Datadog zostaną wyświetlone, ten alert powinien zostać przeniesiony do Workflows via Eventarc. Jeśli sprawdzasz logi Workflows, powinna się pojawić informacja, że Workflows sprawdza różnicę między bieżącą i oczekiwaną liczbą instancji:

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

Reaguje na ten alert, tworząc nową instancję maszyny wirtualnej z prefiksem datadog-instance-##.

Ostatecznie nadal będziesz mieć w projekcie 2 maszyny wirtualne – jedną utworzoną na początku i drugą utworzoną przez Workflows po otrzymaniu alertu Datadog.

11e42028e7142690.png

10. Gratulacje

Gratulacje. Udało Ci się ukończyć ćwiczenia z programowania.

Omówione zagadnienia

  • Jak włączyć integrację z usługą Datadog z Google Cloud.
  • Jak utworzyć przepływ pracy do sprawdzania i tworzenia maszyn wirtualnych Compute Engine.
  • Łączenie alertów monitorowania Datadog z Workflows za pomocą Eventarc.
  • Jak utworzyć monitor Datadog i wysłać alerty o usuwaniu maszyn wirtualnych.