Men-deploy streaming log dari Google Cloud ke Splunk

Last reviewed 2023-11-16 UTC

Dokumen ini menjelaskan cara men-deploy mekanisme ekspor untuk melakukan streaming log dari resource Google Cloud ke Splunk. Hal ini mengasumsikan bahwa Anda telah membaca arsitektur referensi yang sesuai untuk kasus penggunaan ini.

Petunjuk ini ditujukan untuk administrator operasi dan keamanan yang ingin melakukan streaming log dari Google Cloud ke Splunk. Anda harus memahami Splunk dan HTTP Event Collector (HEC) Splunk saat menggunakan petunjuk ini untuk operasi IT atau kasus penggunaan keamanan. Meskipun tidak diwajibkan, pemahaman tentang pipeline Dataflow, Pub/Sub, Cloud Logging, Identity and Access Management, dan Cloud Storage berguna untuk deployment ini.

Untuk mengotomatiskan langkah-langkah deployment dalam arsitektur referensi ini menggunakan infrastruktur sebagai kode (IaC), lihat repositori GitHub terraform-splunk-log-export.

Arsitektur

Diagram berikut menunjukkan arsitektur referensi dan menunjukkan cara data log mengalir dari Google Cloud ke Splunk.

Alur log dari Google Cloud ke Splunk.

Seperti yang ditunjukkan pada diagram, Cloud Logging mengumpulkan log ke dalam sink log tingkat organisasi dan mengirimkan log tersebut ke Pub/Sub. Layanan Pub/Sub membuat satu topik dan langganan untuk log serta meneruskan log ke pipeline Dataflow utama. Pipeline Dataflow utama adalah pipeline streaming Pub/Sub ke Splunk yang mengambil log dari langganan Pub/Sub dan mengirimkannya ke Splunk. Paralel dengan pipeline Dataflow utama, pipeline Dataflow sekunder adalah pipeline streaming Pub/Sub ke Pub/Sub untuk memutar ulang pesan jika pengiriman gagal. Pada akhir proses, Splunk Enterprise atau Splunk Cloud Platform bertindak sebagai endpoint HEC dan menerima log untuk dianalisis lebih lanjut. Untuk detail selengkapnya, lihat bagian Arsitektur dari arsitektur referensi.

Untuk men-deploy arsitektur referensi ini, Anda harus melakukan tugas-tugas berikut:

Sebelum memulai

Selesaikan langkah-langkah berikut guna menyiapkan lingkungan untuk arsitektur referensi Google Cloud ke Splunk:

Memunculkan project, mengaktifkan penagihan, dan mengaktifkan API

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Enable the Cloud Monitoring API, Secret Manager, Compute Engine, Pub/Sub, and Dataflow APIs.

    Enable the APIs

Memberikan peran IAM

Di konsol Google Cloud, pastikan Anda memiliki izin Identity and Access Management (IAM) berikut untuk resource organisasi dan project. Untuk mengetahui informasi selengkapnya, baca Memberikan, mengubah, dan mencabut akses ke resource.

Izin Peran yang telah ditetapkan Resource
  • logging.sinks.create
  • logging.sinks.get
  • logging.sinks.update
  • Logs Configuration Writer (roles/logging.configWriter)

Organisasi

  • compute.networks.*
  • compute.routers.*
  • compute.firewalls.*
  • networkservices.*
  • Admin Jaringan Compute (roles/compute.networkAdmin)
  • Compute Security Admin.(roles/compute.securityAdmin)

Project

  • secretmanager.*
  • Secret Manager Admin (roles/secretmanager.admin)

Project

Jika peran IAM yang telah ditetapkan tidak menyertakan izin yang memadai bagi Anda untuk melakukan tugas, buat peran khusus. Peran khusus memberi Anda akses yang dibutuhkan, sekaligus membantu Anda mengikuti prinsip hak istimewa terendah.

Menyiapkan lingkungan Anda

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

  2. Tetapkan project untuk sesi Cloud Shell Anda yang aktif:

    gcloud config set project PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Anda.

Menyiapkan jaringan aman

