Membuat kebijakan pemberitahuan dengan kondisi berbasis PromQL (API)

Halaman ini menjelaskan cara membuat kebijakan pemberitahuan dengan kondisi berbasis PromQL menggunakan Cloud Monitoring API. Anda dapat menggunakan kueri PromQL dalam kebijakan pemberitahuan untuk membuat kondisi kompleks dengan fitur seperti rasio, nilai minimum dinamis, dan evaluasi metrik.

Untuk informasi umum, lihat Kebijakan pemberitahuan dengan PromQL.

Jika Anda bekerja di lingkungan Prometheus di luar Cloud Monitoring dan memiliki aturan pemberitahuan Prometheus, Anda dapat menggunakan Google Cloud CLI untuk memigrasikannya ke kebijakan pemberitahuan Monitoring dengan kueri PromQL. Untuk informasi selengkapnya, lihat Memigrasikan aturan pemberitahuan dan penerima dari Prometheus.

Membuat kebijakan pemberitahuan dengan kueri PromQL

Anda menggunakan metode alertPolicies.create untuk membuat kebijakan pemberitahuan secara terprogram.

Satu-satunya perbedaan antara membuat kebijakan pemberitahuan dengan kondisi berbasis PromQL dan kebijakan pemberitahuan lainnya adalah jenis Condition harus PrometheusQueryLanguageCondition. Jenis kondisi ini memungkinkan kebijakan pemberitahuan ditentukan dengan PromQL.

Berikut ini menunjukkan kueri PromQL untuk kondisi kebijakan pemberitahuan yang menggunakan metrik dari eksportir kube-state untuk menemukan frekuensi penampung dimulai ulang dalam 30 menit terakhir:

rate(kube_pod_container_status_restarts[30m]) * 1800 > 1

Membuat kebijakan pemberitahuan

Untuk membuat kebijakan pemberitahuan dengan kondisi berbasis PromQL, gunakan jenis kondisi AlertPolicy PrometheusQueryLanguageCondition. PrometheusQueryLanguageCondition memiliki struktur berikut:

{
  "query": string,
  "duration": string,
  "evaluationInterval": string,
  "labels": {string: string},
  "ruleGroup": string,
  "alertRule": string
}

Kolom PrometheusQueryLanguageCondition memiliki definisi berikut:

  • query: Ekspresi PromQL yang akan dievaluasi. Setara dengan kolom expr dari aturan pemberitahuan Prometheus standar.
  • duration: Menentukan durasi waktu selama setiap evaluasi kueri harus menghasilkan nilai true sebelum kebijakan pemberitahuan dipicu. Nilai harus berupa jumlah menit, yang dinyatakan dalam detik; misalnya, 600s untuk durasi 10 menit. Untuk informasi selengkapnya, lihat Perilaku kebijakan pemberitahuan berbasis metrik.
  • evaluationInterval: Interval waktu, dalam detik, antara evaluasi PromQL kueri. Nilai default-nya adalah 30 detik. Jika PrometheusQueryLanguageCondition dibuat dengan memigrasikan aturan pemberitahuan Prometheus, nilai ini berasal dari grup aturan Prometheus yang berisi aturan pemberitahuan Prometheus.

  • labels: Cara opsional untuk menambahkan atau menimpa label dalam hasil ekspresi PromQL.

  • ruleGroup: Jika kebijakan pemberitahuan dimigrasikan dari file konfigurasi Prometheus, kolom ini akan berisi nilai kolom name dari grup aturan dalam file konfigurasi Prometheus. Kolom ini tidak diperlukan saat Anda membuat kebijakan pemberitahuan PromQL di Cloud Monitoring API.

  • alertRule: Jika kebijakan pemberitahuan dimigrasikan dari file konfigurasi Prometheus, kolom ini akan berisi nilai kolom alert dari aturan pemberitahuan dalam file konfigurasi Prometheus. Kolom ini tidak diperlukan saat Anda membuat kebijakan pemberitahuan PromQL di Cloud Monitoring API.

Misalnya, kondisi berikut menggunakan kueri PromQL untuk menemukan frekuensi penampung dimulai ulang dalam 30 menit terakhir:

