Pub/Sub ke template Elasticsearch

Template Pub/Sub ke Elasticsearch adalah pipeline streaming yang membaca pesan dari langganan Pub/Sub, menjalankan fungsi yang ditentukan pengguna (UDF), dan menulisnya ke Elasticsearch sebagai dokumen. Template Dataflow menggunakan fitur aliran data Elasticsearch untuk menyimpan data deret waktu di beberapa indeks sekaligus memberi Anda satu resource bernama untuk permintaan. Aliran data sangat cocok untuk log, metrik, trace, dan data lain yang dihasilkan secara terus-menerus yang disimpan di Pub/Sub.

Template ini membuat datastream bernama logs-gcp.DATASET-NAMESPACE, dengan:

  • DATASET adalah nilai parameter template dataset, atau pubsub jika tidak ditentukan.
  • NAMESPACE adalah nilai parameter template namespace, atau default jika tidak ditentukan.

Persyaratan pipeline

  • Langganan Pub/Sub sumber harus ada dan pesan harus dienkode dalam format JSON yang valid.
  • Host Elasticsearch yang dapat dijangkau secara publik di instance Google Cloud atau di Elastic Cloud dengan Elasticsearch versi 7.0 atau yang lebih baru. Lihat Integrasi Google Cloud untuk Elastic guna mengetahui detail selengkapnya.
  • Topik Pub/Sub untuk output error.

Parameter template

Parameter yang diperlukan

