Ambil metrik mentah bidang kontrol di Prometheus format - Amazon EKS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Ambil metrik mentah bidang kontrol di Prometheus format

Bagian Kubernetes bidang kontrol memperlihatkan sejumlah metrik yang direpresentasikan dalam format Prometheus. Metrik ini berguna untuk pemantauan dan analisis. Mereka diekspos secara internal melalui titik akhir metrik, dan dapat diakses tanpa menerapkan sepenuhnya Prometheus. Namun, menyebarkan Prometheus lebih mudah memungkinkan menganalisis metrik dari waktu ke waktu.

Untuk melihat output metrik mentah, jalankan perintah berikut.

kubectl get --raw endpoint

Perintah ini memungkinkan Anda untuk melewati jalur titik akhir apa pun dan mengembalikan respons mentah. Output mencantumkan metrik yang berbeda line-by-line, dengan setiap baris termasuk nama metrik, tag, dan nilai.

metric_name{tag="value"[,...]} value

Ambil metrik dari server API

Titik akhir API server umum diekspos di bidang EKS kontrol Amazon. Titik akhir ini terutama berguna ketika melihat metrik tertentu.

kubectl get --raw /metrics

Contoh output adalah sebagai berikut.

[...] # HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host. # TYPE rest_client_requests_total counter rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994 rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1 rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06 rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173 rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2 rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3 rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8 # HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts # TYPE ssh_tunnel_open_count counter ssh_tunnel_open_count 0 # HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts # TYPE ssh_tunnel_open_fail_count counter ssh_tunnel_open_fail_count 0

Output mentah ini mengembalikan kata demi kata apa yang diekspos server. API

Ambil metrik bidang kontrol dengan metrics.eks.amazonaws.com

Untuk cluster baru yang Kubernetes versi 1.28 dan di atasnya, Amazon EKS juga mengekspos metrik di bawah grup. API metrics.eks.amazonaws.com Metrik ini mencakup komponen bidang kontrol seperti kube-scheduler dankube-controller-manager. Metrik ini juga tersedia untuk cluster yang ada yang memiliki versi platform yang sama atau lebih baru dibandingkan dengan tabel berikut.

Versi Kubernetes Versi platform

1.31

eks.10

1.30

eks.18

1.29

eks.21

1.28

eks.27

Ambil metrik kube-scheduler

Untuk mengambil kube-scheduler metrik, gunakan perintah berikut.

kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"

Contoh output adalah sebagai berikut.

# TYPE scheduler_pending_pods gauge scheduler_pending_pods{queue="active"} 0 scheduler_pending_pods{queue="backoff"} 0 scheduler_pending_pods{queue="gated"} 0 scheduler_pending_pods{queue="unschedulable"} 18 # HELP scheduler_pod_scheduling_attempts [STABLE] Number of attempts to successfully schedule a pod. # TYPE scheduler_pod_scheduling_attempts histogram scheduler_pod_scheduling_attempts_bucket{le="1"} 79 scheduler_pod_scheduling_attempts_bucket{le="2"} 79 scheduler_pod_scheduling_attempts_bucket{le="4"} 79 scheduler_pod_scheduling_attempts_bucket{le="8"} 79 scheduler_pod_scheduling_attempts_bucket{le="16"} 79 scheduler_pod_scheduling_attempts_bucket{le="+Inf"} 81 [...]

Ambil metrik kube-controller-manager

Untuk mengambil kube-controller-manager metrik, gunakan perintah berikut.

kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"

Contoh output adalah sebagai berikut.

[...] workqueue_work_duration_seconds_sum{name="pvprotection"} 0 workqueue_work_duration_seconds_count{name="pvprotection"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-08"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-07"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-06"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-06"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-05"} 19 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.001"} 109 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.01"} 139 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.1"} 181 workqueue_work_duration_seconds_bucket{name="replicaset",le="1"} 191 workqueue_work_duration_seconds_bucket{name="replicaset",le="10"} 191 workqueue_work_duration_seconds_bucket{name="replicaset",le="+Inf"} 191 workqueue_work_duration_seconds_sum{name="replicaset"} 4.265655885000002 [...]

Memahami metrik scheduler dan controller manager

Tabel berikut menjelaskan metrik scheduler dan controller manager yang tersedia untuk Prometheus gaya menggores. Untuk informasi selengkapnya tentang metrik ini, lihat Referensi Metrik Kubernetes di Kubernetes dokumentasi.

Metrik Komponen bidang kontrol Deskripsi

scheduler_pending_pods

penjadwal

Jumlah Pod yang menunggu untuk dijadwalkan ke sebuah node untuk dieksekusi.

scheduler_schedule_attempts_total

penjadwal

Jumlah upaya yang dilakukan untuk menjadwalkan Pod.

