Eventarc ile Datadog izleme uyarılarını Google Cloud'a yönlendirme (2. bölüm)

1. Giriş

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc, Google Cloud hizmetlerini çeşitli kaynaklardaki etkinliklere bağlamayı kolaylaştırır. Mikro hizmetlerin serbest bağlantılı olduğu ve dağıtıldığı etkinlik odaklı mimariler oluşturmanıza olanak tanır. Ayrıca, etkinlik alımı, teslimatı, güvenliği, yetkilendirme ve hata işleme gibi işlemleri sizin için gerçekleştirerek geliştiricilerin çevikliğini ve uygulamaların esnekliğini artırır.

Datadog, bulut uygulamaları için bir izleme ve güvenlik platformudur. Uygulamalarınızın, altyapınızın ve üçüncü taraf hizmetlerinizin gözlemlenebilir olması için uçtan uca izleri, metrikleri ve günlükleri bir araya getirir.

Workflows, hizmetleri tanımladığınız bir sırayla (iş akışı olarak adlandırılır) yürüten, tamamen yönetilen bir düzenleme platformudur. Bu iş akışları, Cloud Run veya Cloud Functions'da barındırılan hizmetleri, Cloud Vision AI ve BigQuery gibi Google Cloud hizmetlerini ve HTTP tabanlı tüm API'leri birleştirebilir.

İlk codelab'de, Eventarc ile Datadog izleme uyarılarını Google Cloud'a nasıl yönlendireceğinizi öğrenmiştiniz. Bu ikinci codelab'de, İş Akışları ile Datadog izleme uyarılarına nasıl yanıt vereceğinizi öğreneceksiniz. Daha spesifik olarak, 2 Compute Engine sanal makinesi oluşturacak ve bunları Datadog monitörüyle izleyeceksiniz. Sanal makinelerden biri silindiğinde Eventarc aracılığıyla Datadog'dan Workflows'a bir uyarı gönderilir. Buna karşılık, İş Akışları, çalışan sanal makine sayısını tekrar 2'ye çıkarmak için silinen sanal makineyi yeniden oluşturur.

Neler öğreneceksiniz?

  • Datadog'un Google Cloud entegrasyonunu etkinleştirme
  • Compute Engine sanal makinelerini kontrol etmek ve oluşturmak için iş akışı oluşturma
  • Datadog izleme uyarılarını Eventarc ile iş akışlarına bağlama
  • Datadog izleme aracı oluşturma ve sanal makine silme işlemlerinde uyarı verme

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizisidir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Bu nedenle, beğenmezseniz başka bir rastgele kimlik oluşturabilir veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını görebilirsiniz. Proje oluşturulduktan sonra bu değer "dondurulur".
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere codelab'in sonunda bulunan "temizleme" talimatlarını uygulayın. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

7ffe5cbb04455448.png

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu laboratuvardaki çalışmalarınızın tamamını yalnızca bir tarayıcı kullanarak yapabilirsiniz.

gcloud'u ayarlama

Cloud Shell'de proje kimliğinizi ayarlayın ve PROJECT_ID değişkeni olarak kaydedin.

Ayrıca, REGION değişkenini us-central1 olarak ayarlayın. Bu, daha sonra kaynak oluşturacağınız bölgedir.

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

API'leri etkinleştir

Gerekli tüm hizmetleri etkinleştirin:

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

3. Datadog kanalını doğrulama

İlk codelab'de oluşturduğunuz Datadog kanalının etkin olduğundan emin olun. Cloud Shell'de, kanalın ayrıntılarını almak için aşağıdaki komutu çalıştırın:

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

Çıkış şu şekilde görünmelidir:

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'

Kanal durumunu Google Cloud Console'da da görebilirsiniz:

8399d528ccbd4c20.png

Kanal durumu ACTIVE olmalıdır. Aksi takdirde, ilk codelab'e geri dönün ve Datadog ile kanal oluşturup etkinleştirme adımlarını uygulayın.

4. Datadog'un Google Cloud entegrasyonunu etkinleştirme

Bir projeyi izlemek için Datadog'u kullanmak istiyorsanız Datadog için gereken API'leri etkinleştirmeniz, bir hizmet hesabı oluşturmanız ve hizmet hesabını Datadog'a bağlamanız gerekir.

Datadog için API'leri etkinleştirme

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

Hizmet hesabı oluşturma

Datadog'un Google Cloud entegrasyonu, Compute Engine örneklerinizden düğüm düzeyinde metrikler toplamak için Cloud Logging API'ye çağrı yapmak üzere bir hizmet hesabı kullanır.

Datadog için bir hizmet hesabı oluşturun:

DATADOG_SA_NAME=datadog-service-account

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

Aşağıdaki IAM rollerini vererek Datadog hizmet hesabının metrikleri, etiketleri, etkinlikleri ve kullanıcı etiketlerini toplamasını sağlayın:

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

Hizmet hesabı anahtarı oluşturup indirin. Datadog ile entegrasyonu tamamlamak için anahtar dosyasına ihtiyacınız vardır.

Cloud Shell ana dizininizde bir hizmet hesabı anahtar dosyası oluşturun:

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

Cloud Shell'de More ⁝ simgesini tıklayın ve ardından Download File simgesini seçin. File path alanına key.json değerini girin. Anahtar dosyasını indirmek için Download simgesini tıklayın.

Hizmet hesabını Datadog'a bağlama

Datadog hesabınızda Integrations bölümüne gidin ve Google Cloud entegrasyon kutusunu arayın:

cf1ffa6547fba3e4.png

Google Cloud Platform simgesinin üzerine gelerek Install sayfasına gidin:

31b365a31bc50cc8.png

