Pemberitahuan dan evaluasi aturan yang di-deploy sendiri

Google Cloud Managed Service for Prometheus mendukung evaluasi dan pemberitahuan aturan yang kompatibel dengan Prometheus. Dokumen ini menjelaskan cara menyiapkan evaluasi aturan yang di-deploy sendiri, termasuk komponen evaluator aturan mandiri.

Anda hanya perlu mengikuti petunjuk ini jika ingin mengeksekusi aturan dan pemberitahuan terhadap datastore global.

Evaluasi aturan untuk koleksi yang di-deploy sendiri

Setelah men-deploy Managed Service for Prometheus, Anda dapat terus mengevaluasi aturan secara lokal di setiap instance yang di-deploy menggunakan kolom rule_files dari file konfigurasi Prometheus. Namun, periode kueri maksimum untuk aturan tersebut dibatasi oleh berapa lama server menyimpan data lokal.

Sebagian besar aturan hanya dieksekusi selama beberapa menit terakhir data, sehingga menjalankan aturan di setiap server lokal sering kali merupakan strategi yang valid. Dalam hal ini, tidak diperlukan penyiapan lebih lanjut.

Namun, terkadang ada baiknya untuk dapat mengevaluasi aturan terhadap backend metrik global, misalnya, saat semua data untuk aturan tidak berada di lokasi yang sama pada instance Prometheus tertentu. Untuk kasus ini, Managed Service for Prometheus juga menyediakan komponen evaluator aturan.

Sebelum memulai

Bagian ini menjelaskan konfigurasi yang diperlukan untuk tugas yang dijelaskan dalam dokumen ini.

Mengonfigurasi lingkungan Anda

Agar tidak perlu memasukkan project ID atau nama cluster berulang kali, lakukan konfigurasi berikut:

  • Konfigurasikan alat command line sebagai berikut:

    • Konfigurasikan gcloud CLI untuk merujuk ke ID project Google Cloud Anda:

      gcloud config set project PROJECT_ID
      
    • Konfigurasikan kubectl CLI untuk menggunakan cluster Anda:

      kubectl config set-cluster CLUSTER_NAME
      

    Untuk informasi selengkapnya tentang alat ini, lihat referensi berikut:

Menyiapkan namespace

Buat namespace Kubernetes NAMESPACE_NAME untuk resource yang Anda buat sebagai bagian dari aplikasi contoh:

kubectl create ns NAMESPACE_NAME

Memverifikasi kredensial akun layanan

Anda dapat melewati bagian ini jika cluster Kubernetes Anda telah mengaktifkan Workload Identity Federation for GKE.

Saat berjalan di GKE, Managed Service for Prometheus akan otomatis mengambil kredensial dari lingkungan berdasarkan akun layanan default Compute Engine. Akun layanan default memiliki izin yang diperlukan, monitoring.metricWriter dan monitoring.viewer, secara default. Jika Anda tidak menggunakan Workload Identity Federation untuk GKE, dan sebelumnya telah menghapus salah satu peran tersebut dari akun layanan node default, Anda harus menambahkan kembali izin yang hilang tersebut sebelum melanjutkan.

Jika Anda tidak menjalankannya di GKE, lihat Memberikan kredensial secara eksplisit.

Mengonfigurasi akun layanan untuk Workload Identity Federation for GKE

Anda dapat melewati bagian ini jika cluster Kubernetes Anda tidak mengaktifkan Workload Identity Federation untuk GKE.

Managed Service for Prometheus mengambil data metrik menggunakan Cloud Monitoring API. Jika cluster Anda menggunakan Workload Identity Federation untuk GKE, Anda harus memberikan izin akun layanan Kubernetes ke Monitoring API. Bagian ini menjelaskan hal berikut:

Membuat dan mengikat akun layanan

Langkah ini muncul di beberapa tempat dalam dokumentasi Managed Service for Prometheus. Jika Anda telah melakukan langkah ini sebagai bagian dari tugas sebelumnya, Anda tidak perlu mengulanginya. Langsung ke Memberikan otorisasi ke akun layanan.

Urutan perintah berikut membuat akun layanan gmp-test-sa dan mengikatnya ke akun layanan Kubernetes default di namespace NAMESPACE_NAME:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create gmp-test-sa \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE_NAME/default]" \
  gmp-test-sa@PROJECT_ID. \
&&
kubectl annotate serviceaccount \
  --namespace NAMESPACE_NAME \
  default \
  iam.gke.io/gcp-service-account=gmp-test-sa@PROJECT_ID.

Jika Anda menggunakan namespace atau akun layanan GKE yang berbeda, sesuaikan perintah dengan tepat.

Memberikan otorisasi ke akun layanan

