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 mengetahui 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 mengetahui informasi selengkapnya, lihat Memigrasikan aturan dan penerima pemberitahuan dari Prometheus.

Membuat kebijakan pemberitahuan dengan kueri PromQL

Anda dapat 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 Anda harus PrometheusQueryLanguageCondition. Jenis kondisi ini memungkinkan kebijakan pemberitahuan ditentukan dengan PromQL.

Tabel berikut menampilkan kueri PromQL untuk kondisi kebijakan pemberitahuan yang menggunakan metrik dari pengekspor kube-state untuk menemukan berapa kali 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 saat setiap evaluasi kueri harus menghasilkan nilai true sebelum kebijakan pemberitahuan dipicu. Nilainya harus berupa jumlah menit, yang dinyatakan dalam detik; misalnya, 600s untuk durasi 10 menit. Untuk mengetahui informasi selengkapnya, lihat Perilaku kebijakan pemberitahuan berbasis metrik.
  • evaluationInterval: Interval waktu, dalam detik, antara evaluasi PromQL atas 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 di 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 berapa kali penampung dimulai ulang dalam 30 menit terakhir:

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

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

Berikut kebijakan lengkap dengan kondisi PrometheusQueryLanguageCondition di 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": "10s",
        "alertRule": "ContainerRestart",
        "labels": {
          "action_required":"true",
          "severity":"critical/warning/info"}
      }
    }
  ],
  "alertStrategy": {
    "autoClose": "1800s"
  },
  "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 mengetahui informasi selengkapnya tentang Monitoring API untuk kebijakan pemberitahuan, lihat Mengelola kebijakan pemberitahuan dengan API.

Untuk informasi selengkapnya tentang cara menggunakan curl, lihat Memanggil curl.

Menggunakan Terraform

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

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

Memanggil curl

Setiap panggilan curl menyertakan sekumpulan argumen, diikuti dengan URL resource API. Argumen yang umum mencakup project ID Google Cloud dan token autentikasi. Nilai ini direpresentasikan 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-nya adalah GET, sehingga contoh-contoh tersebut tidak menentukannya.

Setiap panggilan 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 pencakupan Anda dari cakupan metrik. 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 Anda sebagai default menggunakan gcloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. Buat token otorisasi dan rekam 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, kirimkan ulang perintah ini.

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

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