Upload Private Key File bölümüne hizmet hesabı anahtarını yükleyip Install Integration simgesini tıklayarak entegrasyonu yükleyin:

92e475e4da7f826.png

Entegrasyonu tamamladıktan sonra Datadog, Dashboards altında Google Cloud ile ilgili bir dizi kontrol paneli oluşturur:

66fdf2d26e4710d.png

5. Compute Engine sanal makineleri oluşturma

Ardından, bazı Compute Engine sanal makineleri (VM'ler) oluşturun. Bu VM'leri Datadog monitörüyle izleyecek ve Google Cloud'daki bir iş akışıyla Datadog uyarılarına yanıt vereceksiniz.

2 Compute Engine sanal makinesi oluşturun:

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

Cloud Console'da bir dakika içinde oluşturulan ve çalışan sanal makineleri görmeniz gerekir. Bir süre sonra (genellikle 10 dakika) bu sanal makineleri Datadog'daki Google Compute Engine kontrol panelinde de Dashboards görmeniz gerekir:

78a51374c1d0c11e.png

6. İş akışı oluşturma

Artık 2 sanal makineniz çalıştığına göre, Datadog monitöründen gelen uyarılara yanıt verecek bir iş akışı oluşturun. İş akışı istediğiniz kadar karmaşık olabilir ancak bu durumda iş akışı, çalışan sanal makine örneklerinin sayısını kontrol eder ve bu sayı 2'nin altına düşerse her zaman 2 sanal makinenin çalışmasını sağlamak için yeni sanal makine örnekleri oluşturur.

Aşağıdaki içeriklerle bir workflow-datadog2.yaml dosyası oluşturun:

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}

İş akışının parametre olarak bir etkinlik aldığını unutmayın. Bu etkinlik, Eventarc aracılığıyla Datadog izlemeden gelir. Etkinlik alındıktan sonra iş akışı, çalışan örneklerin sayısını kontrol eder ve gerekirse yeni sanal makine örnekleri oluşturur.

İş akışını dağıtın:

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

İş akışı dağıtıldı ancak henüz çalışmıyor. Bir Datadog uyarısı alındığında Eventarc tetikleyicisi tarafından yürütülür.

7. Eventarc tetikleyicisi oluşturma

Artık Datadog sağlayıcısından gelen etkinlikleri Eventarc tetikleyicisiyle İş Akışları'na bağlamaya hazırsınız. İlk codelab'de oluşturduğunuz kanalı ve hizmet hesabını kullanacaksınız.

Datadog kanalı, etkinlik türü ve iş akışı hedefiyle tetikleyici oluşturun:

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

Yeni oluşturulan tetikleyicinin etkin olduğunu görmek için tetikleyicileri listeleyebilirsiniz:

gcloud eventarc triggers list --location $REGION

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

8. Datadog izleme işlemi oluşturma

Şimdi bir Datadog monitörü oluşturup Eventarc'a bağlayacaksınız.

İzleyici, çalışan Compute Engine sanal makinelerinin sayısını kontrol eder ve bu sayı 2'nin altına düşerse uyarı verir.

Datadog'da bir izleme oluşturmak için Datadog'da oturum açın. Ana menüde Monitors simgesinin üzerine gelip alt menüde New Monitor simgesini tıklayın. Birçok monitör türü vardır. MetricMonitör türünü seçin.

New Monitor sayfasında aşağıdakileri içeren bir monitör oluşturun:

  1. Algılama yöntemini seçin: Threshold.
  2. Metriği tanımlayın: gcp.gce.instance.is_running (her yerden) sum by (her şey)
  3. Uyarı koşullarını ayarlayın:
  4. Son 5 minutes süresinde metrik, eşiği at least once below olduğunda tetiklenir.
  5. Uyarı eşiği: < 2
  6. Ekibinizi bilgilendirin: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Örnek izleme sistemi adı: Compute Engine instances < 2

Şimdi, monitörü oluşturmak için alt kısımdaki Create simgesine dokunun.

9. Test monitörü ve tetikleyici

Datadog izleyicisini, Eventarc tetikleyicisini ve sonunda iş akışını test etmek için sanal makinelerden birini sileceksiniz:

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

Birkaç saniye sonra, Google Cloud Console'da örneğin silindiğini görürsünüz.

Bu değişikliğin Datadog'da görünmesi biraz zaman alabilir. Bir süre sonra (genellikle 10 dakika) bu durumu algılayıp uyarı vermek için Datadog'da Manage Monitors bölümünde monitörü görmeniz gerekir:

50f93d560b6c1973.png

Datadog monitörü uyarı verdiğinde bu uyarının Eventarc üzerinden İş Akışları'na gittiğini görürsünüz. İş akışlarının günlüklerini kontrol ederseniz iş akışlarının, mevcut örnek sayısı ile beklenen örnek sayısı arasındaki farkı bulmak için kontrol yaptığını görürsünüz:

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

Bu uyarıya datadog-instance-## ön ekiyle yeni bir sanal makine örneği oluşturarak yanıt verir.

Sonuç olarak, projenizde yine 2 sanal makine olur. Bunlardan biri başlangıçta sizin oluşturduğunuz, diğeri ise Workflows tarafından Datadog uyarısından sonra oluşturulan sanal makinedir.

11e42028e7142690.png

10. Tebrikler

Tebrikler, codelab'i tamamladınız.

İşlediğimiz konular

  • Datadog'un Google Cloud entegrasyonunu etkinleştirme
  • Compute Engine sanal makinelerini kontrol etmek ve oluşturmak için iş akışı oluşturma
  • Datadog izleme uyarılarını Eventarc ile iş akışlarına bağlama
  • Datadog izleme aracı oluşturma ve sanal makine silme işlemlerinde uyarı verme