Konfigurasikan Prometheus yang dikelola sendiri untuk mengambil metrik lapisan kontrol ACK Pro, menetapkan aturan peringatan, dan memverifikasi pengaturannya.
Untuk menghindari pengelolaan konfigurasi scrape, gunakan Alibaba Cloud Managed Service for Prometheus. Layanan ini mengumpulkan metrik secara otomatis, menyediakan dasbor Grafana real-time, serta mengirimkan peringatan melalui email, SMS, dan DingTalk.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Instans Prometheus yang dikelola sendiri dengan akses ke API Server kluster ACK Pro.
-
Izin baca pada path
/metricsAPI Server. -
Instans Prometheus yang dideploy di dalam atau di luar kluster.
Kluster terkelola ACK Pro mengekspos metrik untuk komponen lapisan kontrol berikut:
| Komponen | Referensi metrik |
|---|---|
kube-apiserver |
Metrik untuk komponen kube-apiserver |
etcd |
Metrik untuk komponen etcd |
kube-scheduler |
Metrik kube-scheduler |
kube-controller-manager |
Metrik untuk komponen kube-controller-manager |
cloud-controller-manager |
Metrik cloud-controller-manager |
Langkah 1: Tambahkan job scrape Prometheus
Tambahkan job scrape ke file prometheus.yaml Anda untuk setiap komponen lapisan kontrol. Interval global default adalah 15s; setiap job komponen menggunakan 30s untuk mengurangi beban pada API Server.
Dokumentasi konfigurasi Prometheus mencakup sintaks lengkap file prometheus.yaml.
global:
scrape_interval: 15s # Secara default, scrape target setiap 15 detik.
# Lampirkan label-label ini ke deret waktu atau peringatan apa pun saat berkomunikasi dengan
# sistem eksternal (federasi, penyimpanan jarak jauh, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# Konfigurasi scrape yang berisi tepat satu titik akhir untuk di-scrape:
# Di sini adalah Prometheus itu sendiri.
scrape_configs:
# Nama job ditambahkan sebagai label `job=<job_name>` ke deret waktu apa pun yang di-scrape dari konfigurasi ini.
- job_name: ack-api-server
......
- job_name: ack-etcd
......
- job_name: ack-scheduler
......
Bagian-bagian berikut mencantumkan konfigurasi scrape dan aturan peringatan untuk setiap komponen. Jika Anda mendeploy Prometheus menggunakan pola Prometheus Operator, lihat dokumentasi add-on ack-prometheus-operator di ACK App Marketplace dan dokumentasi komunitas Prometheus Operator untuk konfigurasi scrape kustom.
Langkah 2: Konfigurasikan pemantauan dalam kluster
Jika Prometheus yang Anda kelola sendiri berjalan di dalam kluster, arahkan setiap job scrape melalui API Server sebagai proxy.
Identifikasi arsitektur jaringan kluster Anda
Tentukan apakah kluster Anda menggunakan koneksi langsung ENI (Elastic Network Interface) atau penerusan CLB (Classic Load Balancer):
kubectl get endpoints kubernetes
-
Koneksi langsung ENI: Output mencantumkan dua alamat IP atau lebih, seperti
10.0.0.1:6443, 10.0.0.2:6443. Prometheus terhubung langsung ke setiap replika API Server. -
Penerusan CLB: Output menampilkan satu alamat IP (alamat IP internal CLB). Seluruh trafik diarahkan melalui load balancer.
Gunakan titik akhir yang sesuai berdasarkan hasil ini saat mengonfigurasi setiap job scrape di bawah.
kube-apiserver
API Server merupakan titik masuk untuk semua metrik lapisan kontrol. Job komponen lain diarahkan melaluinya sebagai proxy.
Konfigurasi scrape:
- job_name: ack-api-server
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: https
kubernetes_sd_configs:
- role: endpoints
namespaces:
names: [default]
relabel_configs:
- source_labels: [__meta_kubernetes_service_label_component]
action: keep
regex: apiserver
- source_labels: [__meta_kubernetes_service_label_provider]
action: keep
regex: kubernetes
- source_labels: [__meta_kubernetes_endpoint_port_name]
action: keep
regex: https
Aturan peringatan yang direkomendasikan:
- alert: AckApiServerWarning
expr: (absent(up{job="ack-api-server",pod!=""}) or (count(up{job="ack-api-server",pod!=""}) <= 1)) == 1
for: 5m
labels:
severity: critical
annotations:
message: "APIServer tidak tersedia. Periksa status job dan target Prometheus."
Filter pod!="" menargetkan Pod lapisan kontrol aktual, mengecualikan titik akhir tingkat layanan. Ambang batas <= 1 dipicu ketika satu atau nol replika API Server dalam kondisi sehat, menandakan degradasi ketersediaan tinggi. Klausul for: 5m mencegah alarm palsu akibat restart singkat.
etcd
Mengumpulkan metrik etcd melalui proxy API Server. Pengaturan honor_labels: true mempertahankan label komponen asli dari proxy.
Konfigurasi scrape:
- job_name: ack-etcd
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: https
honor_labels: true
params:
hosting: ["true"]
job: ["etcd"]
kubernetes_sd_configs:
- role: endpoints
namespaces:
names: [default]
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
insecure_skip_verify: false
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
server_name: kubernetes
relabel_configs:
- source_labels: [__meta_kubernetes_service_label_component]
action: keep
regex: apiserver
- source_labels: [__meta_kubernetes_service_label_provider]
action: keep
regex: kubernetes
- source_labels: [__meta_kubernetes_endpoint_port_name]
action: keep
regex: https
- source_labels: [__meta_kubernetes_service_label_component]
action: replace
target_label: job
replacement: ${1}
Aturan peringatan yang direkomendasikan:
- alert: AckETCDLeaderMissing
expr: sum_over_time(etcd_server_has_leader[5m]) == 0
for: 5m
labels:
severity: critical
annotations:
message: "Kluster etcd tidak memiliki leader dalam 5 menit terakhir. Periksa apakah kluster kelebihan beban."
- alert: AckETCDDown
expr: (absent(up{job="ack-etcd",pod!=""}) or (count(up{job="ack-etcd",pod!=""}) <= 2)) == 1
for: 5m
labels:
severity: critical
annotations:
message: "Etcd tidak tersedia. Periksa status job dan target Prometheus."
AckETCDLeaderMissing aktif ketika tidak ada leader etcd yang terpilih dalam rentang waktu 5 menit, menandakan kemungkinan split-brain atau kluster kelebihan beban. AckETCDDown menggunakan ambang batas <= 2 dan bukan <= 0 karena etcd memerlukan kuorum minimal tiga anggota — dua atau kurang tidak dapat mencapai konsensus.
kube-scheduler
Memantau kesehatan penjadwal dan latensi penjadwalan.
Konfigurasi scrape:
- job_name: ack-scheduler
scrape_interval: 30s
scheme: https
params:
hosting: ["true"]
job: ["ack-scheduler"]
kubernetes_sd_configs:
- role: endpoints
namespaces:
names: [default]
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
insecure_skip_verify: false
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
server_name: kubernetes
relabel_configs:
- source_labels: [__meta_kubernetes_service_label_component]
action: keep
regex: apiserver
- source_labels: [__meta_kubernetes_endpoint_port_name]
action: keep
regex: https
- source_labels: [__meta_kubernetes_service_label_component]
action: replace
target_label: job
replacement: ${1}
Aturan peringatan yang direkomendasikan:
- alert: AckSchedulerWarning
expr: (absent(up{job="ack-scheduler",pod!=""}) or (count(up{job="ack-scheduler",pod!=""}) <= 0)) == 1
for: 3m
labels:
severity: critical
annotations:
message: "Penjadwal tidak tersedia. Periksa status job dan target Prometheus."
Durasi for: 3m lebih pendek dibandingkan peringatan API Server dan etcd karena ketidaktersediaan penjadwal secara langsung menghambat penjadwalan Pod baru dan memerlukan deteksi lebih cepat.
kube-controller-manager (KCM)
Memantau pengontrol untuk objek Kubernetes inti seperti node, namespace, dan deployment.
Konfigurasi scrape:
- job_name: ack-kcm
scrape_interval: 30s
scheme: https
params:
hosting: ["true"]
job: ["ack-kube-controller-manager"]
kubernetes_sd_configs:
- role: endpoints
namespaces:
names: [default]
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
server_name: kubernetes
relabel_configs:
- source_labels: [__meta_kubernetes_service_label_component]
action: keep
regex: apiserver
- source_labels: [__meta_kubernetes_endpoint_port_name]
action: keep
regex: https
- source_labels: [__meta_kubernetes_service_label_component]
action: replace
target_label: job
replacement: ${1}
Aturan peringatan yang direkomendasikan:
- alert: AckKCMWarning
expr: (absent(up{job="ack-kcm",pod!=""}) or (count(up{job="ack-kcm",pod!=""}) <= 0)) == 1
for: 3m
labels:
severity: critical
annotations:
message: "KCM tidak tersedia. Periksa status job dan target Prometheus."
cloud-controller-manager (CCM)
Memantau CCM, yang mengintegrasikan kluster dengan infrastruktur Alibaba Cloud. Job ini menggunakan bearer_token_file untuk otentikasi, bukan authorization.credentials_file yang digunakan oleh komponen lain.
Konfigurasi scrape:
- job_name: ack-cloud-controller-manager
scrape_interval: 30s
scheme: https
params:
hosting: ["true"]
job: ["ack-cloud-controller-manager"]
kubernetes_sd_configs:
- role: endpoints
namespaces:
names: [default]
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
server_name: kubernetes
relabel_configs:
- source_labels: [__meta_kubernetes_service_label_component]
action: keep
regex: apiserver
- source_labels: [__meta_kubernetes_endpoint_port_name]
action: keep
regex: https
Aturan peringatan yang direkomendasikan:
- alert: AckCCMWarning
expr: (absent(up{job="ack-cloud-controller-manager",pod!=""}) or (count(up{job="ack-cloud-controller-manager",pod!=""}) <= 0)) == 1
for: 3m
labels:
severity: critical
annotations:
message: "CCM tidak tersedia. Periksa status job dan target Prometheus."
Filter pod!="" memastikan peringatan hanya menargetkan Pod lapisan kontrol yang valid, sehingga menghindari alarm palsu selama gangguan jaringan singkat atau restart bergulir.
Langkah 3: Konfigurasikan aturan peringatan Prometheus
Dokumentasi aturan peringatan Prometheus mencakup sintaks dan opsi lanjutan seperti klausa for dan keep_firing_for.
Verifikasi pengaturan
Konfirmasi bahwa Prometheus berhasil melakukan scrape terhadap semua komponen. Jika Prometheus berjalan di luar kluster target, konfigurasikan job scrape luar kluster yang menggunakan kubernetes_sd_configs dengan titik akhir api_server, bearer_token, dan tls_config untuk melakukan otentikasi terhadap API Server kluster tersebut. Untuk detailnya, lihat dokumentasi komunitas Prometheus.
-
Masuk ke konsol Prometheus Anda dan buka halaman Graph.
-
Jalankan kueri
up. Verifikasi bahwaup{job="ack-api-server"}dan semua job komponen lain mengembalikan nilai1. -
Jalankan kueri spesifik komponen seperti
apiserver_request_totaluntuk memastikan data deret waktu terisi dengan benar.