Template Pub/Sub ke Datadog

Template Pub/Sub ke Datadog adalah pipeline streaming yang membaca pesan dari langganan Pub/Sub dan menulis payload pesan ke Datadog menggunakan endpoint Datadog. Kasus penggunaan template ini yang paling umum adalah mengekspor file log ke Datadog.

Sebelum menulis ke Datadog, Anda dapat menerapkan fungsi yang ditentukan pengguna (UDF) JavaScript ke payload pesan. Setiap pesan yang mengalami kegagalan pemrosesan diteruskan ke a topik Pub/Sub yang belum diproses untuk pemecahan masalah dan pemrosesan ulang lebih lanjut.

Sebagai lapisan perlindungan tambahan untuk kunci dan secret API Anda, Anda juga dapat meneruskan kunci Cloud KMS bersama dengan parameter kunci API yang dienkode base64 dan dienkripsi dengan kunci Cloud KMS. Untuk mengetahui detail tambahan tentang cara mengenkripsi parameter kunci API, lihat endpoint enkripsi Cloud KMS API.

Persyaratan pipeline

  • Langganan Pub/Sub sumber harus ada sebelum menjalankan pipeline.
  • Topik yang belum diproses Pub/Sub harus ada sebelum menjalankan pipeline.
  • URL Datadog harus dapat diakses dari jaringan pekerja Dataflow.
  • Kunci API Datadog harus dibuat dan tersedia.

Parameter template

