Pemberitahuan dan evaluasi aturan yang di-deploy sendiri

Google Cloud Managed Service for Prometheus mendukung evaluasi aturan dan pemberitahuan 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 menjalankan aturan dan pemberitahuan terhadap datastore global.

Evaluasi aturan untuk pengumpulan data 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, jendela kueri maksimum untuk aturan dibatasi oleh durasi server menyimpan data lokal.

Sebagian besar aturan hanya dijalankan 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 berguna untuk dapat mengevaluasi aturan terhadap backend metrik global, misalnya, saat semua data untuk suatu aturan tidak ditempatkan bersama di 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:

  • Konfigurasi alat command line sebagai berikut:

    • Konfigurasi gcloud CLI untuk merujuk ke ID projectGoogle Cloud Anda:

      gcloud config set project PROJECT_ID
      
    • Jika berjalan di GKE, gunakan gcloud CLI untuk menyetel cluster Anda:

      gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
      
    • Jika tidak, gunakan CLI kubectl untuk menyetel cluster Anda:

      kubectl config set-cluster CLUSTER_NAME
      

    Untuk mengetahui informasi selengkapnya tentang alat ini, lihat artikel 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

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

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.

Mengonfigurasi akun layanan untuk Workload Identity Federation for GKE

Jika cluster Kubernetes Anda tidak mengaktifkan Workload Identity Federation for GKE, Anda dapat melewati bagian ini.

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

Buat dan ikat 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. Lanjutkan ke Melakukan otorisasi akun layanan.

Pertama, buat akun layanan jika Anda belum melakukannya:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create gmp-test-sa

Kemudian, gunakan urutan perintah berikut untuk mengikat akun layanangmp-test-sa ke akun layanan Kubernetes default di namespace NAMESPACE_NAME:

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

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

Memberikan otorisasi 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 Anda telah memberikan peran tertentu kepada Google Cloud akun layanan 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.iam.gserviceaccount.com \
  --role=roles/monitoring.viewer \
  --condition=None \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID\
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.metricWriter \
  --condition=None \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/iam.serviceAccountTokenCreator \
  --condition=None

Men-debug konfigurasi Workload Identity Federation for GKE

Jika Anda mengalami masalah saat mengaktifkan Workload Identity Federation for GKE, lihat dokumentasi tentang memverifikasi penyiapan Workload Identity Federation for GKE dan panduan pemecahan masalah Workload Identity Federation for GKE.

Karena kesalahan ketik dan salin tempel sebagian adalah sumber kesalahan paling umum saat mengonfigurasi Workload Identity Federation untuk GKE, kami sangat merekomendasikan penggunaan 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 memberikan semua izin yang diperlukan kepada akun layanan Google Clouduntuk 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 mengetahui informasi selengkapnya tentang cara mengonfigurasi akun layanan untuk pengelolaan workload identity, lihat Menggunakan Workload Identity Federation untuk GKE.

Men-deploy evaluator aturan mandiri

Evaluator aturan Managed Service for Prometheus mengevaluasi aturan pemberitahuan dan pengumpulan data Prometheus terhadap HTTP API Managed Service for Prometheus dan menulis hasilnya kembali ke Monarch. Alat ini menerima format file konfigurasi dan format file aturan yang sama dengan Prometheus. Flag-nya 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.15.3/manifests/rule-evaluator.yaml
    
  2. Pastikan pod untuk rule-evaluator 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 Anda memverifikasi bahwa rule-evaluator berhasil di-deploy, Anda dapat melakukan penyesuaian pada manifes yang diinstal untuk melakukan hal berikut:

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

Jika Alertmanager Anda berada di cluster yang berbeda dengan rule-evaluator, Anda mungkin perlu menyiapkan resource Endpoints. Misalnya, jika OperatorConfig Anda menentukan bahwa endpoint Alertmanager dapat ditemukan di objek Endpoints ns=alertmanager/name=alertmanager, maka 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, rule-evaluator 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 rule-evaluator menggunakan flag atau variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS.

  1. Tetapkan konteks ke project target Anda:

    gcloud config set project PROJECT_ID
    
  2. Membuat akun layanan:

    gcloud iam service-accounts create gmp-test-sa
    

    Langkah ini membuat akun layanan yang mungkin telah 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.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 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 rule-evaluator untuk mengedit:

    kubectl -n NAMESPACE_NAME edit deploy rule-evaluator
    
    1. Tambahkan teks yang ditampilkan dalam huruf 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, alih-alih menggunakan tanda yang ditetapkan dalam contoh ini, Anda dapat menetapkan jalur file kunci menggunakan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS.

    Evaluasi aturan global dan multi-project

    Sebaiknya jalankan satu instance evaluator aturan di setiap Google Cloud project dan region, bukan menjalankan satu instance yang mengevaluasi 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 projectGoogle Cloud yang terkait dengan cluster, yang akan dideteksinya secara otomatis. 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 Anda, maka aturan Anda akan dievaluasi secara global. Untuk mengetahui 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 sehingga label project_id, location, cluster, dan namespace dipertahankan dengan tepat untuk tingkat agregasinya. Jika tidak, performa kueri dapat menurun dan Anda dapat mengalami batas kardinalitas.

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

    Kemampuan observasi mandiri

    Evaluator aturan memancarkan 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 mengumpulkan metrik ini sehingga Anda dapat melihat performa evaluator aturan.

    Deployment ketersediaan tinggi

    Evaluator aturan dapat berjalan dalam penyiapan dengan ketersediaan tinggi 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 Google Cloud metrik sistem menggunakan PromQL. Untuk mengetahui petunjuk cara membuat kueri yang valid, lihat PromQL untuk metrik Cloud Monitoring.