Pada langkah ini, Anda akan menyiapkan jaringan aman sebelum memproses dan mengekspor log ke Splunk Enterprise.

  1. Buat jaringan VPC dan subnet:

    gcloud compute networks create NETWORK_NAME --subnet-mode=custom
    gcloud compute networks subnets create SUBNET_NAME \
    --network=NETWORK_NAME \
    --region=REGION \
    --range=192.168.1.0/24
    

    Ganti kode berikut:

    • NETWORK_NAME: nama untuk jaringan Anda
    • SUBNET_NAME: nama untuk subnet Anda
    • REGION: region yang ingin Anda gunakan untuk jaringan ini
  2. Buat aturan firewall untuk virtual machine (VM) pekerja Dataflow untuk saling berkomunikasi:

    gcloud compute firewall-rules create allow-internal-dataflow \
    --network=NETWORK_NAME \
    --action=allow \
    --direction=ingress \
    --target-tags=dataflow \
    --source-tags=dataflow \
    --priority=0 \
    --rules=tcp:12345-12346
    

    Aturan ini memungkinkan traffic internal antara VM Dataflow yang menggunakan port TCP 12345-12346. Selain itu, layanan Dataflow menetapkan tag dataflow.

  3. Buat gateway Cloud NAT:

    gcloud compute routers create nat-router \
    --network=NETWORK_NAME \
    --region=REGION
    
    gcloud compute routers nats create nat-config \
    --router=nat-router \
    --nat-custom-subnet-ip-ranges=SUBNET_NAME \
    --auto-allocate-nat-external-ips \
    --region=REGION
    
  4. Mengaktifkan Akses Google Pribadi di subnet

    gcloud compute networks subnets update SUBNET_NAME \
    --enable-private-ip-google-access \
    --region=REGION
    

Membuat log sink

Di bagian ini, Anda akan membuat sink log di seluruh organisasi dan tujuan Pub/Sub-nya, beserta izin yang diperlukan.

  1. Di Cloud Shell, buat topik Pub/Sub dan langganan terkait sebagai tujuan sink log baru Anda:

    gcloud pubsub topics create INPUT_TOPIC_NAME
    gcloud pubsub subscriptions create \
    --topic INPUT_TOPIC_NAME INPUT_SUBSCRIPTION_NAME
    

    Ganti kode berikut:

    • INPUT_TOPIC_NAME: nama untuk topik Pub/Sub yang akan digunakan sebagai tujuan sink log
    • INPUT_SUBSCRIPTION_NAME: nama untuk langganan Pub/Sub ke tujuan sink log
  2. Buat sink log organisasi:

    gcloud logging sinks create ORGANIZATION_SINK_NAME \
    pubsub.googleapis.com/projects/PROJECT_ID/topics/INPUT_TOPIC_NAME \
    --organization=ORGANIZATION_ID \
    --include-children \
    --log-filter='NOT logName:projects/PROJECT_ID/logs/dataflow.googleapis.com'
    

    Ganti kode berikut:

    • ORGANIZATION_SINK_NAME: nama organisasi Anda
    • ORGANIZATION_ID: ID organisasi Anda

    Perintah ini terdiri dari flag berikut:

    • Flag --organization menentukan bahwa ini adalah sink log tingkat organisasi.
    • Flag --include-children diperlukan dan memastikan bahwa sink log tingkat organisasi menyertakan semua log di semua subfolder dan project.
    • Flag --log-filter menentukan log yang akan dirutekan. Dalam contoh ini, Anda mengecualikan log operasi Dataflow secara khusus untuk project PROJECT_ID, karena pipeline Dataflow ekspor log menghasilkan lebih banyak log sendiri saat memproses log. Filter mencegah pipeline mengekspor log-nya sendiri, sehingga menghindari siklus yang berpotensi eksponensial. Output-nya mencakup akun layanan dalam bentuk o#####-####@gcp-sa-logging.iam.gserviceaccount.com.
  3. Berikan peran IAM Pub/Sub Publisher ke akun layanan sink log pada topik Pub/Sub INPUT_TOPIC_NAME. Peran ini memungkinkan akun layanan sink log memublikasikan pesan pada topik tersebut.

    gcloud pubsub topics add-iam-policy-binding INPUT_TOPIC_NAME \
    --member=serviceAccount:LOG_SINK_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/pubsub.publisher
    

    Ganti LOG_SINK_SERVICE_ACCOUNT dengan nama akun layanan untuk sink log Anda.