Parameter opsional

  • dataset : Jenis log yang dikirim menggunakan Pub/Sub, di mana kita memiliki dasbor siap pakai. Nilai jenis log yang diketahui adalah audit, vpcflow, dan firewall. 'pubsub' default.
  • namespace : Pengelompokan arbitrer, seperti lingkungan (dev, produksi, atau qa), tim, atau unit bisnis strategis. Default: 'default'.
  • elasticsearchTemplateVersion : ID Versi Template Dataflow, biasanya ditentukan oleh Google Cloud. Default-nya adalah: 1.0.0.
  • javascriptTextTransformGcsPath : Pola jalur Cloud Storage untuk kode JavaScript yang berisi fungsi yang ditentukan pengguna Anda. (Contoh: gs://your-bucket/your-function.js).
  • javascriptTextTransformFunctionName : Nama fungsi yang akan dipanggil dari file JavaScript Anda. Hanya gunakan huruf, angka, dan garis bawah. (Contoh: 'transform' atau 'transform_udf1').
  • javascriptTextTransformReloadIntervalMinutes : Tentukan interval yang dapat diperiksa pekerja untuk perubahan UDF JavaScript untuk memuat ulang file. Default-nya adalah 0.
  • elasticsearchUsername : Nama pengguna Elasticsearch untuk diautentikasi. Jika ditetapkan, nilai 'apiKey' akan diabaikan.
  • elasticsearchPassword : Sandi Elasticsearch untuk melakukan autentikasi. Jika ditetapkan, nilai 'apiKey' akan diabaikan.
  • batchSize : Ukuran tumpukan dalam jumlah dokumen. Default: '1000'.
  • batchSizeBytes : Ukuran Batch dalam byte yang digunakan untuk penyisipan batch pesan ke elasticsearch. Default: '5242880 (5mb)'.
  • maxRetryAttempts : Upaya percobaan ulang maksimum, harus > 0. Default: 'tidak ada percobaan ulang'.
  • maxRetryDuration : Durasi percobaan ulang maksimum dalam milidetik, harus > 0. Default: 'tidak ada percobaan ulang'.
  • propertyAsIndex : Properti dalam dokumen yang diindeks yang nilainya akan menentukan metadata '_index' untuk disertakan dengan dokumen dalam permintaan massal (lebih diutamakan daripada UDF '_index'). Default: tidak ada.
  • javaScriptIndexFnGcsPath : Jalur Cloud Storage ke sumber UDF JavaScript untuk fungsi yang akan menentukan metadata '_index' yang akan disertakan dengan dokumen dalam permintaan massal. Default: tidak ada.
  • javaScriptIndexFnName : Nama fungsi UDF JavaScript untuk fungsi yang akan menentukan metadata _index yang akan disertakan dengan dokumen dalam permintaan massal. Default: tidak ada.
  • propertyAsId : Properti dalam dokumen yang diindeks yang nilainya akan menentukan metadata '_id' untuk disertakan dengan dokumen dalam permintaan massal (lebih diutamakan daripada '_id' UDF). Default: tidak ada.
  • javaScriptIdFnGcsPath : Jalur Cloud Storage ke sumber UDF JavaScript untuk fungsi yang akan menentukan metadata '_id' yang akan disertakan dengan dokumen dalam request massal.Default: none.
  • javaScriptIdFnName : Nama Fungsi JavaScript UDF untuk fungsi yang akan menentukan metadata _id untuk disertakan dengan dokumen dalam permintaan massal. Default: tidak ada.
  • javaScriptTypeFnGcsPath : Jalur Cloud Storage ke sumber UDF JavaScript untuk fungsi yang akan menentukan metadata '_type' yang akan disertakan dengan dokumen dalam permintaan massal. Default: tidak ada.
  • javaScriptTypeFnName : Nama fungsi JavaScript UDF untuk fungsi yang akan menentukan metadata '_type' yang akan disertakan bersama dokumen dalam permintaan massal. Default: tidak ada.
  • javaScriptIsDeleteFnGcsPath : Jalur Cloud Storage ke sumber UDF JavaScript untuk fungsi yang akan menentukan apakah dokumen harus dihapus, bukan disisipkan atau diperbarui. Fungsi ini harus menampilkan nilai string "true" atau "false". Default: tidak ada.
  • javaScriptIsDeleteFnName : Nama fungsi UDF JavaScript untuk fungsi yang akan menentukan apakah dokumen harus dihapus, bukan disisipkan atau diperbarui. Fungsi ini harus menampilkan nilai string "true" atau "false". Default: tidak ada.
  • usePartialUpdate : Apakah akan menggunakan update sebagian (update, bukan membuat atau mengindeks, mengizinkan dokumen parsial) dengan permintaan Elasticsearch. Default: 'false'.
  • bulkInsertMethod : Apakah akan menggunakan 'INDEX' (indeks, mengizinkan pembaruan dan 'CREATE' (membuat, error pada _id duplikat) dengan permintaan massal Elasticsearch. Default: 'BUAT'.
  • trustSelfSignedCerts : Apakah akan memercayai sertifikat yang ditandatangani sendiri atau tidak. Instance Elasticsearch yang terinstal mungkin memiliki sertifikat yang ditandatangani sendiri. Aktifkan setelan ini ke True untuk mengabaikan validasi pada sertifikat SSL. (default-nya adalah Salah).
  • disableCertificateValidation : Jika 'true', percayai sertifikat SSL yang ditandatangani sendiri. Instance Elasticsearch mungkin memiliki sertifikat yang ditandatangani sendiri. Untuk mengabaikan validasi sertifikat, tetapkan parameter ini ke 'true'. Default: false.
  • apiKeyKMSEncryptionKey : Kunci Cloud KMS untuk mendekripsi kunci API. Parameter ini harus diberikan jika apiKeySource disetel ke KMS. Jika parameter ini disediakan, string apiKey harus diteruskan dalam mode terenkripsi. Enkripsi parameter menggunakan endpoint enkripsi KMS API. Kunci harus dalam format projects/{gcp_project}/locations/{key_region}/keyRings/{key_ring}/cryptoKeys/{kms_key_name}. Lihat: https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt (Contoh: projects/your-project-id/locations/global/keyRings/your-keyring/cryptoKeys/your-key-name).
  • apiKeySecretId : ID rahasia Secret Manager untuk apiKey. Parameter ini harus diberikan jika apiKeySource disetel ke SECRET_MANAGER. Harus dalam format projects/{project}/secrets/{secret}/version/{secret_version}. (Contoh: project/id-project-Anda/rahasia/rahasia-Anda/versi/versi-rahasia-Anda).
  • apiKeySource : Sumber kunci API. Salah satu dari PLAINTEXT, KMS, atau SECRET_MANAGER. Parameter ini harus diberikan jika secret manager atau KMS digunakan. Jika apiKeySource disetel ke KMS, apiKeyKMSEncryptionKey dan apiKey terenkripsi harus diberikan. Jika apiKeySource disetel ke SECRET_MANAGER, apiKeySecretId harus diberikan. Jika apiKeySource disetel ke PLAINTEXT, apiKey harus diberikan. Default-nya adalah: PLAINTEXT.

Fungsi yang ditentukan pengguna (UDF)

Template ini mendukung fungsi yang ditentukan pengguna (UDF) di beberapa titik dalam pipeline, yang dijelaskan di bawah. Untuk mengetahui informasi selengkapnya, lihat Membuat fungsi yang ditentukan pengguna untuk template Dataflow.

Fungsi transformasi teks

Mengubah pesan Pub/Sub menjadi dokumen Elasticsearch.

Parameter template:

  • javascriptTextTransformGcsPath: URI Cloud Storage file JavaScript.
  • javascriptTextTransformFunctionName: nama fungsi JavaScript.

Spesifikasi fungsi:

  • Input: kolom data pesan Pub/Sub, yang diserialisasi sebagai string JSON.
  • Output: dokumen JSON string yang akan disisipkan ke Elasticsearch.

Fungsi indeks

Menampilkan indeks yang memiliki dokumen tersebut.

Parameter template:

  • javaScriptIndexFnGcsPath: URI Cloud Storage file JavaScript.
  • javaScriptIndexFnName: nama fungsi JavaScript.

Spesifikasi fungsi:

  • Input: dokumen Elasticsearch, yang diserialisasi sebagai string JSON.
  • Output: nilai kolom metadata _index dokumen.

Fungsi ID dokumen

Menampilkan ID dokumen.

Parameter template:

  • javaScriptIdFnGcsPath: URI Cloud Storage file JavaScript.
  • javaScriptIdFnName: nama fungsi JavaScript.

Spesifikasi fungsi:

  • Input: dokumen Elasticsearch, yang diserialisasi sebagai string JSON.
  • Output: nilai kolom metadata _id dokumen.

Fungsi penghapusan dokumen

Menentukan apakah akan menghapus dokumen. Untuk menggunakan fungsi ini, tetapkan mode sisipkan massal ke INDEX dan sediakan fungsi ID dokumen.

Parameter template:

  • javaScriptIsDeleteFnGcsPath: URI Cloud Storage file JavaScript.
  • javaScriptIsDeleteFnName: nama fungsi JavaScript.

Spesifikasi fungsi:

  • Input: dokumen Elasticsearch, yang diserialisasi sebagai string JSON.
  • Output: menampilkan string "true" untuk menghapus dokumen, atau "false" untuk memperbarui dan menyisipkan dokumen.

Fungsi jenis pemetaan

Menampilkan jenis pemetaan dokumen.

Parameter template:

  • javaScriptTypeFnGcsPath: URI Cloud Storage file JavaScript.
  • javaScriptTypeFnName: nama fungsi JavaScript.

Spesifikasi fungsi:

  • Input: dokumen Elasticsearch, yang diserialisasi sebagai string JSON.
  • Output: nilai kolom metadata _type dokumen.

Menjalankan template

Konsol

  1. Buka halaman Create job from template Dataflow.
  2. Buka Buat tugas dari template
  3. Di kolom Job name, masukkan nama pekerjaan yang unik.
  4. Opsional: Untuk Endpoint regional, pilih nilai dari menu drop-down. Region default-nya adalah us-central1.

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

  5. Dari menu drop-down Dataflow template, pilih the Pub/Sub to Elasticsearch template.
  6. Di kolom parameter yang disediakan, masukkan parameter value Anda.
  7. Klik Run job.

gcloud

Di shell atau terminal Anda, jalankan template:

gcloud dataflow flex-template run JOB_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/PubSub_to_Elasticsearch \
    --parameters \
inputSubscription=SUBSCRIPTION_NAME,\
connectionUrl=CONNECTION_URL,\
dataset=DATASET,\
namespace=NAMESPACE,\
apiKey=APIKEY,\
errorOutputTopic=ERROR_OUTPUT_TOPIC
  

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud tempat Anda ingin menjalankan tugas Dataflow
  • JOB_NAME: nama pekerjaan 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:

  • ERROR_OUTPUT_TOPIC: topik Pub/Sub Anda untuk output error
  • SUBSCRIPTION_NAME: nama langganan Pub/Sub Anda
  • CONNECTION_URL: URL Elasticsearch Anda
  • DATASET: jenis log Anda
  • NAMESPACE: namespace Anda untuk set data
  • APIKEY: kunci API yang dienkode base64 untuk autentikasi

API

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

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
   "launch_parameter": {
      "jobName": "JOB_NAME",
      "parameters": {
          "inputSubscription": "SUBSCRIPTION_NAME",
          "connectionUrl": "CONNECTION_URL",
          "dataset": "DATASET",
          "namespace": "NAMESPACE",
          "apiKey": "APIKEY",
          "errorOutputTopic": "ERROR_OUTPUT_TOPIC"
      },
      "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/PubSub_to_Elasticsearch",
   }
}
  

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud tempat Anda ingin menjalankan tugas Dataflow
  • JOB_NAME: nama pekerjaan 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:

  • ERROR_OUTPUT_TOPIC: topik Pub/Sub Anda untuk output error
  • SUBSCRIPTION_NAME: nama langganan Pub/Sub Anda
  • CONNECTION_URL: URL Elasticsearch Anda
  • DATASET: jenis log Anda
  • NAMESPACE: namespace Anda untuk set data
  • APIKEY: kunci API yang dienkode base64 untuk autentikasi

Langkah selanjutnya