Pemberitahuan dan evaluasi 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

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 di-deploy secara otomatis sebagai bagian dari koleksi terkelola saat berjalan di cluster Kubernetes.

Anda dapat menulis aturan dan pemberitahuan pada metrik 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 Prometheus upstream. Aturan pemberitahuan dan perekaman yang ditentukan di Rules dicakup untuk project_id, cluster, dan namespace resource. Misalnya, aturan job:up:sum dalam resource di atas secara efektif membuat kueri sum without(instance) (up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"}). Jaminan ini memastikan bahwa aturan pemberitahuan atau perekaman tidak secara tidak sengaja mengevaluasi metrik dari aplikasi yang 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.13.0/examples/rules.yaml

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

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, dan 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 untuk memberikan jalur migrasi yang lancar guna menggabungkan aturan yang ada ke dalam evaluasi aturan terkelola. Anda dapat menyertakan aturan yang ada dalam resource Aturan. Misalnya, berikut 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 Managed Service for Prometheus di semua project dalam 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 dicakup dalam ruang nama 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 Managed Service for Prometheus, sebaiknya gunakan GlobalRules hanya untuk kasus penggunaan yang jarang terjadi saat pemberitahuan mungkin memerlukan data di semua cluster sekaligus. Untuk metrik setiap deployment, gunakan resource Rules atau ClusterRules untuk keandalan yang lebih tinggi dan untuk memastikan bahwa evaluasi tidak menyertakan data yang tidak diinginkan. Sebaiknya pertahankan label cluster dan namespace dalam hasil evaluasi aturan, kecuali jika tujuan aturan adalah menggabungkan label tersebut. Jika tidak, performa kueri mungkin menurun dan Anda mungkin mengalami batas kardinalitas. Sebaiknya jangan menghapus kedua label.

Evaluasi aturan multi-project dan global

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 di 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 di node) sehingga akun layanan dapat membaca dari project cakupan dan menulis ke semua project yang dipantau dalam cakupan metrik.

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

Pemberitahuan menggunakan metrik Cloud Monitoring

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

Mengonfigurasi aturan dan pemberitahuan menggunakan Terraform

Anda dapat mengotomatiskan pembuatan dan pengelolaan resource Rules, ClusterRules, dan GlobalRules menggunakan kubernetes_manifest jenis resource Terraform atau kubectl_manifest jenis resource Terraform, yang mana saja memungkinkan Anda menentukan resource kustom arbitrer.

Untuk informasi umum tentang penggunaan Google Cloud dengan Terraform, lihat Terraform dengan Google Cloud.

Memberikan kredensial secara eksplisit

Saat berjalan di GKE, evaluator aturan akan otomatis mengambil kredensial dari lingkungan berdasarkan akun layanan node. Di cluster Kubernetes non-GKE, kredensial harus disediakan 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:

    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 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 cetak tebal ke resource:

      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 pengumpulan terkelola berfungsi.

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

    Menskalakan evaluasi aturan

    Evaluator aturan berjalan sebagai Deployment replika tunggal dengan permintaan dan batas resource tetap. Anda mungkin melihat gangguan pada beban kerja, seperti OOMKilled saat mengevaluasi sejumlah besar aturan. Untuk mengurangi hal ini, Anda dapat men-deploy VerticalPodAutoscaler untuk menskalakan deployment secara vertikal. Pertama, pastikan Penskalaan Otomatis Pod Vertikal diaktifkan di cluster Kubernetes Anda. Kemudian, terapkan resource VerticalPodAutoscaler seperti berikut:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: rule-evaluator
      namespace: gmp-system
    spec:
      resourcePolicy:
        containerPolicies:
        - containerName: evaluator
          controlledResources:
            - memory
          maxAllowed:
            memory: 4Gi
          minAllowed:
            memory: 16Mi
          mode: Auto
      targetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: rule-evaluator
      updatePolicy:
        updateMode: Auto
    

    Anda dapat memverifikasi bahwa autoscaler berfungsi dengan memeriksa status autoscaler:

    kubectl get vpa --namespace gmp-system rule-evaluator
    

    Jika berfungsi, autoscaler akan melaporkan bahwa autoscaler telah menghitung rekomendasi resource untuk workload di kolom "PROVIDED":

    NAME             MODE   CPU   MEM        PROVIDED   AGE
    rule-evaluator   Auto   2m    11534336   True       30m
    

    Mengompresi konfigurasi

    Jika memiliki banyak resource Aturan, Anda mungkin kehabisan ruang ConfigMap. Untuk memperbaikinya, aktifkan kompresi gzip di resource OperatorConfig:

      apiVersion: monitoring.googleapis.com/v1
      kind: OperatorConfig
      metadata:
        namespace: gmp-public
        name: config
      features:
        config:
          compression: gzip
    

    Konfigurasi Alertmanager

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

    Alertmanager Terkelola

    Managed Service for Prometheus men-deploy instance Alertmanager terkelola, yang evaluator aturannya dikonfigurasi secara otomatis untuk meneruskan pemberitahuan. Secara default, konfigurasi ini ditetapkan dengan Secret Kubernetes yang diberi nama 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 Anda (lihat contoh template konfigurasi):

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

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

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

    Menyesuaikan nama Secret konfigurasi

    Alertmanager terkelola juga mendukung nama Secret kustom untuk memuat konfigurasi. Kemampuan ini berguna jika Anda memiliki beberapa Secret konfigurasi dan ingin instance Alertmanager beralih antar-konfigurasi yang sesuai. Misalnya, Anda mungkin ingin mengubah saluran notifikasi pemberitahuan berdasarkan rotasi shift piket, atau Anda mungkin ingin mengganti konfigurasi Alertmanager eksperimental untuk menguji rute pemberitahuan baru.

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

    1. Buat Secret dari file konfigurasi Alertmanager lokal Anda:

      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.

    Menyesuaikan URL eksternal

    Anda dapat mengonfigurasi URL eksternal untuk Alertmanager terkelola sehingga notifikasi pemberitahuan dapat memberikan link callback ke UI pemberitahuan Anda. Hal ini setara dengan menggunakan flag --web.external-url Prometheus Alertmanager upstream.

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    managedAlertmanager:
      externalURL: EXTERNAL_URL
    

    Alertmanager yang di-deploy sendiri

    Untuk mengonfigurasi evaluator aturan untuk Alertmanager yang di-deploy sendiri, lakukan hal berikut:

    1. Buka resource OperatorConfig untuk mengedit:

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

      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 Anda menyatakan 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. Bagian konfigurasi AlertmanagerEndpoints menyediakan opsi untuk konfigurasi otorisasi jika diperlukan.