Tulis aturan peringatan PromQL kustom untuk memantau node kluster, host, replika kontainer, dan workload.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Mengaktifkan pemantauan Prometheus untuk kluster ACK Anda. Gunakan Alibaba Cloud Prometheus Monitoring (disarankan) atau pemantauan Prometheus open source.
Konfigurasikan aturan peringatan dengan PromQL kustom
Baik Alibaba Cloud Prometheus maupun Prometheus open source mendukung aturan peringatan berbasis PromQL kustom yang memicu notifikasi ketika kondisi tertentu terpenuhi.
Alibaba Cloud Prometheus
Untuk membuat aturan peringatan Prometheus menggunakan PromQL kustom, lihat Buat aturan peringatan Prometheus.
Prometheus open source
-
Konfigurasikan kebijakan notifikasi peringatan. Prometheus open source mendukung webhook, DingTalk, dan email. Atur metode notifikasi melalui parameter
receiverdi ack-prometheus-operator. Lihat Konfigurasi peringatan. -
Buat aturan peringatan. Terapkan CRD PrometheusRule di kluster untuk menentukan aturan peringatan (lihat Menerapkan aturan Prometheus). Contoh berikut memicu peringatan ketika penggunaan CPU node melebihi 90% dalam jendela waktu 2 menit. Bidang
exprmenentukan ekspresi PromQL dan kondisi pemicu.apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: # Label harus sesuai dengan ruleSelector.matchLabels di CRD Prometheus. prometheus: example role: alert-rules name: prometheus-example-rules spec: groups: - name: example.rules rules: - alert: ExampleAlert # expr: Kueri PromQL dan kondisi pemicu. # Lihat kolom konfigurasi PromQL di tabel aturan peringatan di bawah ini. expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 90 -
Verifikasi bahwa aturan peringatan aktif.
-
Jalankan perintah berikut untuk meneruskan layanan Prometheus ke port 9090 pada mesin lokal Anda:
kubectl port-forward svc/ack-prometheus-operator-prometheus 9090:9090 -n monitoring -
Buka
localhost:9090di browser Anda. -
Pilih Status > Rules. Jika aturan peringatan muncul di halaman Rules, berarti aturan tersebut aktif.
-
Referensi aturan peringatan
ACK menyediakan aturan peringatan yang direkomendasikan berdasarkan pengalaman O&M, mencakup stabilitas kluster, penggunaan resource node dan host, replika kontainer, workload, penyimpanan, dan jaringan.
Tingkat keparahan:
-
Critical: Mempengaruhi kluster, aplikasi, atau bisnis. Memerlukan tindakan segera.
-
Warning: Mempengaruhi kluster, aplikasi, atau bisnis. Perlu segera diselidiki.
-
Normal: Menunjukkan perubahan fitur penting.
Kolom Rule description menggunakan tab Alert Rules di halaman Alerts sebagai titik masuk. Untuk mengaksesnya: login ke Konsol ACK, klik kluster Anda di daftar Clusters, lalu pilih Operations > Alerts > Alert Rules.
Replika kontainer tidak normal
| Deskripsi | Tingkat Keparahan | PromQL | Ambang Batas | Jendela | Deskripsi aturan | Troubleshooting umum |
|---|---|---|---|---|---|---|
| Status Pod tidak normal | Critical | min_over_time(sum by (namespace, pod, phase) (kube_pod_status_phase{phase=~"Pending|Unknown|Failed"})[5m:1m]) > 0 |
> 0 | 5 menit | Memunculkan peringatan ketika sebuah pod tetap dalam status Pending, Unknown, atau Failed selama 5 menit. Konfigurasikan melalui Alert Rule Set for Pod Exceptions > Pod anomaly. Lihat Kelola peringatan di ACK. | Lihat Troubleshoot pod exceptions. |
| Startup Pod gagal | Critical | sum_over_time(increase(kube_pod_container_status_restarts_total{}[1m])[5m:1m]) > 3 |
> 3 kali restart | 5 menit | Memunculkan peringatan ketika sebuah pod melakukan restart lebih dari 3 kali dalam 5 menit. Konfigurasikan melalui Alert Rule Set for Pod Exceptions > Pod startup failures. Lihat Kelola peringatan di ACK. | Lihat Troubleshoot pod exceptions. |
| Lebih dari 1.000 pod gagal dijadwalkan selama 10 menit berturut-turut | Critical | count((min_over_time(kube_pod_status_phase{phase="Pending"}[10m]) == 1) and (count_over_time(kube_pod_status_phase{phase="Pending"}[10m:15s]) >= (10 * 4 - 1))) > 1000 |
> 1.000 pod | 10 menit | Memunculkan peringatan ketika lebih dari 1.000 pod tetap dalam status Pending karena kegagalan penjadwalan selama lebih dari 10 menit berturut-turut. | Mungkin menunjukkan tekanan penjadwalan berlebihan. Edisi Pro ACK menyediakan penjadwalan yang ditingkatkan dan SLA. Lihat Ikhtisar Kluster ACK yang Dikelola Edisi Pro. |
| Pembatasan kecepatan CPU kontainer sering terjadi | Warning | rate(container_cpu_cfs_throttled_seconds_total[3m]) * 100 > 25 |
> 25% waktu dibatasi | 3 menit | Memunculkan peringatan ketika waktu CPU yang dibatasi melebihi 25% selama 3 menit. Pembatasan kecepatan mengurangi time slice, meningkatkan waktu proses, dan memperlambat logika aplikasi. | Periksa apakah resource limit CPU pod terlalu rendah. Kurangi pembatasan kecepatan dengan kebijakan CPU Burst. Pada node multi-core, gunakan penjadwalan yang sadar topologi CPU untuk memaksimalkan sumber daya CPU terfragmentasi. |
| Penggunaan CPU Pod > 85% dari batas | Warning | (sum(irate(container_cpu_usage_seconds_total{pod=~"{{PodName}}.*",namespace=~"{{Namespace}}.*",container!="",container!="POD"}[1m])) by (namespace,pod) / sum(container_spec_cpu_quota{pod=~"{{PodName}}.*",namespace=~"{{Namespace}}.*",container!="",container!="POD"}/100000) by (namespace,pod) * 100 <= 100 or on() vector(0)) >= 85 |
>= 85% dari batas pod | 1 menit | Memunculkan peringatan ketika CPU pod melebihi 85% dari batasnya. Tidak berpengaruh jika batas tidak dikonfigurasi. Ambang batas default: 85% — sesuaikan sesuai kebutuhan. Untuk memfilter, ganti pod=~"{{PodName}}.*",namespace=~"{{Namespace}}.*" dengan nilai aktual; hapus filter untuk mengkueri semua pod. |
Penggunaan CPU tinggi menyebabkan pembatasan kecepatan dan mengurangi time slice. Periksa apakah resource limit CPU terlalu rendah. Lihat Aktifkan kebijakan CPU Burst dan Aktifkan penjadwalan yang sadar topologi CPU. |
| Penggunaan memori Pod > 85% dari batas | Warning | ((sum(container_memory_working_set_bytes{pod=~"{{PodName}}.*",namespace=~"{{Namespace}}.*",container!="",container!="POD"}) by (pod,namespace) / sum(container_spec_memory_limit_bytes{pod=~"{{PodName}}.*",namespace=~"{{Namespace}}.*",container!="",container!="POD"}) by (pod, namespace) * 100) <= 100 or on() vector(0)) >= 85 |
>= 85% dari batas pod | — | Memunculkan peringatan ketika memori pod melebihi 85% dari batasnya. Tidak berpengaruh jika batas tidak dikonfigurasi. Ambang batas default: 85% — sesuaikan sesuai kebutuhan. | Penggunaan memori tinggi dapat memicu OOM kill dan restart pod. Periksa apakah resource limit memori terlalu rendah. Sesuaikan ukuran batas dengan profil resource. |
Workload tidak normal
| Deskripsi | Tingkat Keparahan | PromQL | Ambang Batas | Jendela | Deskripsi aturan | Troubleshooting umum |
|---|---|---|---|---|---|---|
| Ketidaksesuaian replika Deployment | Critical | kube_deployment_spec_replicas{} != kube_deployment_status_replicas_available{} |
Ada ketidaksesuaian | — | Memunculkan peringatan ketika jumlah replika Deployment yang tersedia tidak sesuai dengan jumlah yang diinginkan. Konfigurasikan melalui Alert Rule Set for Workload Exceptions > Deployment pod anomaly. Lihat Kelola peringatan di ACK. | Lihat Troubleshoot pod exceptions. |
| Ketidaksesuaian replika DaemonSet | Critical | ((100 - kube_daemonset_status_number_ready{} / kube_daemonset_status_desired_number_scheduled{} * 100) or (kube_daemonset_status_desired_number_scheduled{} - kube_daemonset_status_current_number_scheduled{})) > 0 |
> 0 | — | Memunculkan peringatan ketika jumlah replika DaemonSet yang tersedia tidak sesuai dengan jumlah yang diinginkan. Konfigurasikan melalui Alert Rule Set for Workload Exceptions > DaemonSet pod anomaly. Lihat Kelola peringatan di ACK. | Lihat Troubleshoot pod exceptions. |
| Error penjadwalan DaemonSet | Critical | kube_daemonset_status_number_misscheduled{job} > 0 |
> 0 | — | Memunculkan peringatan ketika replika DaemonSet berjalan di node yang salah. Konfigurasikan melalui Alert Rule Set for Workload Exceptions > DaemonSet pod scheduling errors. Lihat Kelola peringatan di ACK. | Lihat Troubleshoot pod exceptions. |
| Job gagal | Critical | kube_job_status_failed{} > 0 |
> 0 | — | Memunculkan peringatan ketika sebuah Job gagal. Konfigurasikan melalui Alert Rule Set for Workload Exceptions > Job execution failures. Lihat Kelola peringatan di ACK. | Periksa log pod yang gagal untuk detail error. Lihat Troubleshoot pod exceptions. |
Exception penyimpanan
| Deskripsi | Tingkat Keparahan | PromQL | Ambang Batas | Jendela | Deskripsi aturan | Troubleshooting umum |
|---|---|---|---|---|---|---|
| Status PersistentVolume (PV) tidak normal | Critical | kube_persistentvolume_status_phase{phase=~"Failed|Pending"} > 0 |
> 0 | — | Memunculkan peringatan ketika PV memasuki status Failed atau Pending. Konfigurasikan melalui Alert Rule Set for Storage Exceptions > PV anomaly. Lihat Kelola peringatan di ACK. | Lihat bagian pemasangan disk di FAQ tentang PV disk. |
| Penggunaan disk host > 85% | Critical | (100 - node_filesystem_avail_bytes / node_filesystem_size_bytes * 100) >= 85 |
>= 85% | — | Memunculkan peringatan ketika ruang bebas disk node kurang dari 15%. Konfigurasikan melalui Alert Rule Set for Resource Exceptions > Node - Disk usage >= 85%. Lihat Kelola peringatan di ACK. | Lakukan scale out node atau perluas disk-nya. Lihat FAQ tentang PV disk. |
Status node tidak normal
| Deskripsi | Tingkat Keparahan | PromQL | Ambang Batas | Jendela | Deskripsi aturan | Troubleshooting umum |
|---|---|---|---|---|---|---|
| Node NotReady selama 3 menit | Critical | (sum(max_over_time(kube_node_status_condition{condition="Ready",status="true"}[3m]) <= 0) by (node)) or (absent(kube_node_status_condition{condition="Ready",status="true"})) > 0 |
> 0 | 3 menit | Memunculkan peringatan ketika node tetap dalam status NotReady selama 3 menit. Konfigurasikan melalui Alert Rule Set for Node Exceptions > Node changes to the unschedulable state. Lihat Kelola peringatan di ACK. | Tentukan apakah status NotReady diharapkan (misalnya, penggantian node atau maintenance). Jika tidak diharapkan, periksa apakah pod aplikasi terpengaruh dan evakuasi jika perlu. Periksa kondisi node untuk mengetahui penyebab seperti tekanan memori atau disk penuh. |
Penggunaan resource host tidak normal
Metrik resource host mengukur resource mesin fisik atau virtual. Penggunaan = penggunaan resource semua proses / kapasitas maksimum host.
| Deskripsi | Tingkat Keparahan | PromQL | Ambang Batas | Jendela | Deskripsi aturan | Troubleshooting umum |
|---|---|---|---|---|---|---|
| Penggunaan memori host > 85% | Warning | (100 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100) >= 85 |
>= 85% | — |
Memunculkan peringatan ketika penggunaan memori host melebihi 85%. Konfigurasikan melalui
Alert Rule Set for Resource Exceptions
>
Node - Memory usage >= 85%
. Lihat
Kelola peringatan di ACK
. Ambang batas default: 85% — sesuaikan sesuai kebutuhan.
Catatan
Aturan peringatan ACK disediakan oleh Cloud Monitor, dengan metrik yang konsisten dengan aturan Prometheus. |
Lepaskan resource: periksa alokasi resource pod dengan analisis biaya, dan sesuaikan permintaan memori dengan profil resource. Lakukan scale out node — lihat Scale node di kluster ACK. |
| Penggunaan memori host > 90% | Critical | (100 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100) >= 90 |
>= 90% | — | Memunculkan peringatan ketika penggunaan memori host melebihi 90%. | Lepaskan resource dengan analisis biaya dan profil resource. Lakukan scale out node — lihat Scale node di kluster ACK. |
| Penggunaan CPU host > 85% | Warning | 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) >= 85 |
>= 85% | 2 menit |
Memunculkan peringatan ketika penggunaan CPU host melebihi 85%. Konfigurasikan melalui
Alert Rule Set for Resource Exceptions
>
Node - CPU usage >= 85%
.
Catatan
ACK menggunakan metrik ECS CloudMonitor, setara dengan aturan Prometheus ini. Ambang batas default: 85% — sesuaikan sesuai kebutuhan. Lihat Kelola peringatan di ACK. |
Lepaskan resource dengan analisis biaya dan profil resource. Lakukan scale out node — lihat Scale node di kluster ACK. |
| Penggunaan CPU host > 90% | Critical | 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) >= 90 |
>= 90% | 2 menit | Memunculkan peringatan ketika penggunaan CPU host melebihi 90%. | Lepaskan resource dengan analisis biaya dan profil resource. Lakukan scale out node — lihat Scale node di kluster ACK. |
Resource node tidak normal
Metrik resource node mengukur konsumsi resource kontainer relatif terhadap kapasitas alokasi node, bukan kapasitas mesin fisik.
Resource yang dikonsumsi (pembilang): Total resource semua kontainer di node, termasuk working set memory, page cache, dan lainnya.
Resource yang dialokasikan (penyebut): Resource yang tersedia untuk kontainer setelah mengurangi reservasi node. Lihat Kebijakan pemesanan resource node.
Penjadwalan pod didasarkan pada permintaan resource, bukan penggunaan aktual.
| Deskripsi | Tingkat Keparahan | PromQL | Ambang Batas | Jendela | Deskripsi aturan | Troubleshooting umum |
|---|---|---|---|---|---|---|
| Penggunaan CPU node > 85% | Warning | sum(irate(container_cpu_usage_seconds_total{pod!=""}[1m])) by (node) / sum(kube_node_status_allocatable{resource="cpu"}) by (node) * 100 >= 85 |
>= 85% | 1 menit | Memunculkan peringatan ketika penggunaan CPU node melebihi 85% dari resource yang dialokasikan. Rumus: Penggunaan resource node / Total resource yang dialokasikan di node. | Lepaskan resource dengan analisis biaya dan profil resource untuk mendistribusikan pod di beberapa node. Lakukan scale out node — lihat Scale node di kluster ACK. |
| Laju alokasi resource CPU node > 85% | Normal | (sum(sum(kube_pod_container_resource_requests{resource="cpu"}) by (pod, node) * on (pod) group_left max(kube_pod_status_ready{condition="true"}) by (pod, node)) by (node)) / sum(kube_node_status_allocatable{resource="cpu"}) by (node) * 100 >= 85 |
>= 85% | — | Memunculkan peringatan ketika laju alokasi resource CPU melebihi 85% dari resource yang dialokasikan. Rumus: Total permintaan resource pod yang dijadwalkan / Total resource yang dialokasikan di node. | Resource tidak mencukupi untuk menjadwalkan pod tambahan. Periksa adanya pemborosan resource (penggunaan aktual jauh di bawah permintaan) dengan analisis biaya dan profil resource. Lakukan scale out node — lihat Scale node di kluster ACK. |
| Laju oversold CPU node > 300% | Warning | (sum(sum(kube_pod_container_resource_limits{resource="cpu"}) by (pod, node) * on (pod) group_left max(kube_pod_status_ready{condition="true"}) by (pod, node)) by (node)) / sum(kube_node_status_allocatable{resource="cpu"}) by (node) * 100 >= 300 |
>= 300% | — | Memunculkan peringatan ketika laju oversold CPU melebihi 300% dari resource yang dialokasikan. Rumus: Total batas resource pod yang dijadwalkan / Total resource yang dialokasikan di node. Ambang batas 300% adalah rekomendasi default — sesuaikan sesuai kebutuhan. | Total batas CPU jauh melebihi resource yang dialokasikan. Selama puncak trafik, persaingan dan pembatasan kecepatan dapat memperlambat respons. Sesuaikan permintaan dan batas CPU dengan analisis biaya dan profil resource. Lakukan scale out node — lihat Scale node di kluster ACK. |
| Penggunaan memori node > 85% | Warning | sum(container_memory_working_set_bytes{pod!=""}) by (node) / sum(kube_node_status_allocatable{resource="memory"}) by (node) * 100 >= 85 |
>= 85% | — | Memunculkan peringatan ketika penggunaan memori node melebihi 85% dari resource yang dialokasikan. Rumus: Penggunaan resource node / Total resource yang dialokasikan di node. | Lepaskan resource dengan analisis biaya dan profil resource untuk mendistribusikan pod di beberapa node. Lakukan scale out node — lihat Scale node di kluster ACK. |
| Laju alokasi resource memori node > 85% | Normal | (sum(sum(kube_pod_container_resource_requests{resource="memory"}) by (pod, node) * on (pod) group_left max(kube_pod_status_ready{condition="true"}) by (pod, node)) by (node)) / sum(kube_node_status_allocatable{resource="memory"}) by (node) * 100 >= 85 |
>= 85% | — | Memunculkan peringatan ketika laju alokasi resource memori melebihi 85% dari resource yang dialokasikan. Rumus: Total permintaan resource pod yang dijadwalkan / Total resource yang dialokasikan di node. | Resource tidak mencukupi untuk menjadwalkan pod tambahan. Periksa adanya pemborosan resource (penggunaan aktual jauh di bawah permintaan) dengan analisis biaya dan profil resource. Lakukan scale out node — lihat Scale node di kluster ACK. |
| Laju oversold memori node > 300% | Warning | (sum(sum(kube_pod_container_resource_limits{resource="memory"}) by (pod, node) * on (pod) group_left max(kube_pod_status_ready{condition="true"}) by (pod, node)) by (node)) / sum(kube_node_status_allocatable{resource="memory"}) by (node) * 100 >= 300 |
>= 300% | — | Memunculkan peringatan ketika laju oversold memori melebihi 300% dari resource yang dialokasikan. Rumus: Total batas resource pod yang dijadwalkan / Total resource yang dialokasikan di node. Ambang batas 300% adalah rekomendasi default — sesuaikan sesuai kebutuhan. | Total batas memori jauh melebihi resource yang dialokasikan. Selama puncak trafik, memori dapat mencapai batas node, memicu OOM kill yang mengganggu workload. Sesuaikan permintaan dan batas memori dengan analisis biaya dan profil resource. Lakukan scale out node — lihat Scale node di kluster ACK. |
Exception jaringan
| Deskripsi | Tingkat Keparahan | PromQL | Ambang Batas | Jendela | Deskripsi aturan | Troubleshooting umum |
|---|---|---|---|---|---|---|
| Jumlah permintaan CoreDNS turun menjadi nol | Critical | (sum(rate(coredns_dns_request_count_total{}[1m]))by(server,zone)<=0) or (sum(rate(coredns_dns_requests_total{}[1m]))by(server,zone)<=0) |
<= 0 | 1 menit | Hanya dapat dideteksi di kluster ACK yang dikelola (edisi Pro dan Basic). | Periksa apakah pod CoreDNS di kluster berjalan normal. |
| Exception panic CoreDNS | Critical | sum(rate(coredns_panic_count_total{}[3m])) > 0 |
> 0 | 3 menit | Hanya dapat dideteksi di kluster ACK yang dikelola (edisi Pro dan Basic). | Periksa apakah pod CoreDNS di kluster berjalan normal. |
| Sertifikat controller Ingress akan kedaluwarsa dalam 14 hari | Warning | ((nginx_ingress_controller_ssl_expire_time_seconds - time()) / 24 / 3600) < 14 |
< 14 hari | — | Memerlukan komponen controller Ingress ACK yang diinstal dengan fitur Ingress diaktifkan. | Terbitkan ulang sertifikat controller Ingress. |
Exception Auto Scaling
| Deskripsi | Tingkat Keparahan | PromQL | Ambang Batas | Jendela | Deskripsi aturan | Troubleshooting umum |
|---|---|---|---|---|---|---|
| Jumlah replika HPA mencapai maksimum | Warning | max(kube_horizontalpodautoscaler_spec_max_replicas) by (namespace, horizontalpodautoscaler) - max(kube_horizontalpodautoscaler_status_current_replicas) by (namespace, horizontalpodautoscaler) <= 0 |
<= 0 selisih | — |
Memunculkan peringatan ketika jumlah replika HPA saat ini mencapai maksimum yang dikonfigurasi.
Catatan
Aktifkan metrik |
Periksa apakah kebijakan HPA sesuai ekspektasi. Jika workload tetap tinggi, tingkatkan maxReplicas atau optimalkan performa aplikasi. |
Langkah selanjutnya
-
Kueri data Prometheus dari konsol atau API: Kueri data pemantauan Prometheus menggunakan PromQL.
-
Temukan masalah jaringan kontainer: Gunakan KubeSkoop untuk menemukan masalah jaringan.
-
Masalah umum Alibaba Cloud Prometheus: FAQ Observabilitas