Membuat topik yang dihentikan peng irimannya

Untuk mencegah potensi kehilangan data yang terjadi saat pesan gagal dikirim, Anda harus membuat topik yang dihentikan pengirimannya dan langganan yang sesuai untuk Pub/Sub. Pesan yang gagal akan disimpan dalam topik yang dihentikan pengirimannya hingga operator atau engineer keandalan situs dapat menyelidiki dan memperbaiki kegagalan tersebut. Untuk mengetahui informasi selengkapnya, lihat bagian Memutar ulang pesan yang gagal dalam arsitektur referensi.

  • Di Cloud Shell, buat topik dan langganan Pub/Sub yang dihentikan pengirimannya untuk mencegah kehilangan data dengan menyimpan pesan yang tidak terkirim:

    gcloud pubsub topics create DEAD_LETTER_TOPIC_NAME
    gcloud pubsub subscriptions create --topic DEAD_LETTER_TOPIC_NAME DEAD_LETTER_SUBSCRIPTION_NAME
    

    Ganti kode berikut:

    • DEAD_LETTER_TOPIC_NAME: nama untuk topik Pub/Sub yang akan menjadi topik yang dihentikan pengirimannya
    • DEAD_LETTER_SUBSCRIPTION_NAME: nama langganan Pub/Sub untuk topik yang dihentikan pengirimannya

Menyiapkan endpoint Splunk HEC

Dalam prosedur berikut, Anda akan menyiapkan endpoint Splunk HEC dan menyimpan token HEC yang baru dibuat sebagai rahasia di Secret Manager. Saat men-deploy pipeline Dataflow Splunk, Anda harus menyediakan URL endpoint dan token.

Mengonfigurasi HEC Splunk

  1. Jika Anda belum memiliki endpoint Splunk HEC, lihat dokumentasi Splunk untuk mempelajari cara mengonfigurasi HEC Splunk. HEC Splunk berjalan di layanan Cloud Platform Splunk atau di instance Splunk Enterprise Anda sendiri.
  2. Di Splunk, setelah Anda membuat token Splunk HEC, salin nilai token.
  3. Di Cloud Shell, simpan nilai token HEC Splunk dalam file sementara yang bernama splunk-hec-token-plaintext.txt.

Simpan token Splunk HEC di Secret Manager

Pada langkah ini, Anda akan membuat rahasia dan satu versi rahasia yang mendasarinya untuk menyimpan nilai token Splunk HEC.

  1. Di Cloud Shell, buat rahasia untuk memuat token Splunk HEC Anda:

    gcloud secrets create hec-token \
     --replication-policy="automatic"
    

    Untuk mengetahui informasi selengkapnya tentang kebijakan replikasi untuk secret, lihat Memilih kebijakan replikasi.

  2. Tambahkan token sebagai versi secret menggunakan konten file splunk-hec-token-plaintext.txt:

    gcloud secrets versions add hec-token \
     --data-file="./splunk-hec-token-plaintext.txt"
    
  3. Hapus file splunk-hec-token-plaintext.txt, karena tidak diperlukan lagi.

Mengonfigurasi kapasitas pipeline Dataflow

Tabel berikut merangkum praktik terbaik umum yang direkomendasikan untuk mengonfigurasi setelan kapasitas pipeline Dataflow:

Setelan Praktik terbaik umum

Flag --worker-machine-type

Tetapkan ke ukuran mesin dasar n1-standard-4 untuk mendapatkan rasio performa dan biaya terbaik

Flag --max-workers

Tetapkan ke jumlah maksimum pekerja yang diperlukan untuk menangani perkiraan EPS puncak per penghitungan Anda

Parameter parallelism

