Evaluasi dan pemberitahuan aturan terkelola

Google Cloud Managed Service for Prometheus mendukung evaluasi dan pemberitahuan aturan yang kompatibel dengan Prometheus. Dokumen ini menjelaskan cara menyiapkan evaluasi aturan terkelola.

Evaluasi aturan

Google Cloud Managed Service for Prometheus menyediakan komponen evaluator aturan yang memungkinkan Anda menulis aturan dengan aman dalam konteks backend Prometheus global, sehingga mencegah Anda mengganggu data pengguna lain di organisasi yang lebih besar. Komponen ini secara otomatis di-deploy sebagai bagian dari koleksi terkelola saat berjalan di cluster Kubernetes.

Anda dapat menulis aturan dan pemberitahuan pada metrik Google Cloud Managed Service for Prometheus dan metrik Cloud Monitoring. Anda harus menggunakan resource GlobalRules saat menulis aturan untuk metrik Cloud Monitoring.

Aturan

Evaluasi aturan terkelola menggunakan resource Aturan untuk mengonfigurasi aturan perekaman dan pemberitahuan. Berikut adalah contoh resource Aturan:

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  namespace: NAMESPACE_NAME
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

Format elemen .spec.groups identik dengan array rule_group upstream Prometheus. Aturan pemberitahuan dan pencatatan yang ditentukan dalam Rules dicakupkan ke project_id, cluster, dan namespace resource. Misalnya, aturan job:up:sum dalam resource di atas secara efektif mengkueri sum without(instance) (up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"}). Jaminan ini memastikan bahwa aturan pemberitahuan atau pencatatan tidak mengevaluasi metrik secara tidak sengaja dari aplikasi yang bahkan mungkin tidak Anda ketahui.

Untuk menerapkan contoh aturan ke cluster Anda, jalankan perintah berikut:

kubectl apply -n NAMESPACE_NAME -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.8.2/examples/rules.yaml

Setelah beberapa menit, metrik job:up:sum akan tersedia. Notifikasi AlwaysFiring juga mulai diaktifkan. Untuk mengetahui informasi tentang cara mengirim pemberitahuan ke Alertmanager, lihat Konfigurasi Alerts.

Resource ClusterRules dan GlobalRules menyediakan antarmuka yang sama dengan resource Rules, tetapi menerapkan aturan ke cakupan yang lebih luas. ClusterRules memilih data menggunakan label project_id dan cluster, lalu GlobalRules memilih semua data dalam cakupan metrik yang dikueri tanpa membatasi label.

Untuk dokumentasi referensi tentang semua resource kustom Managed Service for Prometheus, lihat referensi prometheus-engine/doc/api.

Mengonversi dari aturan Prometheus ke Aturan

Resource Aturan menyediakan antarmuka yang kompatibel dengan aturan Prometheus guna menyediakan jalur migrasi yang lancar untuk menggabungkan aturan yang sudah ada ke dalam evaluasi aturan terkelola. Anda dapat menyertakan aturan yang sudah ada dalam resource Aturan. Misalnya, berikut ini adalah aturan Prometheus:

groups:
- name: example
  interval: 30s
  rules:
  - record: job:up:sum
    expr: sum without(instance) (up)
  - alert: AlwaysFiring
    expr: vector(1)

Resource Aturan yang sesuai, dengan aturan Prometheus asli dalam huruf tebal, adalah sebagai berikut:

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  namespace: NAMESPACE_NAME
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

ClusterRules

Anda dapat menggunakan resource ClusterRules untuk mengonfigurasi aturan perekaman dan pemberitahuan yang dapat mengevaluasi semua deret waktu yang dikirim ke Managed Service for Prometheus dari semua namespace di cluster tertentu. Spesifikasinya sama dengan Rules. Contoh aturan Prometheus sebelumnya menjadi resource ClusterRules berikut:

apiVersion: monitoring.googleapis.com/v1
kind: ClusterRules
metadata:
  name: example-clusterrules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

Sebaiknya gunakan resource ClusterRules hanya pada metrik horizontal, seperti yang dihasilkan oleh mesh layanan. Untuk metrik setiap deployment, gunakan resource Aturan untuk memastikan bahwa evaluasi tidak menyertakan data yang tidak diinginkan.

GlobalRules

Anda dapat menggunakan resource GlobalRules untuk mengonfigurasi aturan perekaman dan pemberitahuan yang dapat mengevaluasi semua deret waktu yang dikirim ke Google Cloud Managed Service for Prometheus di seluruh project dalam sebuah cakupan metrik. Spesifikasinya sama dengan Rules. Contoh aturan Prometheus sebelumnya menjadi resource GlobalRules berikut:

apiVersion: monitoring.googleapis.com/v1
kind: GlobalRules
metadata:
  name: example-globalrules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

Karena metrik Cloud Monitoring tidak dicakupkan ke namespace atau cluster, Anda harus menggunakan resource GlobalRules saat menulis aturan atau pemberitahuan untuk metrik Cloud Monitoring. Penggunaan GlobalRules juga diperlukan saat memberikan pemberitahuan tentang metrik sistem Google Kubernetes Engine.

Jika aturan Anda tidak mempertahankan label project_id atau location, label tersebut akan ditetapkan secara default ke nilai cluster.

Untuk metrik Google Cloud Managed Service for Prometheus, sebaiknya gunakan GlobalRules hanya untuk kasus penggunaan yang jarang terjadi ketika pemberitahuan mungkin memerlukan data di semua cluster sekaligus. Untuk metrik setiap deployment, gunakan resource Aturan atau ClusterRules untuk keandalan yang lebih tinggi dan untuk memastikan evaluasi tidak menyertakan data yang tidak diinginkan. Sebaiknya pertahankan label cluster dan namespace dalam hasil evaluasi aturan kecuali jika tujuan aturan tersebut adalah untuk menggabungkan label-label tersebut. Jika tidak, performa kueri dapat menurun dan Anda mungkin akan mencapai batas kardinalitas. Sangat tidak disarankan untuk menghapus kedua label.

Evaluasi aturan global dan multi-project

Saat di-deploy di Google Kubernetes Engine, evaluator aturan menggunakan project Google Cloud yang terkait dengan cluster, yang otomatis terdeteksi oleh evaluator aturan. Untuk mengevaluasi aturan yang mencakup project, Anda harus mengonfigurasi evaluator aturan yang menjalankan resource GlobalRules untuk menggunakan project dengan cakupan metrik multi-project. Anda dapat melakukannya dengan dua cara:

  • Tempatkan resource GlobalRules Anda dalam project yang memiliki cakupan metrik multi-project.
  • Tetapkan kolom queryProjectID dalam OperatorConfig untuk menggunakan project dengan cakupan metrik multi-project.

Anda juga harus memperbarui izin akun layanan yang digunakan oleh evaluator aturan (yang biasanya merupakan akun layanan default pada node) agar akun layanan dapat membaca dari project pencakupan dan menulis ke semua project yang dipantau dalam cakupan metrik.

Jika cakupan metrik berisi semua project Anda, aturan Anda akan dievaluasi secara global. Untuk mengetahui informasi selengkapnya, lihat Cakupan Metrik.

Pemberitahuan menggunakan metrik Cloud Monitoring

Anda dapat menggunakan resource GlobalRules untuk memberi tahu tentang metrik sistem Google Cloud menggunakan PromQL. Untuk mengetahui petunjuk cara membuat kueri yang valid, lihat MQL untuk metrik Cloud Monitoring.

Mengonfigurasi aturan dan pemberitahuan menggunakan Terraform

Anda dapat mengotomatiskan pembuatan dan pengelolaan resource Aturan, ClusterRules, dan GlobalRules dengan menggunakan jenis resource Terraform kubernetes_manifest atau jenis resource Terraform kubectl_manifest. Anda juga dapat menentukan resource kustom arbitrer.

Untuk mengetahui informasi umum tentang penggunaan Google Cloud dengan Terraform, baca artikel Terraform dengan Google Cloud.

Memberikan kredensial secara eksplisit

Saat berjalan di GKE, evaluator aturan akan otomatis mengambil kredensial dari lingkungan berdasarkan akun layanan node tersebut. Dalam cluster Kubernetes non-GKE, kredensial harus diberikan secara eksplisit melalui resource OperatorConfig di namespace gmp-public.

  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
    

  3. Berikan izin yang diperlukan ke akun layanan tersebut:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --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.iam.gserviceaccount.com
    
  5. Tambahkan file kunci sebagai rahasia ke cluster non-GKE Anda:

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

  6. Buka resource OperatorConfig untuk mengedit:

    kubectl -n gmp-public edit operatorconfig config
    
    1. Tambahkan teks yang ditampilkan dalam huruf tebal ke referensi:

      apiVersion: monitoring.googleapis.com/v1
      kind: OperatorConfig
      metadata:
        namespace: gmp-public
        name: config
      rules:
        credentials:
          name: gmp-test-sa
          key: key.json
      
      Pastikan Anda juga menambahkan kredensial ini ke bagian collection agar koleksi terkelola berfungsi.

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

    Konfigurasi Alertmanager

    Anda dapat menggunakan resource OperatorConfig untuk mengonfigurasi evaluator aturan terkelola untuk mengirim pemberitahuan ke Alertmanager Prometheus. Anda dapat mengirim pemberitahuan ke Alertmanager terkelola yang di-deploy secara otomatis selain Alertmanager yang di-deploy sendiri.

    Pengelola Notifikasi Terkelola

    Managed Service for Prometheus men-deploy instance Alertmanager terkelola, yang menjadi tujuan konfigurasi evaluator aturan secara otomatis untuk meneruskan pemberitahuan. Secara default, konfigurasi ini disetel dengan Secret Kubernetes bernama khusus yang berisi file konfigurasi Alertmanager.

    Untuk mengaktifkan dan mengonfigurasi pelaporan ke instance Alertmanager yang di-deploy, lakukan hal berikut:

    1. Buat file konfigurasi lokal yang berisi setelan Alertmanager (lihat contoh template konfigurasi):

      touch alertmanager.yaml
      
    2. Perbarui file dengan setelan Alertmanager yang Anda inginkan dan buat Secret bernama alertmanager dalam namespace gmp-public:

      kubectl create secret generic alertmanager \
        -n gmp-public \
        --from-file=alertmanager.yaml
      

    Setelah beberapa saat, Google Cloud Managed Service for Prometheus akan mengambil konfigurasi baru Secret dan mengaktifkan Alertmanager terkelola dengan setelan Anda.

    Menyesuaikan nama Secret konfigurasi

    Alertmanager terkelola juga mendukung nama Secret kustom untuk memuat konfigurasi. Kemampuan ini berguna saat Anda memiliki beberapa Secret konfigurasi dan Anda ingin instance Alertmanager beralih di antara konfigurasi yang sesuai. Misalnya, Anda mungkin ingin mengubah saluran notifikasi pemberitahuan berdasarkan shift on-call yang dirotasi, atau Anda ingin menukar konfigurasi Alertmanager eksperimental untuk menguji rute pemberitahuan baru.

    Untuk menentukan nama Secret non-default dengan menggunakan resource OperatorConfig, lakukan hal berikut:

    1. Buat Secret dari file konfigurasi Alertmanager lokal:

      kubectl create secret generic SECRET_NAME \
        -n gmp-public \
        --from-file=FILE_NAME
      
    2. Buka resource OperatorConfig untuk mengedit:

      kubectl -n gmp-public edit operatorconfig config
      
    3. Untuk mengaktifkan pelaporan Alertmanager terkelola, edit resource dengan mengubah bagian managedAlertmanager seperti yang ditunjukkan dalam teks tebal berikut:

      apiVersion: monitoring.googleapis.com/v1
      kind: OperatorConfig
      metadata:
        namespace: gmp-public
        name: config
      managedAlertmanager:
        configSecret:
          name: SECRET_NAME
          key: FILE_NAME
      

    Jika perlu melakukan perubahan pada konfigurasi Alertmanager, Anda dapat mengedit konfigurasi untuk Alertmanager ini dengan memperbarui Secret yang Anda buat sebelumnya.

    Alertmanager yang di-deploy sendiri

    Untuk mengonfigurasi evaluator aturan bagi Alertmanager yang di-deploy sendiri, lakukan tindakan berikut:

    1. Buka resource OperatorConfig untuk mengedit:

      kubectl -n gmp-public edit operatorconfig config
      
    2. Konfigurasi resource untuk mengirim pemberitahuan ke layanan Alertmanager:

      apiVersion: monitoring.googleapis.com/v1
      kind: OperatorConfig
      metadata:
        namespace: gmp-public
        name: config
      rules:
        alerting:
          alertmanagers:
          - name: SERVICE_NAME
            namespace: SERVICE_NAMESPACE
            port: PORT_NAME
      

    Jika Alertmanager berada di cluster yang berbeda dengan evaluator aturan, Anda mungkin perlu menyiapkan Resource endpoint. Misalnya, jika OperatorConfig menyatakan bahwa endpoint Alertmanager dapat ditemukan di objek Endpoint ns=alertmanager/name=alertmanager, Anda dapat membuat objek ini sendiri secara manual atau terprogram dan mengisinya dengan IP yang dapat dijangkau dari cluster lain. Bagian konfigurasi AlertsmanagerEndpoints menyediakan opsi untuk konfigurasi otorisasi jika diperlukan.