Prasyarat
Sistem Prometheus yang Anda kelola sendiri harus dapat mengakses ACK managed cluster Pro API Server dan memiliki izin baca pada /metrics.
Anda dapat menerapkan sistem Prometheus yang Anda kelola sendiri di dalam atau di luar kluster.
ACK managed cluster Pro mengekspos metrik untuk komponen yang dikelola, seperti kube-apiserver, etcd, kube-scheduler, kube-controller-manager, dan cloud-controller-manager. Sebelum menggunakan fitur ini, kami menyarankan Anda meninjau dokumen berikut untuk memahami metrik yang diekspos oleh komponen-komponen tersebut beserta deskripsinya:
Sebagai alternatif, Anda dapat menggunakan Pemantauan Prometheus Alibaba Cloud di kluster Anda. Prometheus Alibaba Cloud secara otomatis memantau dan mengumpulkan data, menyediakan dasbor Grafana secara real-time, serta memungkinkan Anda membuat peringatan untuk tugas pemantauan. Anda dapat menerima peringatan secara real-time melalui saluran seperti email, pesan teks, dan DingTalk.
Konfigurasikan file pengumpulan Prometheus
Sebelum menggunakan sistem Prometheus yang dikelola sendiri untuk mengumpulkan metrik dari komponen lapisan kontrol, Anda harus mengonfigurasi tugas pengumpulan metrik yang sesuai dalam file konfigurasi Prometheus prometheus.yaml. Dalam contoh file konfigurasi, setiap komponen inti memiliki konfigurasi tugas tersendiri. Untuk informasi lebih lanjut tentang konfigurasi tersebut, lihat dokumen deskripsi metrik untuk komponen inti yang bersangkutan.
Untuk informasi lebih lanjut tentang cara mengonfigurasi prometheus.yaml untuk Prometheus komunitas, lihat Configuration.
global:
scrape_interval: 15s # Secara default, ambil target setiap 15 detik.
# Lampirkan label ini ke seri waktu atau peringatan apa pun saat berkomunikasi dengan
# sistem eksternal (federasi, penyimpanan jarak jauh, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# Konfigurasi pengambilan yang berisi tepat satu titik akhir untuk diambil:
# Di sini adalah Prometheus itu sendiri.
scrape_configs:
# Nama job ditambahkan sebagai label `job=<job_name>` ke seri waktu apa pun yang diambil dari konfigurasi ini.
- job_name: ack-api-server
......
- job_name: ack-etcd
......
- job_name: ack-scheduler
......
Untuk informasi lebih lanjut tentang solusi Prometheus Operator komunitas dan komponen ack-prometheus-operator di pasar ACK, lihat Pemantauan Prometheus open source. Untuk petunjuk tentang cara mengonfigurasi pengumpulan data kustom, lihat dokumentasi Prometheus Operator dari komunitas resmi Prometheus Operator.
Konfigurasikan aturan peringatan Prometheus
Untuk informasi lebih lanjut tentang cara mengonfigurasi peringatan untuk Prometheus sumber terbuka, lihat Alerting_rules.
Pemantauan intra-kluster
Jika sistem Prometheus Anda diterapkan di dalam kluster yang ingin Anda pantau, rujuk bagian berikut untuk mengonfigurasi pemantauan dan pengumpulan data untuk komponen inti kluster.
Kube-apiserver
Untuk daftar metrik yang dapat dikumpulkan, lihat Metrik komponen kube-apiserver.
Untuk kluster versi 1.20 atau lebih baru yang dibuat pada atau setelah Februari 2023, jalur akses untuk layanan Kubernetes di namespace default ditingkatkan dari arsitektur penerusan Classic Load Balancer (CLB) menjadi arsitektur koneksi langsung yang menggunakan elastic network interfaces (ENIs). Untuk informasi lebih lanjut, lihat Kube API Server. Setelah perubahan ini, semua replika kube-apiserver terlihat oleh bidang data. Anda dapat mengonfigurasi tugas pemantauan untuk langsung mengumpulkan metrik kube-apiserver. Hal ini memberikan tautan pengumpulan yang lebih langsung dan cakupan metrik yang lebih komprehensif.
Anda dapat menjalankan perintah kubectl get endpoints kubernetes untuk menentukan jenis tautan backend layanan Kubernetes di kluster.
Klik untuk melihat output yang diharapkan
Arsitektur koneksi langsung ENI: Output menampilkan dua alamat IP atau lebih, seperti a.b.c.d:6443,w.x.y.z:6443.
NAME ENDPOINTS AGE
kubernetes a.b.c.d:6443,w.x.y.z:6443 27h
Arsitektur penerusan CLB: Output hanya menampilkan satu alamat IP, seperti a.b.c.d:6443. Alamat IP ini merupakan alamat IP internal instans CLB.
NAME ENDPOINTS AGE
kubernetes a.b.c.d:6443 27h
Pilih konfigurasi pengumpulan Prometheus dan aturan peringatan berdasarkan jenis tautan backend layanan Kubernetes di kluster.
etcd
Untuk daftar metrik yang dapat dikumpulkan, lihat Metrik komponen etcd.
Konfigurasi pengumpulan Prometheus
- job_name: ack-etcd
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: https
# scheme: https
honor_labels: true
honor_timestamps: 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]
separator: ;
regex: apiserver
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_service_label_provider]
separator: ;
regex: kubernetes
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_endpoint_port_name]
separator: ;
regex: https
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_namespace]
separator: ;
regex: (.*)
target_label: namespace
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
separator: ;
regex: Node;(.*)
target_label: node
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
separator: ;
regex: Pod;(.*)
target_label: pod
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: service
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: job
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_service_label_component]
separator: ;
regex: (.+)
target_label: job
replacement: ${1}
action: replace
- separator: ;
regex: (.*)
target_label: endpoint
replacement: https
action: replace
Aturan peringatan Prometheus
- alert: AckETCDWarning
annotations:
message: Kluster Etcd tidak memiliki pemimpin dalam 5 menit terakhir, silakan periksa apakah kluster kelebihan beban dan hubungi tim ACK.
expr: |
sum_over_time(etcd_server_has_leader[5m]) == 0
for: 5m
labels:
severity: critical
- alert: AckETCDWarning
annotations:
message: Etcd tidak tersedia dalam 5 menit terakhir. Silakan periksa status job dan target prometheus.
expr: |
(absent(up{job="ack-etcd",pod!=""}) or (count(up{job="ack-etcd",pod!=""}) <= 2)) == 1
for: 5m
labels:
severity: critical
Kube-scheduler
Untuk daftar metrik yang dapat dikumpulkan, lihat Metrik komponen kube-scheduler.
Prometheus collection configuration
- job_name: ack-scheduler
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: https
# scheme: https
honor_labels: true
honor_timestamps: true
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]
separator: ;
regex: apiserver
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_service_label_provider]
separator: ;
regex: kubernetes
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_endpoint_port_name]
separator: ;
regex: https
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_namespace]
separator: ;
regex: (.*)
target_label: namespace
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
separator: ;
regex: Node;(.*)
target_label: node
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
separator: ;
regex: Pod;(.*)
target_label: pod
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: service
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: job
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_service_label_component]
separator: ;
regex: (.+)
target_label: job
replacement: ${1}
action: replace
- separator: ;
regex: (.*)
target_label: endpoint
replacement: https
action: replace
Prometheus alert rule
- alert: AckSchedulerWarning
annotations:
message: Scheduler tidak tersedia dalam 3 menit terakhir. Silakan periksa status job dan target prometheus.
expr: |
(absent(up{job="ack-scheduler",pod!=""}) or (count(up{job="ack-scheduler",pod!=""}) <= 0)) == 1
for: 3m
labels:
severity: critical
Kube-controller-manager
Untuk daftar metrik yang dapat dikumpulkan, lihat Metrik komponen kube-controller-manager.
Prometheus collection configuration
- job_name: ack-kcm
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: https
# scheme: https
honor_labels: true
honor_timestamps: true
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:
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]
separator: ;
regex: apiserver
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_service_label_provider]
separator: ;
regex: kubernetes
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_endpoint_port_name]
separator: ;
regex: https
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_namespace]
separator: ;
regex: (.*)
target_label: namespace
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
separator: ;
regex: Node;(.*)
target_label: node
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
separator: ;
regex: Pod;(.*)
target_label: pod
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: service
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: job
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_service_label_component]
separator: ;
regex: (.+)
target_label: job
replacement: ${1}
action: replace
- separator: ;
regex: (.*)
target_label: endpoint
replacement: https
action: replace
Prometheus alert rule
- alert: AckKCMWarning
annotations:
message: KCM tidak tersedia dalam 3 menit terakhir. Silakan periksa status job dan target prometheus.
expr: |
(absent(up{job="ack-kcm",pod!=""})or(count(up{job="ack-kcm",pod!=""})<=0))>=1
for: 3m
labels:
severity: critical
Cloud-controller-manager
Untuk daftar metrik yang dapat dikumpulkan, lihat Metrik komponen cloud-controller-manager.
Prometheus collection configuration
- job_name: ack-cloud-controller-manager
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: https
# scheme: https
honor_labels: true
honor_timestamps: true
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,
insecure_skip_verify: false}
relabel_configs:
- source_labels: [__meta_kubernetes_service_label_component]
separator: ;
regex: apiserver
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_service_label_provider]
separator: ;
regex: kubernetes
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_endpoint_port_name]
separator: ;
regex: https
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_namespace]
separator: ;
regex: (.*)
target_label: namespace
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
separator: ;
regex: Node;(.*)
target_label: node
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
separator: ;
regex: Pod;(.*)
target_label: pod
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: service
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: job
replacement: ${1}
action: replace
- source_labels: [__meta_kubernetes_service_label_component]
separator: ;
regex: (.+)
target_label: job
replacement: ${1}
action: replace
- separator: ;
regex: (.*)
target_label: endpoint
replacement: https
action: replace
Prometheus alert rule
- alert: AckCCMWarning
annotations:
message: CCM tidak tersedia dalam 3 menit terakhir. Silakan periksa status job dan target prometheus.
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
Pemantauan kluster eksternal
Jika sistem Prometheus Anda diterapkan di luar kluster yang ingin Anda pantau, rujuk Configuration dan Monitoring kubernetes with prometheus from outside of k8s cluster untuk mengonfigurasi pemantauan dan pengumpulan data untuk komponen inti kluster. Konfigurasi utamanya adalah sebagai berikut:
- job_name: 'out-of-k8s-scrape-job'
scheme: https
tls_config:
ca_file: /etc/prometheus/kubernetes-ca.crt
bearer_token: '<SERVICE ACCOUNT BEARER TOKEN>'
kubernetes_sd_configs:
- api_server: 'https://<KUBERNETES URL>'
role: node
tls_config:
ca_file: /etc/prometheus/kubernetes-ca.crt
bearer_token: '<SERVICE ACCOUNT BEARER TOKEN>'
Verifikasi hasil
Masuk ke konsol sistem Prometheus yang Anda kelola sendiri dan buka halaman Graph.
Masukkan up dan periksa apakah data untuk semua komponen lapisan kontrol ditampilkan sebagaimana diharapkan.
up
Output yang Diharapkan:

up{instance="XX.XX.XX.XX:6443", job="ack-api-server"}: Status endpoint proxy. XX.XX.XX.XX adalah alamat IP layanan Kubernetes di namespace default kluster. Alamat IP ini berbeda-beda tergantung kluster.
up{instance="controlplane-xyz", job="ack-api-server", pod="controlplane-xyz"}: Status pod lapisan kontrol. Metrik up ini dapat digunakan untuk Pemeriksaan kelangsungan hidup pod lapisan kontrol.
Masukkan metrik berikut dan periksa apakah ditampilkan sebagaimana diharapkan.
apiserver_request_total{job="ack-api-server"}
Output yang Diharapkan:

Jika metrik dan data yang ditanyakan ditampilkan di halaman, sistem Prometheus yang Anda kelola sendiri dapat mengumpulkan metrik komponen inti.