Tetapkan ke 2 x vCPU/pekerja x jumlah maksimum pekerja untuk memaksimalkan jumlah koneksi HEC Splunk paralel

batchCount

parameter

Tetapkan ke 10-50 peristiwa/permintaan untuk log, asalkan penundaan buffering maksimum dua detik dapat diterima

Ingatlah untuk menggunakan nilai dan perhitungan unik Anda sendiri saat men-deploy arsitektur referensi ini di lingkungan Anda.

  1. Tetapkan nilai untuk jenis mesin dan jumlah mesin. Untuk menghitung nilai yang sesuai dengan lingkungan cloud Anda, lihat bagian Jenis mesin dan Jumlah mesin pada arsitektur referensi.

    DATAFLOW_MACHINE_TYPE
    DATAFLOW_MACHINE_COUNT
    
  2. Tetapkan nilai untuk paralelisme dan jumlah batch Dataflow. Guna menghitung nilai yang sesuai untuk lingkungan cloud Anda, lihat bagian Paralelisme dan Jumlah batch pada arsitektur referensi.

    JOB_PARALLELISM
    JOB_BATCH_COUNT
    

Untuk mengetahui informasi selengkapnya tentang cara menghitung parameter kapasitas pipeline Dataflow, lihat bagian Pertimbangan desain pengoptimalan performa dan biaya dalam arsitektur referensi.

Mengekspor log dengan menggunakan pipeline Dataflow

Di bagian ini, Anda akan men-deploy pipeline Dataflow dengan langkah-langkah berikut:

Pipeline ini mengirimkan pesan log Google Cloud ke Splunk HEC.

Membuat bucket Cloud Storage dan akun layanan pekerja Dataflow

  1. Di Cloud Shell, buat bucket Cloud Storage baru dengan setelan akse s lvel bucket seragam:

    gsutil mb -b on gs://PROJECT_ID-dataflow/
    

    Bucket Cloud Storage yang baru saja Anda buat adalah tempat tugas Dataflow membuat file sementara.

  2. Di Cloud Shell, buat akun layanan untuk pekerja Dataflow:

    gcloud iam service-accounts create WORKER_SERVICE_ACCOUNT \
       --description="Worker service account to run Splunk Dataflow jobs" \
       --display-name="Splunk Dataflow Worker SA"
    

    Ganti WORKER_SERVICE_ACCOUNT dengan nama yang ingin Anda gunakan untuk akun layanan pekerja Dataflow.

Memberikan peran dan akses ke akun layanan pekerja Dataflow

Di bagian ini, berikan peran yang diperlukan ke akun layanan pekerja Dataflow seperti yang ditunjukkan pada tabel berikut.

Peran Jalur Tujuan
Dataflow Admin

roles/dataflow.worker

Aktifkan akun layanan untuk bertindak sebagai admin Dataflow.
Dataflow Worker

roles/dataflow.worker

Aktifkan akun layanan untuk bertindak sebagai pekerja Dataflow.
Storage Object Admin

roles/storage.objectAdmin

Aktifkan akun layanan untuk mengakses bucket Cloud Storage yang digunakan oleh Dataflow untuk file staging.
Pub/Sub Publisher

roles/pubsub.publisher

Aktifkan akun layanan untuk memublikasikan pesan yang gagal ke topik Pub/Sub yang dihentikan pengirimannya.
Pub/Sub Subscriber

roles/pubsub.subscriber

Aktifkan akun layanan untuk mengakses langganan input.
Pub/Sub Viewer

roles/pubsub.viewer

Aktifkan akun layanan untuk melihat langganan.
Secret Manager Secret Accessor.

roles/secretmanager.secretAccessor

