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 kolomexpr
dari aturan pemberitahuan Prometheus standar.duration
: Menentukan durasi waktu selama setiap evaluasi kueri harus menghasilkan nilaitrue
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. JikaPrometheusQueryLanguageCondition
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 kolomname
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 kolomalert
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:
Buat variabel lingkungan untuk menyimpan ID project cakupan cakupan metrik Anda. Langkah-langkah ini memanggil variabel
PROJECT_ID
:PROJECT_ID=a-sample-project
Lakukan autentikasi ke Google Cloud CLI:
gcloud auth login
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}
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.
Untuk memverifikasi bahwa Anda mendapatkan token akses, tampilkan variabel
TOKEN
:echo ${TOKEN} ya29.GluiBj8o....