Pantau kesehatan kube-apiserver di kluster ACK. Komponen ini menyediakan RESTful API Kubernetes yang memungkinkan klien eksternal dan komponen internal kluster berinteraksi dengannya. Gunakan daftar metrik, panduan dasbor, dan analisis anomali dalam topik ini untuk mendiagnosis masalah.
Catatan penggunaan
Akses dasbor
Lihat Lihat dasbor komponen lapisan kontrol.
Metrik
Metrik merupakan salah satu cara komponen mengekspos status dan parameternya. Tabel berikut mencantumkan metrik kube-apiserver.
|
Metric |
Type |
Description |
|
apiserver_request_duration_seconds_bucket |
Histogram |
Distribusi latensi permintaan klien ke API Server. Dimensi:
Ambang batas bucket untuk histogram API Server: |
|
apiserver_request_total |
Counter |
Total permintaan API Server, dikelompokkan berdasarkan Verb, Group, Version, Resource, Scope, Component, HTTP contentType, kode HTTP (kode status respons), dan Client. |
|
apiserver_request_no_resourceversion_list_total |
Counter |
Permintaan LIST ke API Server tanpa parameter |
|
apiserver_current_inflight_requests |
Gauge |
Permintaan yang sedang diproses oleh API Server. Permintaan ini terbagi menjadi dua jenis:
|
|
apiserver_dropped_requests_total |
Counter |
Permintaan yang dibuang oleh API Server selama throttling, mengembalikan kode status HTTP |
|
etcd_request_duration_seconds_bucket |
Histogram |
Distribusi latensi permintaan dari API Server ke etcd. Dikelompokkan berdasarkan operasi dan jenis objek. Ambang batas bucket: |
|
apiserver_storage_db_size_in_use_quota_bytes |
Gauge |
Kuota penyimpanan yang dikonfigurasi untuk database etcd. Permintaan tulis akan ditolak ketika batas ini tercapai. Satuan: byte. |
|
apiserver_storage_db_size_in_use_bytes |
Gauge |
Jumlah penyimpanan data yang saat ini digunakan oleh etcd. Satuan: byte. |
|
apiserver_flowcontrol_request_concurrency_limit |
Gauge |
Jumlah teoretis maksimum permintaan yang dapat diproses secara konkuren oleh antrian prioritas di bawah mekanisme API Priority and Fairness (APF). Menunjukkan bagaimana API Server menggunakan kebijakan pengendalian trafik untuk mengalokasikan kapasitas di seluruh antrian prioritas agar permintaan prioritas tinggi diproses tanpa penundaan. Usang di Kubernetes 1.30 dan dihapus di 1.31. Untuk kluster yang menjalankan Kubernetes 1.31 atau lebih baru, gunakan metrik apiserver_flowcontrol_nominal_limit_seats sebagai gantinya. |
|
apiserver_flowcontrol_current_executing_requests |
Gauge |
Permintaan yang sedang dieksekusi dalam antrian prioritas, merepresentasikan beban konkuren aktual. Pantau bersama batas konkurensi untuk menentukan apakah API Server mendekati titik jenuh. |
|
apiserver_flowcontrol_current_inqueue_requests |
Gauge |
Permintaan yang menunggu dalam antrian prioritas. Antrean yang terus bertambah menunjukkan tekanan trafik pada API Server dan kemungkinan kelebihan beban antrian. |
|
apiserver_flowcontrol_nominal_limit_seats |
Gauge |
Jumlah kursi konkuren nominal maksimum di API Server di bawah APF, menunjukkan bagaimana kebijakan pengendalian trafik mengalokasikan kapasitas di seluruh antrian prioritas. Satuan: seats. |
|
apiserver_flowcontrol_current_limit_seats |
Gauge |
Batas konkurensi APF saat ini dalam satuan seats untuk antrian prioritas—jumlah maksimum seats konkuren yang diizinkan setelah penyesuaian dinamis. Nilai ini mencerminkan kapasitas konkurensi aktual antrian dan dapat berubah secara dinamis karena beban sistem atau faktor lainnya. Berbeda dengan |
|
apiserver_flowcontrol_current_executing_seats |
Gauge |
Seats yang dikonsumsi oleh permintaan yang sedang dieksekusi dalam antrian prioritas, mencerminkan beban aktual. Jika Untuk mengoptimalkan konfigurasi, tingkatkan nilai maxMutatingRequestsInflight dan maxRequestsInflight untuk API Server. Lihat Sesuaikan parameter komponen lapisan kontrol di kluster ACK Pro. |
|
apiserver_flowcontrol_current_inqueue_seats |
Gauge |
Seats yang ditempati oleh permintaan yang menunggu dalam antrian prioritas, merepresentasikan antrean tertunda. |
|
apiserver_flowcontrol_request_execution_seconds_bucket |
Histogram |
Waktu eksekusi permintaan, dari awal hingga selesai. Ambang batas bucket adalah {0, 0.005, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 15, 30}. Satuan: detik. |
|
apiserver_flowcontrol_request_wait_duration_seconds_bucket |
Histogram |
Waktu tunggu permintaan dalam antrian sebelum eksekusi dimulai. Ambang batas bucket adalah {0, 0.005, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 15, 30}. Satuan: detik. |
|
apiserver_flowcontrol_dispatched_requests_total |
Counter |
Total permintaan yang berhasil didispatch oleh API Server di bawah APF. |
|
apiserver_flowcontrol_rejected_requests_total |
Counter |
Permintaan yang ditolak karena melebihi batas konkurensi atau kapasitas antrian. |
|
apiserver_admission_controller_admission_duration_seconds_bucket |
Histogram |
Latensi pemrosesan admission controller. Label: nama controller, operasi (seperti CREATE, UPDATE, CONNECT), resource API, jenis operasi, dan status penolakan (true atau false). Jenis operasi adalah validate, yang memeriksa validitas permintaan, atau admit, yang menentukan apakah permintaan valid diizinkan. Ambang batas bucket: |
|
apiserver_admission_webhook_admission_duration_seconds_bucket |
Histogram |
Latensi pemrosesan admission webhook. Label: nama webhook, operasi (seperti CREATE, UPDATE, CONNECT), resource API, jenis operasi (admit atau validating), dan status penolakan (true atau false). Ambang batas bucket: |
|
apiserver_admission_webhook_admission_duration_seconds_count |
Counter |
Permintaan yang diproses oleh admission webhook. Label: nama webhook, operasi (seperti CREATE, UPDATE, CONNECT), resource API, jenis operasi (admit atau validating), dan status penolakan (true atau false). |
|
cpu_utilization_core |
Gauge |
Jumlah core CPU yang digunakan. Satuan: core. |
|
memory_utilization_byte |
Gauge |
Jumlah memori yang digunakan. Satuan: byte. |
|
resource_utilization_level |
Gauge |
Tingkat pemanfaatan resource.
|
|
up |
Gauge |
Menunjukkan apakah layanan tersedia.
|
Metrik pemanfaatan resource berikut tidak lagi digunakan. Hapus semua alert atau aturan pemantauan yang bergantung pada metrik ini:
cpu_utilization_ratio: Pemanfaatan CPU.
memory_utilization_ratio: Pemanfaatan memori.
Dasbor
Dasbor dibangun dari metrik komponen dan kueri PromQL terkait.
Panel dasbor diurutkan berdasarkan penggunaan paling umum:
-
Metrik Utama: Dapatkan ikhtisar cepat metrik kluster utama.
-
Ikhtisar: Analisis latensi respons API Server, jumlah permintaan yang sedang berjalan, dan peristiwa throttling apa pun.
-
Analisis Resource: Tinjau tingkat pemanfaatan resource komponen terkelola.
-
QPS dan Latensi: Lakukan analisis multidimensi mendalam terhadap queries per second (QPS) dan waktu respons (RT).
-
Throttling APF: Gunakan metrik APF untuk menganalisis distribusi trafik permintaan API Server, status throttling-nya, dan bottleneck kinerja sistem.
-
Admission Controller dan Webhook: Analisis QPS dan RT admission controller serta webhook.
-
Analisis Klien: Lakukan analisis multidimensi QPS berdasarkan klien.
Filter
Gunakan filter di atas dasbor untuk mengonfigurasi Verb, Resource, dan Quantile untuk permintaan API Server, serta interval sampling PromQL yang digunakan panel.
Kuantil 0,9 (P90) menunjukkan nilai di mana 90% sampel histogram berada di bawah atau sama dengannya, sehingga menghilangkan outlier ekor panjang. Kuantil 0,99 (P99) mencakup sampel ekor panjang.
Gunakan filter berikut untuk memilih rentang waktu dan interval refresh.
Metrik utama
Tampilan dasbor
Detail metrik
|
Name |
PromQL |
Description |
|
API QPS |
sum(irate(apiserver_request_total[$interval])) |
Total QPS untuk API Server. |
|
Read request success rate |
sum(irate(apiserver_request_total{code=~"20.*",verb=~"GET|LIST"}[$interval]))/sum(irate(apiserver_request_total{verb=~"GET|LIST"}[$interval])) |
Tingkat keberhasilan permintaan baca untuk API Server. |
|
Write request success rate |
sum(irate(apiserver_request_total{code=~"20.*",verb!~"GET|LIST|WATCH|CONNECT"}[$interval]))/sum(irate(apiserver_request_total{verb!~"GET|LIST|WATCH|CONNECT"}[$interval])) |
Tingkat keberhasilan permintaan tulis untuk API Server. |
|
Number of read requests processed |
sum(apiserver_current_inflight_requests{requestKind="readOnly"}) |
Permintaan baca yang sedang berjalan. |
|
Number of write requests processed |
sum(apiserver_current_inflight_requests{requestKind="mutating"}) |
Permintaan tulis yang sedang berjalan. |
|
Request limit rate |
sum(irate(apiserver_dropped_requests_total[$interval])) |
Persentase total permintaan yang dibuang oleh kebijakan throttling API server. |
Ikhtisar
Tampilan dasbor
Detail metrik
|
Name |
PromQL |
Description |
|
GET read request latency |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb="GET",resource!="",subresource!~"log|proxy"}[$interval])) by (pod, verb, resource, subresource, scope, le)) |
Waktu respons permintaan GET, dikelompokkan berdasarkan pod API Server, resource, dan cakupan. |
|
LIST read request latency |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb="LIST"}[$interval])) by (pod_name, verb, resource, scope, le)) |
Waktu respons permintaan LIST, dikelompokkan berdasarkan pod API Server, resource, dan cakupan. |
|
Write request latency |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb!~"GET|WATCH|LIST|CONNECT"}[$interval])) by (cluster, pod_name, verb, resource, scope, le)) |
Waktu respons permintaan mutating, dikelompokkan berdasarkan pod API Server, verb (tidak termasuk GET, WATCH, LIST, CONNECT), resource, dan cakupan. |
|
Number of read requests processed |
apiserver_current_inflight_requests{request_kind="readOnly"} |
Permintaan baca yang sedang diproses oleh API Server. |
|
Number of write requests processed |
apiserver_current_inflight_requests{request_kind="mutating"} |
Permintaan tulis yang sedang diproses oleh API Server. |
|
Request limit rate |
sum(irate(apiserver_dropped_requests_total{request_kind="readOnly"}[$interval])) by (name) sum(irate(apiserver_dropped_requests_total{request_kind="mutating"}[$interval])) by (name)
|
Tingkat pembatasan permintaan untuk API Server. |
Analisis resource
Tampilan dasbor
Detail metrik
|
Name |
PromQL |
Description |
|
Memory usage |
memory_utilization_byte{container="kube-apiserver"} |
Penggunaan memori API Server. Satuan: byte. |
|
CPU usage |
cpu_utilization_core{container="kube-apiserver"}*1000 |
Penggunaan CPU API Server. Satuan: millicores. |
|
Resource object count |
|
|
|
Tingkat pemanfaatan memori |
|
|
|
Tingkat pemanfaatan CPU |
|
QPS dan latensi
Tampilan dasbor
Detail metrik
|
Name |
PromQL |
Description |
|
QPS analysis by verb |
sum(irate(apiserver_request_total{verb=~"$verb"}[$interval]))by(verb) |
QPS permintaan, dikelompokkan berdasarkan verb. |
|
QPS analysis by verb and resource |
sum(irate(apiserver_request_total{verb=~"$verb",resource=~"$resource"}[$interval]))by(verb,resource) |
QPS permintaan, dikelompokkan berdasarkan verb dan resource. |
|
Request latency analysis by verb |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb=~"$verb", verb!~"WATCH|CONNECT",resource!=""}[$interval])) by (le,verb)) |
Latensi permintaan, dikelompokkan berdasarkan verb. |
|
Request latency analysis by verb and resource |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb=~"$verb", verb!~"WATCH|CONNECT", resource=~"$resource",resource!=""}[$interval])) by (le,verb,resource)) |
Latensi permintaan, dikelompokkan berdasarkan verb dan resource. |
|
QPS of read requests with non-2xx responses |
sum(irate(apiserver_request_total{verb=~"GET|LIST",resource=~"$resource",code!~"2.*"}[$interval])) by (verb,resource,code) |
QPS permintaan baca yang mengembalikan kode status non-2xx, seperti 4xx atau 5xx. |
|
QPS of write requests with non-2xx responses |
sum(irate(apiserver_request_total{verb!~"GET|LIST|WATCH",verb=~"$verb",resource=~"$resource",code!~"2.*"}[$interval])) by (verb,resource,code) |
QPS permintaan tulis yang mengembalikan kode status non-2xx, seperti 4xx atau 5xx. |
|
API Server to etcd request latency |
histogram_quantile($quantile, sum(irate(etcd_request_duration_seconds_bucket[$interval])) by (le,operation,type,instance)) |
Latensi permintaan dari API Server ke etcd. |
Throttling APF
Pemantauan metrik throttling APF sedang dalam rilis canary.
-
Metrik terkait APF hanya tersedia untuk kluster ACK yang menjalankan Kubernetes 1.20 atau lebih baru. Untuk meningkatkan kluster Anda, lihat Tingkatkan kluster ACK secara manual.
-
dasbor metrik APF juga memerlukan peningkatan add-on berikut:
-
Add-on pemantauan kluster kontainer: versi 0.06 atau lebih baru.
-
Add-on ack-arms-prometheus: v1.1.31 atau lebih baru.
-
Add-on probe terkelola: v1.1.31 atau lebih baru.
Untuk meningkatkan add-on ini, lihat Tingkatkan komponen pemantauan.
-
Tampilan dasbor
Detail metrik
Beberapa metrik dalam tabel berikut dikelompokkan berdasarkan PL, Instance, dan FS.
-
PL: Dimensi Priority Level, yang mengelompokkan metrik berdasarkan level prioritas.
-
Instance: Instans API server.
-
FS: Dimensi Flow Schema, yang mengelompokkan metrik berdasarkan klasifikasi permintaan.
Untuk detail APF dan dimensi, lihat dokumentasi Kubernetes API Priority and Fairness.
|
Name |
PromQL |
Description |
|
APF request concurrency limit (by PL) |
sum by(priority_level) (apiserver_flowcontrol_request_concurrency_limit) |
Batas konkurensi permintaan APF, dikelompokkan berdasarkan PL atau Instance + PL. Ini merepresentasikan jumlah maksimum teoretis permintaan konkuren per antrian prioritas.
|
|
APF request concurrency limit (by Instance + PL) |
sum by(instance,priority_level) (apiserver_flowcontrol_request_concurrency_limit) |
|
|
Number of current APF executing requests (by FS + PL) |
sum by(flow_schema,priority_level) (apiserver_flowcontrol_current_executing_requests) |
Permintaan yang sedang dieksekusi di bawah APF, dikelompokkan berdasarkan FS + PL atau Instance + FS + PL. |
|
Number of current APF executing requests (by Instance + FS + PL) |
sum by(instance,flow_schema,priority_level)(apiserver_flowcontrol_current_executing_requests) |
|
|
Number of current APF in-queue requests (by FS + PL) |
sum by(flow_schema,priority_level) (apiserver_flowcontrol_current_inqueue_requests) |
Permintaan yang menunggu dalam antrean, dikelompokkan berdasarkan FS + PL atau Instance + FS + PL. |
|
Number of current APF in-queue requests (by Instance + FS + PL) |
sum by(instance,flow_schema,priority_level) (apiserver_flowcontrol_current_inqueue_requests) |
|
|
APF nominal limit seats |
sum by(instance,priority_level) (apiserver_flowcontrol_nominal_limit_seats) |
Metrik seat APF berdasarkan Instance + PL:
|
|
APF current limit seats |
sum by(instance,priority_level) (apiserver_flowcontrol_current_limit_seats) |
|
|
APF current executing seats |
sum by(instance,priority_level) (apiserver_flowcontrol_current_executing_seats) |
|
|
APF current in-queue seats |
sum by(instance,priority_level) (apiserver_flowcontrol_current_inqueue_seats) |
|
|
APF request execution time |
histogram_quantile($quantile, sum(irate(apiserver_flowcontrol_request_execution_seconds_bucket[$interval])) by (le,instance, flow_schema,priority_level)) |
Waktu dari awal eksekusi permintaan hingga selesai. |
|
APF request wait time |
histogram_quantile($quantile, sum(irate(apiserver_flowcontrol_request_wait_duration_seconds_bucket[$interval])) by (le,instance, flow_schema,priority_level)) |
Waktu permintaan menunggu dalam antrean sebelum eksekusi. |
|
QPS of successfully dispatched APF requests |
sum(irate(apiserver_flowcontrol_dispatched_requests_total[$interval]))by(instance,flow_schema,priority_level) |
QPS permintaan yang berhasil didispatch. |
|
QPS of rejected APF requests |
sum(irate(apiserver_flowcontrol_rejected_requests_total[$interval]))by(instance,flow_schema,priority_level) |
QPS permintaan yang ditolak karena melebihi batas konkurensi atau kapasitas antrean. |
Admission controller dan webhook
Tampilan dasbor
Detail metrik
|
Name |
PromQL |
Description |
|
Admission controller latency [admit] |
histogram_quantile($quantile, sum by(operation, name, le, type, rejected) (irate(apiserver_admission_controller_admission_duration_seconds_bucket{type="admit"}[$interval])) ) |
Nama, operasi, status penolakan, dan waktu eksekusi admission controller tipe Bucket histogram: |
|
Admission controller latency [validate] |
histogram_quantile($quantile, sum by(operation, name, le, type, rejected) (irate(apiserver_admission_controller_admission_duration_seconds_bucket{type="validate"}[$interval])) ) |
Nama, operasi, status penolakan, dan waktu eksekusi admission controller tipe Bucket histogram: |
|
Admission webhook latency [admit] |
histogram_quantile($quantile, sum by(operation, name, le, type, rejected) (irate(apiserver_admission_webhook_admission_duration_seconds_bucket{type="admit"}[$interval])) ) |
Nama, operasi, status penolakan, dan waktu eksekusi webhook tipe Bucket histogram: |
|
Admission webhook latency [validating] |
histogram_quantile($quantile, sum by(operation, name, le, type, rejected) (irate(apiserver_admission_webhook_admission_duration_seconds_bucket{type="validating"}[$interval])) ) |
Nama, operasi, status penolakan, dan waktu eksekusi webhook tipe Bucket histogram: |
|
Admission webhook request QPS |
sum(irate(apiserver_admission_webhook_admission_duration_seconds_count[$interval]))by(name,operation,type,rejected) |
QPS permintaan admission webhook. |
Analisis klien
Tampilan dasbor
Detail metrik
|
Name |
PromQL |
Description |
|
QPS analysis by client |
sum(irate(apiserver_request_total{client!=""}[$interval])) by (client) |
QPS berdasarkan klien, menunjukkan klien mana yang mengakses API Server. |
|
QPS analysis by verb, resource, and client |
sum(irate(apiserver_request_total{client!="",verb=~"$verb", resource=~"$resource"}[$interval]))by(verb,resource,client) |
QPS permintaan server API, dikelompokkan berdasarkan verb, resource, dan klien. |
|
QPS of LIST requests without resourceVersion |
sum(irate(apiserver_request_no_resourceversion_list_total[$interval]))by(resource,client) |
|
Anomali metrik umum
Gunakan bagian berikut untuk menentukan apakah anomali metrik bersifat wajar.
Read/write request success rate
Description
|
Normal |
Abnormal |
Description |
|
Read request success rate dan Write request success rate seharusnya mendekati 100%. |
Read request success rate dan Write request success rate tetap pada persentase rendah, misalnya kurang dari 90%. |
Banyak permintaan mengembalikan kode status non-2xx. |
Solusi yang direkomendasikan
Periksa panel QPS of read requests with non-2xx responses dan QPS of write requests with non-2xx responses untuk mengidentifikasi jenis permintaan dan resource yang menyebabkan respons non-2xx. Misalnya, GET/deployment 404 berarti permintaan GET Deployment mengembalikan 404, sehingga menurunkan Read request success rate. Tentukan apakah perilaku ini diharapkan, lalu ambil langkah-langkah untuk mengoptimalkan permintaan tersebut.
GET/LIST read and write request latency
Description
|
Normal |
Abnormal |
Description |
|
GET read request latency, LIST read request latency, dan Write request latency berkorelasi dengan ukuran kluster dan jumlah resource yang diakses. Tidak ada ambang batas tetap—latensi dapat diterima selama tidak memengaruhi aplikasi Anda. Misalnya, semakin besar volume resource yang diakses klien, semakin lama permintaan LIST membutuhkan waktu. Biasanya, GET read request latency dan Write request latency di bawah 1 detik, serta LIST read request latency di bawah 5 detik dianggap normal. |
|
Jika latensi permintaan tinggi, periksa apakah faktor seperti jumlah resource kluster yang besar atau panggilan webhook yang lambat turut berkontribusi. |
Solusi yang direkomendasikan
-
Tinjau dasbor untuk mengidentifikasi jenis permintaan dan resource dengan latensi tinggi. Periksa metrik GET read request latency, LIST read request latency, dan Write request latency, lalu ambil tindakan korektif.
Metrik
apiserver_request_duration_seconds_bucketdibatasi hingga 60 detik—permintaan yang melebihi 60 detik dicatat sebagai 60 detik. Permintaan koneksi persisten, sepertiPOST pod/execatau pembacaan log, biasanya melebihi ambang ini dan dapat diabaikan saat troubleshooting.
-
Periksa latensi admission webhook untuk menentukan apakah webhook yang lambat menyebabkan latensi permintaan API server yang tinggi.
Read/write requests processed and request limit rate
Description
|
Normal |
Abnormal |
Description |
|
Umumnya, Number of read requests processed dan Number of write requests processed berada di bawah 100, dan Request limit rate bernilai 0. |
|
Jika antrean permintaan memiliki backlog, singkirkan faktor seperti lonjakan permintaan mendadak atau webhook yang lambat. Jika kapasitas antrean terlampaui, API server akan melakukan throttling terhadap permintaan, menyebabkan Request limit rate naik di atas 0 dan memengaruhi stabilitas kluster. |
Solusi yang direkomendasikan
-
Tinjau dasbor QPS dan latensi serta dasbor Analisis klien untuk mengidentifikasi permintaan teratas berdasarkan volume, dan evaluasi apakah permintaan tersebut diharapkan. Jika permintaan berasal dari aplikasi Anda, tentukan apakah Anda dapat mengurangi volumenya.
-
Periksa latensi admission webhook untuk menentukan apakah webhook yang lambat menyebabkan pemrosesan permintaan API server yang lambat.
Latensi admission webhook
Description
|
Normal |
Abnormal |
Description |
|
Admission webhook latency seharusnya kurang dari 0,5 detik. |
Admission webhook latency terus-menerus melebihi 0,5 detik. |
Respons webhook yang lambat memengaruhi latensi respons API server. |
Solusi yang direkomendasikan
Tinjau log webhook untuk menentukan apakah perilaku tersebut diharapkan. Copot pemasangan webhook yang tidak lagi diperlukan.
Referensi
-
Metrik, dasbor, dan troubleshooting anomali untuk komponen lapisan kontrol lainnya:
-
Untuk mengkueri data pemantauan Prometheus menggunakan konsol atau API, lihat Kueri Data Pemantauan Prometheus Menggunakan PromQL.
-
Untuk membuat aturan alert dengan PromQL kustom di Managed Service for Prometheus, lihat Buat Aturan Alerting Prometheus.