Aktifkan akun layanan untuk mengakses secret yang berisi token HEC Splunk.
  1. Di Cloud Shell, berikan peran Admin Dataflow dan Pekerja Dataflow ke akun layanan pekerja Dataflow yang diperlukan akun ini untuk menyetujui operasi tugas dan tugas administrasi Dataflow:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:WORKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
       --role="roles/dataflow.admin"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:WORKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
       --role="roles/dataflow.worker"
    
  2. Beri akun layanan pekerja Dataflow untuk melihat dan menggunakan pesan dari langganan input Pub/Sub:

    gcloud pubsub subscriptions add-iam-policy-binding INPUT_SUBSCRIPTION_NAME \
     --member="serviceAccount:WORKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
     --role="roles/pubsub.subscriber"
    
    gcloud pubsub subscriptions add-iam-policy-binding INPUT_SUBSCRIPTION_NAME \
     --member="serviceAccount:WORKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
     --role="roles/pubsub.viewer"
    
  3. Beri akun layanan pekerja Dataflow untuk memublikasikan pesan yang gagal ke topik Pub/Sub yang belum diproses:

    gcloud pubsub topics add-iam-policy-binding DEAD_LETTER_TOPIC_NAME \
     --member="serviceAccount:WORKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
     --role="roles/pubsub.publisher"
    
  4. Beri akun layanan pekerja Dataflow akses ke rahasia token Splunk HEC di Secret Manager:

    gcloud secrets add-iam-policy-binding hec-token \
    --member="serviceAccount:WORKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor"
    
  5. Beri akun layanan pekerja Dataflow akses baca dan tulis ke bucket Cloud Storage untuk digunakan oleh tugas Dataflow untuk file staging:

    gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID-dataflow/ \
    --member="serviceAccount:WORKER_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com"
    --role=”roles/storage.objectAdmin”
    

Men-deploy pipeline Dataflow

  1. Di Cloud Shell, tetapkan variabel lingkungan berikut untuk URL Splunk HEC Anda:

    export SPLUNK_HEC_URL=SPLUNK_HEC_URL
    

    Ganti variabel SPLUNK_HEC_URL menggunakan bentuk protocol://host[:port], dengan:

    • protocol adalah http atau https.
    • host adalah nama domain yang sepenuhnya memenuhi syarat (FQDN) atau alamat IP dari instance Splunk HEC Anda, atau, jika Anda memiliki beberapa instance HEC, instance Load balancer HTTP(S) (atau berbasis DNS).
    • port adalah nomor port HEC. Hal ini bersifat opsional, dan bergantung pada konfigurasi endpoint HEC Splunk Anda.

    Contoh input URL HEC Splunk yang valid adalah https://splunk-hec.example.com:8088. Jika Anda mengirim data ke HEC di Cloud Platform Splunk, lihat Mengirim data ke HEC di Cloud Splunk untuk menentukan bagian host dan port di atas URL spesifik Splunk HEC Anda.

    URL HEC Splunk tidak boleh menyertakan jalur endpoint HEC, misalnya, /services/collector. Template Pub/Sub ke Dataflow Splunk saat ini hanya mendukung endpoint /services/collector untuk peristiwa berformat JSON, dan otomatis menambahkan jalur tersebut ke input URL Splunk HEC Anda. Untuk mempelajari endpoint HEC lebih lanjut, lihat dokumentasi Splunk untuk endpoint layanan/kolektor.

  2. Deploy pipeline Dataflow menggunakan template Pub/Sub ke Splunk Dataflow:

    gcloud beta dataflow jobs run JOB_NAME \
    --gcs-location=gs://dataflow-templates/latest/Cloud_PubSub_to_Splunk \
    --staging-location=gs://PROJECT_ID-dataflow/temp/ \
    --worker-machine-type=DATAFLOW_MACHINE_TYPE \
    --max-workers=DATAFLOW_MACHINE_COUNT \
    --region=REGION \
    --network=NETWORK_NAME \
    --subnetwork=regions/REGION/subnetworks/SUBNET_NAME \
    --disable-public-ips \
    --parameters \
    inputSubscription=projects/PROJECT_ID/subscriptions/INPUT_SUBSCRIPTION_NAME,\
    outputDeadletterTopic=projects/PROJECT_ID/topics/DEAD_LETTER_TOPIC_NAME,\
    url=SPLUNK_HEC_URL,\
    tokenSource=SECRET_MANAGER, \
    tokenSecretId=projects/PROJECT_ID/secrets/hec-token/versions/1, \
    batchCount=JOB_BATCH_COUNT,\
    parallelism=JOB_PARALLELISM,\
    javascriptTextTransformGcsPath=gs://splk-public/js/dataflow_udf_messages_replay.js,\
    javascriptTextTransformFunctionName=process
    

    Ganti JOB_NAME dengan format nama pubsub-to-splunk-date+"%Y%m%d-%H%M%S"

    Parameter opsional javascriptTextTransformGcsPath dan javascriptTextTransformFunctionName menentukan contoh UDF yang tersedia untuk publik: gs://splk-public/js/dataflow_udf_messages_replay.js. Contoh UDF menyertakan contoh kode untuk logika decoding dan transformasi peristiwa yang Anda gunakan untuk memutar ulang pengiriman yang gagal. Untuk mengetahui informasi selengkapnya tentang UDF, lihat Mentransformasi peristiwa yang berlangsung dengan UDF.

  3. Setelah tugas pipeline selesai, temukan ID tugas baru di output, salin ID tugas, lalu simpan. Anda memasukkan ID pekerjaan ini di langkah berikutnya.

