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 kolomexpr
dari aturan pemberitahuan Prometheus standar.duration
: Menentukan durasi waktu saat setiap evaluasi kueri harus menghasilkan nilaitrue
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. 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 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:
Buat variabel lingkungan untuk menyimpan ID project pencakupan Anda dari cakupan metrik. 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 Anda sebagai default menggunakan gcloud CLI:gcloud config set project ${PROJECT_ID}
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.
Untuk memverifikasi bahwa Anda mendapatkan token akses, echo variabel
TOKEN
:echo ${TOKEN} ya29.GluiBj8o....