"conditionPrometheusQueryLanguage": {
  "query": "rate(kube_pod_container_status_restarts[30m]) * 1800 > 1",
  "duration": "600s",
  evaluationInterval: "60s",
  "alertRule": "ContainerRestartCount",
  "labels": {
    "action_required":"true",
    "severity":"critical/warning/info"}
}

Gunakan struktur ini sebagai nilai kolom conditionPrometheusQueryLanguage dalam kondisi, yang kemudian disematkan dalam struktur kebijakan pemberitahuan. Untuk informasi selengkapnya tentang struktur ini, lihat AlertPolicy.

Berikut adalah kebijakan lengkap dengan kondisi PrometheusQueryLanguageCondition dalam JSON:

{
  "displayName": "Container Restarts",
  "documentation": {
    "content": "Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes.",
    "mimeType": "text/markdown",
    "subject": "Container ${resource.label.container_name} in Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes."
  },
  "userLabels": {},
  "conditions": [
    {
      "displayName": "Container has restarted",
      "conditionPrometheusQueryLanguage": {
        "query": "rate(kubernetes_io:container_restart_count[30m]) * 1800",
        "duration": "600s",
        evaluationInterval: "60s",
        "alertRule": "ContainerRestart",
        "labels": {
          "action_required":"true",
          "severity":"critical/warning/info"}
      }
    }
  ],
  "combiner": "OR",
  "enabled": true
}

Membuat kebijakan pemberitahuan

Untuk membuat kebijakan pemberitahuan, masukkan JSON kebijakan pemberitahuan ke dalam file yang disebut POLICY_NAME.json, lalu jalankan perintah berikut:

curl -d @POLICY_NAME.json -H "Authorization: Bearer $TOKEN"
-H 'Content-Type: application/json'
-X POST https://monitoring.googleapis.com/v3/projects/${PROJECT}/alertPolicies

Untuk informasi selengkapnya tentang Monitoring API untuk kebijakan pemberitahuan, lihat Mengelola kebijakan pemberitahuan melalui API.

Untuk informasi selengkapnya tentang penggunaan curl, lihat Memanggil curl.

Menggunakan Terraform

Untuk petunjuk cara mengonfigurasi kebijakan pemberitahuan berbasis PromQL menggunakan Terraform, lihat bagian condition_prometheus_query_language di registry Terraform google_monitoring_alert_policy.

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

Memanggil curl

Setiap pemanggilan curl menyertakan kumpulan argumen, diikuti dengan URL resource API. Argumen umum mencakup project ID Google Cloud dan token autentikasi. Nilai ini diwakili di sini oleh variabel lingkungan PROJECT_ID dan TOKEN.

Anda mungkin juga harus menentukan argumen lain, misalnya, untuk menentukan jenis permintaan HTTP (misalnya, -X DELETE). Permintaan default adalah GET, sehingga contoh tidak menentukannya.

Setiap pemanggilan curl memiliki struktur umum ini:

curl --http1.1 --header "Authorization: Bearer ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>

Untuk menggunakan curl, Anda harus menentukan project ID dan token akses. Untuk mengurangi pengetikan dan error, Anda dapat memasukkannya ke dalam variabel lingkungan dengan meneruskannya ke curl dengan cara tersebut.

Untuk menetapkan variabel ini, lakukan hal berikut:

  1. Buat variabel lingkungan untuk menyimpan ID project cakupan cakupan metrik Anda. Langkah-langkah ini memanggil variabel PROJECT_ID:

    PROJECT_ID=a-sample-project
    
  2. Lakukan autentikasi ke Google Cloud CLI:

    gcloud auth login
    
  3. Opsional. Agar tidak perlu menentukan project ID dengan setiap perintah gcloud, tetapkan project ID sebagai default menggunakan gcloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. Buat token otorisasi dan tangkap dalam variabel lingkungan. Langkah-langkah ini memanggil variabel TOKEN:

    TOKEN=`gcloud auth print-access-token`
    

    Anda harus memperbarui token akses secara berkala. Jika perintah yang berfungsi tiba-tiba melaporkan bahwa Anda tidak diautentikasi, terbitkan ulang perintah ini.

  5. Untuk memverifikasi bahwa Anda mendapatkan token akses, tampilkan variabel TOKEN:

    echo ${TOKEN}
    ya29.GluiBj8o....