Lihat log di Splunk

Pekerja pipeline Dataflow memerlukan waktu beberapa menit untuk disediakan dan siap mengirim log ke Splunk HEC. Anda dapat mengonfirmasi bahwa log diterima dan diindeks dengan benar di antarmuka penelusuran Splunk Enterprise atau Splunk Cloud Platform. Untuk melihat jumlah log per jenis resource yang dimonitor:

  1. Di Splunk, buka Splunk Search & Reporting.

  2. Jalankan penelusuran index=[MY_INDEX] | stats count by resource.type tempat indeks MY_INDEX dikonfigurasi untuk token Splunk HEC Anda:

    Hasil penelusuran di index=text | jumlah statistik menurut jenis
sumber daya di aplikasi Splunk.

  3. Jika Anda tidak melihat peristiwa apa pun, lihat Menangani kegagalan pengiriman.

Mengubah peristiwa yang sedang berlangsung dengan UDF

Template Pub/Sub ke Splunk Dataflow mendukung UDF JavaScript untuk transformasi peristiwa kustom, seperti menambahkan kolom baru atau menetapkan metadata Splunk HEC berdasarkan peristiwa. Pipeline yang Anda deploy menggunakan UDF contoh ini.

Di bagian ini, Anda akan mengedit contoh fungsi UDF terlebih dahulu untuk menambahkan kolom peristiwa baru. Kolom baru ini menentukan nilai langganan Pub/Sub asal sebagai informasi kontekstual tambahan. Kemudian, Anda memperbarui pipeline Dataflow dengan UDF yang dimodifikasi.

Mengubah contoh UDF

  1. Di Cloud Shell, download file JavaScript yang berisi contoh fungsi UDF:

      wget https://storage.googleapis.com/splk-public/js/dataflow_udf_messages_replay.js
      

  2. Di editor teks pilihan Anda, buka file JavaScript, temukan kolom event.inputSubscription, hapus tanda komentar di baris tersebut, lalu ganti splunk-dataflow-pipeline dengan INPUT_SUBSCRIPTION_NAME:

    event.inputSubscription = "INPUT_SUBSCRIPTION_NAME";
    
  3. Simpan file.

  4. upload file ke bucket Cloud Storage.

    gsutil cp ./dataflow_udf_messages_replay.js gs://PROJECT_ID-dataflow/js/
    