Parameter yang diperlukan

  • inputSubscription: Langganan Pub/Sub untuk membaca input. Misalnya, projects/your-project-id/subscriptions/your-subscription-name.
  • url: URL Datadog Logs API. URL ini harus dapat dirutekan dari VPC tempat pipeline berjalan. Lihat Mengirim log (https://docs.datadoghq.com/api/latest/logs/#send-logs) dalam dokumentasi Datadog untuk mengetahui informasi selengkapnya. Misalnya, https://http-intake.logs.datadoghq.com.
  • outputDeadletterTopic: Topik Pub/Sub untuk meneruskan pesan yang tidak dapat dikirim. Misalnya, projects/<PROJECT_ID>/topics/<TOPIC_NAME>.

Parameter opsional

  • apiKey: Kunci API Datadog. Anda harus memberikan nilai ini jika apiKeySource ditetapkan ke PLAINTEXT atau KMS. Untuk mengetahui informasi selengkapnya, lihat Kunci API dan Aplikasi (https://docs.datadoghq.com/account_management/api-app-keys/) dalam dokumentasi Datadog.
  • batchCount: Ukuran batch untuk mengirim beberapa peristiwa ke Datadog. Nilai defaultnya adalah 100.
  • parallelism: Jumlah maksimum permintaan paralel. Nilai defaultnya adalah 1 (tidak ada paralelisme).
  • includePubsubMessage: Apakah akan menyertakan pesan Pub/Sub lengkap dalam payload. Nilai defaultnya adalah true (semua elemen, termasuk elemen data, disertakan dalam payload).
  • apiKeyKMSEncryptionKey: Kunci Cloud KMS yang akan digunakan untuk mendekripsi Kunci API. Anda harus memberikan parameter ini jika apiKeySource ditetapkan ke KMS. Jika kunci Cloud KMS diberikan, Anda harus meneruskan Kunci API terenkripsi. Misalnya, projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name.
  • apiKeySecretId: ID secret Secret Manager untuk Kunci API. Anda harus memberikan parameter ini jika apiKeySource ditetapkan ke SECRET_MANAGER. Misalnya, projects/your-project-id/secrets/your-secret/versions/your-secret-version.
  • apiKeySource: Sumber kunci API. Nilai berikut didukung: PLAINTEXT, KMS, dan SECRET_MANAGER. Anda harus memberikan parameter ini jika menggunakan Secret Manager. Jika apiKeySource ditetapkan ke KMS, Anda juga harus memberikan apiKeyKMSEncryptionKey dan API Key terenkripsi. Jika apiKeySource ditetapkan ke SECRET_MANAGER, Anda juga harus memberikan apiKeySecretId. Jika apiKeySource ditetapkan ke PLAINTEXT, Anda juga harus memberikan apiKey.
  • javascriptTextTransformGcsPath: Cloud Storage URI dari file .js yang menentukan fungsi yang ditentukan pengguna (UDF) JavaScript yang akan digunakan. Contoh, gs://my-bucket/my-udfs/my_file.js.
  • javascriptTextTransformFunctionName: Nama fungsi yang ditentukan pengguna (UDF) JavaScript yang akan digunakan. Misalnya, jika kode fungsi JavaScript Anda adalah myTransform(inJson) { /*...do stuff...*/ }, maka nama fungsinya adalah myTransform. Untuk contoh UDF JavaScript, lihat Contoh UDF (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples).
  • javascriptTextTransformReloadIntervalMinutes: Menentukan interval yang dapat diperiksa oleh pekerja untuk perubahan UDF JavaScript guna memuat ulang file. Nilai defaultnya adalah: 0.

Fungsi yang ditentukan pengguna (UDF)

Secara opsional, Anda dapat memperluas template ini dengan menulis fungsi yang ditentukan pengguna (UDF). Template ini memanggil UDF untuk setiap elemen input. Payload elemen diserialisasi sebagai string JSON. Untuk mengetahui informasi selengkapnya, lihat Membuat fungsi yang ditentukan pengguna (UDF) untuk template Dataflow.

Spesifikasi fungsi

UDF memiliki spesifikasi berikut:

  • Input: kolom data pesan Pub/Sub, diserialisasi sebagai string JSON.
  • Output: data peristiwa yang akan dikirim ke endpoint Log Datadog. Output harus berupa string atau objek JSON yang di-string.

Menjalankan template

Konsol

  1. Buka halaman Dataflow Membuat tugas dari template.
  2. Buka Membuat tugas dari template
  3. Di kolom Nama tugas, masukkan nama tugas yang unik.
  4. Opsional: Untuk Endpoint regional, pilih nilai dari menu drop-down. Region default-nya adalah us-central1.

    Untuk mengetahui daftar region tempat Anda dapat menjalankan tugas Dataflow, lihat Lokasi Dataflow.

  5. Dari menu drop-down Template Dataflow, pilih template Pub/Sub ke Datadog.
  6. Di kolom parameter yang disediakan, masukkan nilai parameter Anda.
  7. Klik Jalankan tugas.

gcloud

Di shell atau terminal Anda, jalankan template:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_PubSub_to_Datadog \
    --region REGION_NAME \
    --staging-location STAGING_LOCATION \
    --parameters \
inputSubscription=projects/PROJECT_ID/subscriptions/INPUT_SUBSCRIPTION_NAME,\
apiKey=API_KEY,\
url=URL,\
outputDeadletterTopic=projects/PROJECT_ID/topics/DEADLETTER_TOPIC_NAME,\
javascriptTextTransformGcsPath=PATH_TO_JAVASCRIPT_UDF_FILE,\
javascriptTextTransformFunctionName=JAVASCRIPT_FUNCTION,\
batchCount=BATCH_COUNT,\
parallelism=PARALLELISM

Ganti kode berikut:

  • JOB_NAME: nama tugas unik pilihan Anda
  • REGION_NAME: region tempat Anda ingin men-deploy tugas Dataflow—misalnya, us-central1
  • VERSION: versi template yang ingin Anda gunakan

    Anda dapat menggunakan nilai berikut:

  • STAGING_LOCATION: lokasi untuk menyiapkan file lokal (misalnya, gs://your-bucket/staging)
  • INPUT_SUBSCRIPTION_NAME: nama langganan Pub/Sub
  • API_KEY: Kunci API Datadog
  • URL: URL untuk endpoint Datadog (misalnya, https://http-intake.logs.datadoghq.com)
  • DEADLETTER_TOPIC_NAME: nama topik Pub/Sub
  • JAVASCRIPT_FUNCTION: nama fungsi yang ditentukan pengguna (UDF) JavaScript yang ingin Anda gunakan

    Misalnya, jika kode fungsi JavaScript Anda adalah myTransform(inJson) { /*...do stuff...*/ }, maka nama fungsinya adalah myTransform. Untuk contoh UDF JavaScript, lihat Contoh UDF.

  • PATH_TO_JAVASCRIPT_UDF_FILE: Cloud Storage URI dari file .js yang menentukan fungsi yang ditentukan pengguna (UDF) JavaScript yang ingin Anda gunakan—misalnya, gs://my-bucket/my-udfs/my_file.js
  • BATCH_COUNT: ukuran tumpukan yang akan digunakan untuk mengirim beberapa peristiwa ke Datadog
  • PARALLELISM: jumlah permintaan paralel yang akan digunakan untuk mengirim peristiwa ke Datadog

API

Untuk menjalankan template menggunakan REST API, kirim permintaan POST HTTP. Untuk mengetahui informasi selengkapnya tentang API dan cakupan otorisasinya, lihat projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Cloud_PubSub_to_Datadog
{
   "jobName": "JOB_NAME",
   "environment": {
       "ipConfiguration": "WORKER_IP_UNSPECIFIED",
       "additionalExperiments": []
   },
   "parameters": {
       "inputSubscription": "projects/PROJECT_ID/subscriptions/INPUT_SUBSCRIPTION_NAME",
       "apiKey": "API_KEY",
       "url": "URL",
       "outputDeadletterTopic": "projects/PROJECT_ID/topics/DEADLETTER_TOPIC_NAME",
       "javascriptTextTransformGcsPath": "PATH_TO_JAVASCRIPT_UDF_FILE",
       "javascriptTextTransformFunctionName": "JAVASCRIPT_FUNCTION",
       "batchCount": "BATCH_COUNT",
       "parallelism": "PARALLELISM"
   }
}

Ganti kode berikut:

  • PROJECT_ID: Google Cloud Project ID tempat Anda ingin menjalankan tugas Dataflow
  • JOB_NAME: nama tugas unik pilihan Anda
  • LOCATION: region tempat Anda ingin men-deploy tugas Dataflow—misalnya, us-central1
  • VERSION: versi template yang ingin Anda gunakan

    Anda dapat menggunakan nilai berikut:

  • STAGING_LOCATION: lokasi untuk menyiapkan file lokal (misalnya, gs://your-bucket/staging)
  • INPUT_SUBSCRIPTION_NAME: nama langganan Pub/Sub
  • API_KEY: Kunci API Datadog
  • URL: URL untuk endpoint Datadog (misalnya, https://http-intake.logs.datadoghq.com)
  • DEADLETTER_TOPIC_NAME: nama topik Pub/Sub
  • JAVASCRIPT_FUNCTION: nama fungsi yang ditentukan pengguna (UDF) JavaScript yang ingin Anda gunakan

    Misalnya, jika kode fungsi JavaScript Anda adalah myTransform(inJson) { /*...do stuff...*/ }, maka nama fungsinya adalah myTransform. Untuk contoh UDF JavaScript, lihat Contoh UDF.

  • PATH_TO_JAVASCRIPT_UDF_FILE: Cloud Storage URI dari file .js yang menentukan fungsi yang ditentukan pengguna (UDF) JavaScript yang ingin Anda gunakan—misalnya, gs://my-bucket/my-udfs/my_file.js
  • BATCH_COUNT: ukuran tumpukan yang akan digunakan untuk mengirim beberapa peristiwa ke Datadog
  • PARALLELISM: jumlah permintaan paralel yang akan digunakan untuk mengirim peristiwa ke Datadog

Langkah berikutnya