Grup izin terkait dikumpulkan ke dalam peran, dan Anda memberikan peran tersebut kepada akun utama, dalam contoh ini, akun layanan Google Cloud. Untuk mengetahui informasi selengkapnya tentang peran Monitoring, lihat Kontrol akses.

Perintah berikut memberikan peran Monitoring API yang diperlukan akun layanan Google Cloud, gmp-test-sa, untuk membaca dan menulis data metrik.

Jika telah memberikan peran tertentu kepada akun layanan Google Cloud sebagai bagian dari tugas sebelumnya, Anda tidak perlu melakukannya lagi.

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:gmp-test-sa@PROJECT_ID. \
  --role=roles/monitoring.viewer \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID\
  --member=serviceAccount:gmp-test-sa@PROJECT_ID. \
  --role=roles/monitoring.metricWriter

Men-debug konfigurasi Workload Identity Federation for GKE

Jika Anda mengalami masalah saat membuat Workload Identity Federation for GKE berfungsi, lihat dokumentasi untuk memverifikasi penyiapan Workload Identity Federation for GKE dan panduan pemecahan masalah Workload Identity Federation for GKE.

Karena kesalahan ketik dan penyalinan sebagian adalah sumber error paling umum saat mengonfigurasi Workload Identity Federation untuk GKE, sebaiknya gunakan variabel yang dapat diedit dan ikon salin-tempel yang dapat diklik yang disematkan dalam contoh kode dalam petunjuk ini.

Workload Identity Federation for GKE di lingkungan produksi

Contoh yang dijelaskan dalam dokumen ini mengikat akun layanan Google Cloud ke akun layanan Kubernetes default dan memberi akun layanan Google Cloud semua izin yang diperlukan untuk menggunakan Monitoring API.

Dalam lingkungan produksi, Anda mungkin ingin menggunakan pendekatan yang lebih terperinci, dengan akun layanan untuk setiap komponen, masing-masing dengan izin minimal. Untuk informasi selengkapnya tentang cara mengonfigurasi akun layanan untuk pengelolaan identitas beban kerja, lihat Menggunakan Workload Identity Federation untuk GKE.

Men-deploy evaluator aturan mandiri

Evaluator aturan Managed Service for Prometheus mengevaluasi aturan pemberitahuan dan perekaman Prometheus terhadap HTTP API Managed Service for Prometheus dan menulis hasilnya kembali ke Monarch. Prometheus menerima format file konfigurasi dan format file aturan yang sama dengan Prometheus. Tanda-tandanya juga sebagian besar identik.

  1. Buat contoh deployment evaluator aturan yang telah dikonfigurasi sebelumnya untuk mengevaluasi aturan pemberitahuan dan perekaman:

    kubectl apply -n NAMESPACE_NAME -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/manifests/rule-evaluator.yaml
    
  2. Pastikan bahwa pod untuk evaluator aturan berhasil di-deploy:

    kubectl -n NAMESPACE_NAME get pod
    

    Jika deployment berhasil, Anda akan melihat output yang mirip dengan berikut:

    NAME                              READY   STATUS    RESTARTS   AGE
    ...
    rule-evaluator-64475b696c-95z29   2/2     Running   0          1m
    

Setelah memverifikasi bahwa evaluator aturan berhasil di-deploy, Anda dapat melakukan penyesuaian pada manifes yang diinstal untuk melakukan hal berikut:

  • Tambahkan file aturan kustom Anda.
  • Konfigurasikan evaluator aturan untuk mengirim pemberitahuan ke Alertmanager Prometheus yang di-deploy sendiri menggunakan kolom alertmanager_config dari file konfigurasi.

Jika Alertmanager berada di cluster yang berbeda dengan evaluator aturan, Anda mungkin perlu menyiapkan Resource endpoint. Misalnya, jika OperatorConfig Anda menentukan bahwa endpoint Alertmanager dapat ditemukan di objek Endpoints ns=alertmanager/name=alertmanager, Anda dapat membuat objek ini secara manual atau terprogram sendiri dan mengisinya dengan IP yang dapat dijangkau dari cluster lain.

Memberikan kredensial secara eksplisit

Saat berjalan di GKE, evaluator aturan akan otomatis mengambil kredensial dari lingkungan berdasarkan akun layanan node atau penyiapan Workload Identity Federation for GKE. Di cluster Kubernetes non-GKE, kredensial harus diberikan secara eksplisit ke evaluator aturan menggunakan flag atau variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS.

  1. Tetapkan konteks ke project target Anda:

    gcloud config set project PROJECT_ID
    
  2. Buat akun layanan:

    gcloud iam service-accounts create gmp-test-sa
    

    Langkah ini akan membuat akun layanan yang mungkin sudah Anda buat di petunjuk Workload Identity Federation untuk GKE.

  3. Berikan izin yang diperlukan ke akun layanan:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID. \
      --role=roles/monitoring.viewer \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID. \
      --role=roles/monitoring.metricWriter
    

  4. Buat dan download kunci untuk akun layanan:

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.
    
  5. Tambahkan file kunci sebagai secret ke cluster non-GKE Anda:

    kubectl -n NAMESPACE_NAME create secret generic gmp-test-sa \
      --from-file=key.json=gmp-test-sa-key.json
    

  6. Buka resource Deployment evaluator aturan untuk mengedit:

    kubectl -n NAMESPACE_NAME edit deploy rule-evaluator
    
    1. Tambahkan teks yang ditampilkan dalam cetak tebal ke resource:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        namespace: NAMESPACE_NAME
        name: rule-evaluator
      spec:
        template
          containers:
          - name: evaluator
            args:
            - --query.credentials-file=/gmp/key.json
            - --export.credentials-file=/gmp/key.json
      ...
            volumeMounts:
            - name: gmp-sa
              mountPath: /gmp
              readOnly: true
      ...
          volumes:
          - name: gmp-sa
            secret:
              secretName: gmp-test-sa
      ...
      

    2. Simpan file dan tutup editor. Setelah perubahan diterapkan, pod akan dibuat ulang dan mulai mengautentikasi ke backend metrik dengan akun layanan yang diberikan.

    Atau, daripada menggunakan tanda yang ditetapkan dalam contoh ini, Anda dapat menetapkan jalur file kunci menggunakan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS.

    Evaluasi aturan multi-project dan global

    Sebaiknya jalankan satu instance evaluator aturan di setiap project dan region Google Cloud, bukan menjalankan satu instance yang dievaluasi terhadap banyak project dan region. Namun, kami mendukung evaluasi aturan multi-project untuk skenario yang memerlukannya.

    Saat di-deploy di Google Kubernetes Engine, evaluator aturan menggunakan project Google Cloud yang terkait dengan cluster, yang otomatis dideteksi. Untuk mengevaluasi aturan yang mencakup project, Anda dapat mengganti project yang dikueri dengan menggunakan flag --query.project-id dan menentukan project dengan cakupan metrik multi-project. Jika cakupan metrik Anda berisi semua project, aturan Anda akan dievaluasi secara global. Untuk informasi selengkapnya, lihat Cakupan metrik.

    Anda juga harus memperbarui izin akun layanan yang digunakan oleh evaluator aturan sehingga akun layanan dapat membaca dari project cakupan dan menulis ke semua project yang dipantau dalam cakupan metrik.

    Mempertahankan label saat menulis aturan

    Untuk data yang ditulis kembali oleh evaluator ke Managed Service for Prometheus, evaluator mendukung flag --export.* dan konfigurasi berbasis external_labels yang sama dengan biner server Managed Service for Prometheus. Sebaiknya tulis aturan agar label project_id, location, cluster, dan namespace dipertahankan dengan tepat untuk tingkat agregasinya. Jika tidak, performa kueri dapat menurun dan Anda mungkin mengalami batas kardinalitas.

    Label project_id atau location wajib diisi. Jika label ini tidak ada, nilai dalam hasil evaluasi aturan akan ditetapkan berdasarkan konfigurasi evaluator aturan. Label cluster atau namespace yang tidak ada tidak akan diberi nilai.

    Kemampuan observasi mandiri

    Evaluator aturan memunculkan metrik Prometheus di port yang dapat dikonfigurasi menggunakan flag --web.listen-address.

    Misalnya, jika pod rule-evaluator-64475b696c-95z29 mengekspos metrik ini di port 9092, metrik dapat dilihat secara manual menggunakan kubectl:

    # Port forward the metrics endpoint.
    kubectl port-forward rule-evaluator-64475b696c-95z29 9092
    # Then query in a separate terminal.
    curl localhost:9092/metrics
    

    Anda dapat mengonfigurasi stack Prometheus untuk mengumpulkannya sehingga Anda memiliki visibilitas terhadap performa evaluator aturan.

    Deployment ketersediaan tinggi

    Evaluator aturan dapat berjalan dalam penyiapan yang sangat tersedia dengan mengikuti pendekatan yang sama seperti yang didokumentasikan untuk server Prometheus.

    Pemberitahuan menggunakan metrik Cloud Monitoring

    Anda dapat mengonfigurasi evaluator aturan untuk memberikan pemberitahuan tentang metrik sistem Google Cloud menggunakan PromQL. Untuk mengetahui petunjuk cara membuat kueri yang valid, lihat PromQL untuk metrik Cloud Monitoring.