Mengupdate pipeline Dataflow dengan UDF baru

  1. Di Cloud Shell, hentikan pipeline menggunakan opsi Drain untuk memastikan bahwa log yang telah diambil dari Pub/Sub tidak hilang:

    gcloud dataflow jobs drain JOB_ID --region=REGION
    
  2. Jalankan tugas pipeline Dataflow dengan UDF yang telah diperbarui.

    gcloud beta dataflow jobs run JOB_NAME \
    --gcs-location=gs://dataflow-templates/latest/Cloud_PubSub_to_Splunk \
    --worker-machine-type=DATAFLOW_MACHINE_TYPE \
    --max-workers=DATAFLOW_MACHINE_COUNT \
    --region=REGION \
    --network=NETWORK_NAME \
    --subnetwork=regions/REGION/subnetworks/SUBNET_NAME \
    --disable-public-ips \
    --parameters \
    inputSubscription=projects/PROJECT_ID/subscriptions/INPUT_SUBSCRIPTION_NAME,\
    outputDeadletterTopic=projects/PROJECT_ID/topics/DEAD_LETTER_TOPIC_NAME,\
    url=SPLUNK_HEC_URL,\
    tokenSource=SECRET_MANAGER, \
    tokenSecretId=projects/PROJECT_ID/secrets/hec-token/versions/1, \
    batchCount=JOB_BATCH_COUNT,\
    parallelism=JOB_PARALLELISM,\
    javascriptTextTransformGcsPath=gs://PROJECT_ID-dataflow/js/dataflow_udf_messages_replay.js,\
    javascriptTextTransformFunctionName=process
    

    Ganti JOB_NAME dengan format nama pubsub-to-splunk-date+"%Y%m%d-%H%M%S"

Menangani kegagalan pengiriman

Kegagalan pengiriman dapat terjadi karena terjadi error saat memproses peristiwa atau menghubungkan ke HEC Splunk. Di bagian ini, Anda memperkenalkan kegagalan pengiriman untuk menunjukkan alur kerja penanganan error. Anda juga akan mempelajari cara melihat dan memicu pengiriman ulang pesan yang gagal ke Splunk.

Memicu kegagalan pengiriman

Untuk menyebabkan kegagalan pengiriman secara manual di Splunk, lakukan salah satu hal berikut:

  • Jika Anda menjalankan satu instance, hentikan server Splunk agar error koneksi.
  • Nonaktifkan token HEC yang relevan dari konfigurasi input Splunk Anda.

Memecahkan masalah pesan yang gagal

Untuk menyelidiki pesan yang gagal, Anda dapat menggunakan Google Cloud Console:

  1. Di Google Cloud Console, buka halaman Pub/Sub Subscriptions.

    Buka Langganan Pub/Sub

  2. Klik langganan yang belum diproses dan Anda buat. Jika Anda menggunakan contoh sebelumnya, nama langganan adalah: projects/PROJECT_ID/subscriptions/DEAD_LETTER_SUBSCRIPTION_NAME.

  3. Untuk membuka penampil pesan, klik Lihat Pesan.

  4. Untuk melihat pesan, klik Pull. Pastikan opsi Enable ack messages tetap dihapus.

  5. Periksa pesan yang gagal. Perhatikan hal-hal berikut:

    • Payload peristiwa Splunk di bagian kolom Message body.
    • Pesan error pada kolom attribute.errorMessage.
    • Stempel waktu error di bagian kolom attribute.timestamp.

Screenshot berikut menunjukkan contoh pesan kegagalan yang Anda terima jika endpoint Splunk HEC sedang tidak aktif untuk sementara atau tidak dapat dijangkau. Perhatikan bahwa teks atribut errorMessage membaca The target server failed to respond. Pesan ini juga menunjukkan stempel waktu yang terkait dengan setiap kegagalan. Anda dapat menggunakan stempel waktu ini untuk memecahkan masalah utama kegagalan.

Atribut pesan gagal.

Putar ulang pesan yang gagal