scheduler_preemption_attempts_total

penjadwal

Jumlah upaya yang dilakukan oleh penjadwal untuk menjadwalkan Pod prioritas yang lebih tinggi dengan mengusir Pod prioritas yang lebih rendah.

scheduler_preemption_victims

penjadwal

Jumlah Pod yang telah dipilih untuk penggusuran untuk memberi ruang bagi Pod dengan prioritas yang lebih tinggi.

scheduler_pod_scheduling_attempts

penjadwal

Jumlah upaya untuk berhasil menjadwalkan sebuah Pod.

scheduler_scheduling_attempt_duration_seconds

penjadwal

Menunjukkan seberapa cepat atau lambat scheduler dapat menemukan tempat yang cocok untuk menjalankan Pod berdasarkan berbagai faktor seperti ketersediaan sumber daya dan aturan penjadwalan.

scheduler_pod_scheduling_sli_duration_seconds

penjadwal

end-to-endLatensi untuk Pod sedang dijadwalkan, sejak Pod memasuki antrean penjadwalan. Ini mungkin melibatkan beberapa upaya penjadwalan.

kube_pod_resource_request

penjadwal

Sumber daya yang diminta oleh beban kerja pada klaster, dipecah oleh Pod. Ini menunjukkan penggunaan sumber daya yang diharapkan oleh scheduler dan kubelet per Pod untuk sumber daya bersama dengan unit untuk sumber daya jika ada.

kube_pod_resource_limit

penjadwal

Batas sumber daya untuk beban kerja di klaster, dipecah berdasarkan Pod. Ini menunjukkan penggunaan sumber daya yang diharapkan oleh scheduler dan kubelet per Pod untuk sumber daya bersama dengan unit untuk sumber daya jika ada.

cronjob_controller_job_creation_skew_duration_seconds

manajer pengontrol

Waktu antara kapan cronjob dijadwalkan untuk dijalankan, dan saat pekerjaan yang sesuai dibuat.

workqueue_depth

manajer pengontrol

Kedalaman antrian saat ini.

workqueue_adds_total

manajer pengontrol

Jumlah total penambahan ditangani oleh workqueue.

workqueue_queue_duration_seconds

manajer pengontrol

Waktu dalam hitungan detik item tetap berada dalam antrean kerja sebelum diminta.

workqueue_work_duration_seconds

manajer pengontrol

Waktu dalam hitungan detik memproses item dari antrean kerja membutuhkan waktu.

Terapkan scraper Prometheus untuk mengikis metrik secara konsisten

Untuk menerapkan scraper Prometheus untuk mengikis metrik secara konsisten, gunakan konfigurasi berikut:

--- apiVersion: v1 kind: ConfigMap metadata: name: prometheus-conf data: prometheus.yml: |- global: scrape_interval: 30s scrape_configs: # apiserver metrics - job_name: apiserver-metrics kubernetes_sd_configs: - role: endpoints scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https # Scheduler metrics - job_name: 'ksh-metrics' kubernetes_sd_configs: - role: endpoints metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https # Controller Manager metrics - job_name: 'kcm-metrics' kubernetes_sd_configs: - role: endpoints metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https --- apiVersion: v1 kind: Pod metadata: name: prom-pod spec: containers: - name: prom-container image: prom/prometheus ports: - containerPort: 9090 volumeMounts: - name: config-volume mountPath: /etc/prometheus/ volumes: - name: config-volume configMap: name: prometheus-conf

Izin yang mengikuti diperlukan untuk Pod untuk mengakses endpoint metrik baru.

{ "effect": "allow", "apiGroups": [ "metrics.eks.amazonaws.com" ], "resources": [ "kcm/metrics", "ksh/metrics" ], "verbs": [ "get" ] },

Untuk menambal peran yang digunakan, Anda dapat menggunakan perintah berikut.

kubectl patch clusterrole <role-name> --type=json -p='[ { "op": "add", "path": "/rules/-", "value": { "verbs": ["get"], "apiGroups": ["metrics.eks.amazonaws.com"], "resources": ["kcm/metrics", "ksh/metrics"] } } ]'

Kemudian Anda dapat melihat Prometheus dasbor dengan mem-proxy port dari Prometheus scraper ke port lokal Anda.

kubectl port-forward pods/prom-pod 9090:9090

Untuk EKS klaster Amazon Anda, metrik bidang kontrol Kubernetes inti juga dimasukkan ke dalam Metrik Amazon CloudWatch di bawah namespace. AWS/EKS Untuk melihatnya, buka CloudWatch konsol dan pilih Semua metrik dari panel navigasi kiri. Pada halaman pemilihan Metrik, pilih AWS/EKS namespace dan dimensi metrik untuk klaster Anda.