All Products
Search
Document Center

Container Service for Kubernetes:Pantau komponen lapisan kontrol ACK Pro dengan Prometheus yang dikelola sendiri

Last Updated:Jun 19, 2026

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 /metrics API 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.

  1. Masuk ke konsol Prometheus Anda dan buka halaman Graph.

  2. Jalankan kueri up. Verifikasi bahwa up{job="ack-api-server"} dan semua job komponen lain mengembalikan nilai 1.

  3. Jalankan kueri spesifik komponen seperti apiserver_request_total untuk memastikan data deret waktu terisi dengan benar.