Di bagian ini, Anda harus memulai ulang server Splunk atau mengaktifkan endpoint HEC Splunk untuk memperbaiki error pengiriman. Anda kemudian dapat memutar ulang pesan yang belum diproses.

  1. Di Splunk, gunakan salah satu metode berikut untuk memulihkan koneksi ke Google Cloud:

    • Jika Anda menghentikan server Splunk, mulai ulang server.
    • Jika Anda menonaktifkan endpoint Splunk HEC di bagian Memicu kegagalan pengiriman, pastikan endpoint Splunk HEC sudah beroperasi.
  2. Di Cloud Shell, ambil snapshot langganan yang belum diproses sebelum memproses ulang pesan dalam langganan ini. Snapshot mencegah hilangnya pesan jika terjadi error konfigurasi yang tidak terduga.

    gcloud pubsub snapshots create SNAPSHOT_NAME \
    --subscription=DEAD_LETTER_SUBSCRIPTION_NAME
    

    Ganti SNAPSHOT_NAME dengan nama yang memudahkan Anda mengidentifikasi snapshot, seperti dead-letter-snapshot-date+"%Y%m%d-%H%M%S.

  3. Gunakan template Pub/Sub ke Dataflow Splunk untuk membuat pipeline Pub/Sub ke Pub/Sub. Pipeline menggunakan tugas Dataflow lain untuk mentransfer pesan dari langganan yang belum diproses kembali ke topik input.

    DATAFLOW_INPUT_TOPIC="INPUT_TOPIC_NAME"
    DATAFLOW_DEADLETTER_SUB="DEAD_LETTER_SUBSCRIPTION_NAME"
    JOB_NAME=splunk-dataflow-replay-date +"%Y%m%d-%H%M%S"
    gcloud dataflow jobs run JOB_NAME \
    --gcs-location= gs://dataflow-templates/latest/Cloud_PubSub_to_Cloud_PubSub \
    --worker-machine-type=n1-standard-2 \
    --max-workers=1 \
    --region=REGION \
    --parameters \
    inputSubscription=projects/PROJECT_ID/subscriptions/DEAD_LETTER_SUBSCRIPTION_NAME,\
    outputTopic=projects/PROJECT_ID/topics/INPUT_TOPIC_NAME
    
  4. Salin ID tugas Dataflow dari output perintah dan simpan untuk nanti. Anda akan memasukkan ID tugas ini sebagai REPLAY_JOB_ID saat menghabiskan tugas Dataflow.

  5. Di Google Cloud Console, buka halaman Pub/Sub Subscriptions.

    Buka Langganan Pub/Sub

  6. Pilih langganan yang belum diproses. Pastikan grafik Jumlah pesan yang tidak dikonfirmasi diturunkan ke 0, seperti yang ditunjukkan pada screenshot berikut.

    Pesan gagal dikirim.

  7. Di Cloud Shell, selesaikan tugas Dataflow yang Anda buat:

    gcloud dataflow jobs drain REPLAY_JOB_ID --region=REGION
    

    Ganti REPLAY_JOB_ID dengan ID tugas Dataflow yang Anda simpan sebelumnya.

Saat pesan ditransfer kembali ke topik input asli, pipeline Dataflow utama akan otomatis mengambil pesan yang gagal dan mengirimkannya kembali ke Splunk.

Mengonfirmasi pesan di Splunk

  1. Untuk mengonfirmasi bahwa pesan telah dikirim ulang, di Splunk, buka Splunk Search & Reporting.

  2. Jalankan penelusuran untuk delivery_attempts > 1. Ini adalah kolom khusus yang ditambahkan oleh contoh UDF ke setiap peristiwa untuk melacak jumlah upaya pengiriman. Pastikan untuk memperluas rentang waktu penelusuran untuk menyertakan peristiwa yang mungkin telah terjadi di masa lalu, karena stempel waktu peristiwa adalah waktu asli pembuatan, bukan waktu pengindeksan.

Dalam screenshot berikut, dua pesan yang awalnya gagal kini berhasil dikirim dan diindeks di Splunk dengan stempel waktu yang benar.

Pesan gagal di Splunk.

Perhatikan bahwa nilai kolom insertId sama dengan nilai yang muncul dalam pesan yang gagal saat Anda melihat langganan yang belum diproses. Kolom insertId adalah ID unik yang ditetapkan Cloud Logging ke entri log asli. insertId juga muncul dalam isi pesan Pub/Sub.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus sink tingkat organisasi

  • Gunakan perintah berikut untuk menghapus sink log tingkat organisasi:
    gcloud logging sinks delete ORGANIZATION_SINK_NAME --organization=ORGANIZATION_ID
    

Menghapus project

Setelah sink log dihapus, Anda dapat melanjutkan penghapusan resource yang dibuat untuk menerima dan mengekspor log. Cara termudah adalah menghapus project yang Anda buat untuk arsitektur referensi.

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya