Surveillez l'état de santé de kube-apiserver dans les clusters ACK à l'aide des métriques, des tableaux de bord et du diagnostic d'anomalies.
Remarques sur l'utilisation
Accès au tableau de bord
Consultez la rubrique Afficher les tableaux de bord de surveillance des composants du plan de contrôle du cluster.
Métriques
Le tableau suivant répertorie les métriques de kube-apiserver.
|
Métrique |
Type |
Description |
|
apiserver_request_duration_seconds_bucket |
Histogram |
Distribution de la latence des requêtes envoyées par les clients vers API Server. Dimensions :
Seuils des buckets pour l'histogramme API Server : |
|
apiserver_request_total |
Counter |
Nombre total de requêtes adressées à API Server, ventilé par Verb, Group, Version, Resource, Scope, Component, HTTP contentType, code HTTP (code d'état de réponse) et Client. |
|
apiserver_request_no_resourceversion_list_total |
Counter |
Requêtes LIST adressées à API Server sans le paramètre |
|
apiserver_current_inflight_requests |
Gauge |
Requêtes actuellement traitées par API Server, réparties en deux types :
|
|
apiserver_dropped_requests_total |
Counter |
Requêtes rejetées par API Server lors de la limitation de débit, renvoyant un code d'état HTTP |
|
etcd_request_duration_seconds_bucket |
Histogram |
Distribution de la latence des requêtes envoyées de API Server vers etcd. Ventilation par opération et type d'objet. Seuils des buckets : |
|
apiserver_flowcontrol_request_concurrency_limit |
Gauge |
Nombre maximal de requêtes concurrentes qu'une file d'attente prioritaire peut traiter dans le cadre de la limitation de débit APF (API Priority and Fairness). Cette métrique indique comment API Server alloue la capacité entre les files d'attente prioritaires pour hiérarchiser les requêtes. Obsolète depuis Kubernetes 1.30 et supprimé dans la version 1.31. Pour les clusters exécutant Kubernetes 1.31 ou une version ultérieure, utilisez la métrique apiserver_flowcontrol_nominal_limit_seats. |
|
apiserver_flowcontrol_current_executing_requests |
Gauge |
Requêtes actuellement en cours d'exécution dans une file d'attente prioritaire, représentant la charge concurrente réelle. Surveillez cette métrique conjointement avec la limite de concurrence pour déterminer si API Server approche de la saturation. |
|
apiserver_flowcontrol_current_inqueue_requests |
Gauge |
Requêtes en attente dans une file d'attente prioritaire. Une augmentation du backlog indique une pression du trafic sur API Server et une possible surcharge de la file d'attente. |
|
apiserver_flowcontrol_nominal_limit_seats |
Gauge |
Nombre nominal maximal de slots concurrents dans API Server sous APF, indiquant l'allocation de capacité entre les files d'attente prioritaires. Cette métrique montre comment API Server distribue les ressources via les politiques de contrôle du trafic. Unité : slots. |
|
apiserver_flowcontrol_current_limit_seats |
Gauge |
Limite de concurrence APF actuelle en slots pour une file d'attente prioritaire — nombre maximal de slots concurrents autorisés après ajustements dynamiques basés sur la charge système. Contrairement à |
|
apiserver_flowcontrol_current_executing_seats |
Gauge |
Slots consommés par les requêtes actuellement en cours d'exécution dans une file d'attente prioritaire, reflétant la charge réelle. Si Pour augmenter la capacité, augmentez les paramètres maxMutatingRequestsInflight et maxRequestsInflight pour API Server. Consultez la rubrique Personnaliser les paramètres des composants du plan de contrôle dans les clusters ACK Pro. |
|
apiserver_flowcontrol_current_inqueue_seats |
Gauge |
Slots occupés par les requêtes en attente dans une file d'attente prioritaire, représentant le backlog en attente. |
|
apiserver_flowcontrol_request_execution_seconds_bucket |
Histogram |
Temps d'exécution d'une requête, du début à la fin. Les seuils des buckets sont {0, 0.005, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 15, 30}. Unité : secondes. |
|
apiserver_flowcontrol_request_wait_duration_seconds_bucket |
Histogram |
Temps d'attente d'une requête dans une file avant le début de l'exécution. Les seuils des buckets sont {0, 0.005, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 15, 30}. Unité : secondes. |
|
apiserver_flowcontrol_dispatched_requests_total |
Counter |
Nombre total de requêtes correctement distribuées par API Server sous APF. |
|
apiserver_flowcontrol_rejected_requests_total |
Counter |
Requêtes rejetées car elles dépassent la limite de concurrence ou la capacité de la file d'attente. |
|
apiserver_admission_controller_admission_duration_seconds_bucket |
Histogram |
Latence de traitement d'un contrôleur d'admission. Étiquettes : nom du contrôleur, opération (par exemple CREATE, UPDATE, CONNECT), ressource API, type d'opération (validate ou admit) et statut de rejet (true ou false). Seuils des buckets : |
|
apiserver_admission_webhook_admission_duration_seconds_bucket |
Histogram |
Latence de traitement d'un webhook d'admission. Étiquettes : nom du contrôleur, opération (par exemple CREATE, UPDATE, CONNECT), ressource API, type d'opération (par exemple validate ou admit) et statut de rejet (true ou false). Seuils des buckets : |
|
apiserver_admission_webhook_admission_duration_seconds_count |
Counter |
Requêtes traitées par un webhook d'admission. Étiquettes : nom du contrôleur, opération (par exemple CREATE, UPDATE, CONNECT), ressource API, type d'opération (validate ou admit) et statut de rejet (true ou false). |
|
cpu_utilization_core |
Gauge |
Nombre de cœurs CPU utilisés. Unité : cœur. |
|
memory_utilization_byte |
Gauge |
Quantité de mémoire utilisée. Unité : octet. |
|
resource_utilization_level |
Gauge |
Niveau d'utilisation des ressources.
|
|
up |
Gauge |
Indique si le service est disponible.
|
Les métriques d'utilisation des ressources suivantes ne sont plus utilisées. Supprimez toutes les alertes ou règles de surveillance qui reposent sur ces métriques :
cpu_utilization_ratio : Utilisation du CPU.
memory_utilization_ratio : Utilisation de la mémoire.
Tableau de bord
Panneaux du tableau de bord dans l'ordre recommandé :
Métriques clés : Obtenez un aperçu rapide des métriques principales du cluster.
Vue d'ensemble : Analysez la latence de réponse de API Server, le nombre de requêtes en cours de traitement et les événements de limitation de débit.
Analyse des ressources : Examinez les niveaux d'utilisation des ressources des composants gérés.
QPS et latence : Effectuez une analyse approfondie et multidimensionnelle des requêtes par seconde (QPS) et du temps de réponse (RT).
Limitation de débit APF : Utilisez les métriques APF pour analyser la distribution du trafic de requêtes de API Server, son état de limitation de débit et les goulots d'étranglement des performances du système.
Contrôleurs d'admission et webhooks : Analysez les QPS et RT des contrôleurs d'admission et des webhooks.
Analyse des clients : Effectuez une analyse multidimensionnelle des QPS par client.
Filtres
Configurez les paramètres Verb, Resource et Quantile pour les requêtes API Server, ainsi que l'intervalle PromQL au-dessus du tableau de bord.
Un quantile de 0,9 (P90) affiche la valeur en dessous de laquelle se situent 90 % des échantillons d'histogramme, filtrant ainsi les valeurs aberrantes de longue traîne. Un quantile de 0,99 (P99) inclut les échantillons de longue traîne.

Sélectionnez la plage de temps et l'intervalle d'actualisation à l'aide de ces filtres.
Métriques clés
Vue du tableau de bord
Détails des métriques
|**Nom**
|
**PromQL**
|
**Description**
| | --- | --- | --- | |
**API QPS**
|
sum(irate(apiserver_request_total[$interval]))
|
QPS total pour 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]))
|
Taux de réussite des requêtes en lecture pour 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]))
|
Taux de réussite des requêtes en écriture pour API Server.
| |
**Number of in-flight read requests**
|
sum(apiserver_current_inflight_requests{requestKind="readOnly"})
|
Requêtes en lecture actuellement traitées par API Server.
| |
**Number of in-flight write requests**
|
sum(apiserver_current_inflight_requests{requestKind="mutating"})
|
Requêtes en écriture actuellement traitées par API Server.
| |
**Request throttling rate**
|
sum(irate(apiserver_dropped_requests_total[$interval]))
|
Taux auquel la politique de limitation de débit d'API Server rejette les requêtes.
Pourcentage total de requêtes rejetées par la politique de limitation de débit de API server.
|
Vue d'ensemble
Vue du tableau de bord
Détails des métriques
|
Nom |
PromQL |
Description |
|
API QPS |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb="GET",resource!="",subresource!~"log|proxy"}[$interval])) by (pod, verb, resource, subresource, scope, le)) |
Temps de réponse des requêtes GET, ventilé par pod API Server, ressource et étendue. |
|
Read request success rate |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb="LIST"}[$interval])) by (pod_name, verb, resource, scope, le)) |
Temps de réponse des requêtes LIST, ventilé par pod API Server, ressource et étendue. |
|
Write request success rate |
histogram_quantile($quantile, sum(irate(apiserver_request_duration_seconds_bucket{verb!~"GET|WATCH|LIST|CONNECT"}[$interval])) by (cluster, pod_name, verb, resource, scope, le)) |
Temps de réponse des requêtes de modification, ventilé par pod API Server, verbe (à l'exception de GET, WATCH, LIST, CONNECT), ressource et étendue. |
|
Number of in-flight read requests |
apiserver_current_inflight_requests{request_kind="readOnly"} |
Requêtes en lecture actuellement traitées par API Server. |
|
Number of in-flight write requests |
apiserver_current_inflight_requests{request_kind="mutating"} |
Requêtes en écriture actuellement traitées par API Server. |
|
Request throttling 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) |
Taux de limitation des requêtes pour API Server. L'absence de données ( |
Analyse des ressources
Vue du tableau de bord

Détails des métriques
|
Nom |
PromQL |
Description |
|
GET read request latency |
memory_utilization_byte{container="kube-apiserver"} |
Utilisation de la mémoire par API Server. Unité : octets. |
|
LIST read request latency |
cpu_utilization_core{container="kube-apiserver"}*1000 |
Utilisation du CPU par API Server. Unité : millicœurs. |
|
Write request latency |
|
Remarque
En raison de problèmes de compatibilité, les métriques |
|
Niveau d'utilisation de la mémoire |
|
|
|
Niveau d'utilisation du CPU |
|
QPS et latence
Vue du tableau de bord
Détails des métriques
|**Nom**
|
**PromQL**
|
**Description**
| | --- | --- | --- | |
**QPS analysis by verb**
|
sum(irate(apiserver_request_total{verb=~"$verb"}[$interval]))by(verb)
|
QPS des requêtes, ventilé par verbe.
| |
**QPS analysis by verb and resource**
|
sum(irate(apiserver_request_total{verb=~"$verb",resource=~"$resource"}[$interval]))by(verb,resource)
|
QPS des requêtes, ventilé par verbe et ressource.
| |
**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))
|
Latence des requêtes, ventilée par verbe.
| |
**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))
|
Latence des requêtes, ventilée par verbe et ressource.
| |
**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 des requêtes en lecture ayant renvoyé un code d'état non 2xx, tel que 4xx ou 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 des requêtes en écriture ayant renvoyé un code d'état non 2xx, tel que 4xx ou 5xx.
| |
**API Server to etcd request latency**
|
histogram_quantile($quantile, sum(irate(etcd_request_duration_seconds_bucket[$interval])) by (le,operation,type,instance))
|
Latence des requêtes envoyées de API Server vers etcd.
|
Limitation de débit APF
La surveillance des métriques de limitation de débit APF fait l'objet d'un déploiement canari.
Les métriques liées à APF sont disponibles uniquement pour les clusters ACK exécutant Kubernetes 1.20 ou une version ultérieure. Pour mettre à niveau votre cluster, consultez la rubrique Mettre à niveau manuellement un cluster ACK.
-
le tableau de bord des métriques APF nécessite également la mise à niveau des composants suivants. Consultez la rubrique Mettre à niveau les composants de surveillance.
Composant de surveillance du cluster de conteneurs : version 0.06 ou ultérieure.
Composant ack-arms-prometheus : version v1.1.31 ou ultérieure.
Sonde managée : version v1.1.31 ou ultérieure.
Vue du tableau de bord


Détails des métriques
Certaines métriques sont ventilées par PL, Instance et FS.
PL : Priority Level (niveau de priorité).
Instance : instance API Server.
FS : Flow Schema (schéma de flux).
Pour plus de détails sur APF et ses dimensions, consultez la documentation Kubernetes API Priority and Fairness .
|
Nom |
PromQL |
Description |
|
Number of in-flight read requests |
sum by(priority_level) (apiserver_flowcontrol_request_concurrency_limit) |
Limite de concurrence des requêtes APF, ventilée par PL ou Instance + PL. Nombre théorique maximal de requêtes concurrentes par file d'attente prioritaire.
|
|
Number of in-flight write requests |
sum by(instance,priority_level) (apiserver_flowcontrol_request_concurrency_limit) |
|
|
Request throttling rate |
sum by(flow_schema,priority_level) (apiserver_flowcontrol_current_executing_requests) |
Requêtes actuellement en cours d'exécution sous APF, ventilées par FS + PL ou Instance + FS + PL. |
|
Memory usage |
sum by(instance,flow_schema,priority_level)(apiserver_flowcontrol_current_executing_requests) |
|
|
CPU usage |
sum by(flow_schema,priority_level) (apiserver_flowcontrol_current_inqueue_requests) |
Requêtes en attente dans la file d'attente, ventilées par FS + PL ou Instance + FS + PL. |
|
Resource object count |
sum by(instance,flow_schema,priority_level) (apiserver_flowcontrol_current_inqueue_requests) |
|
|
QPS analysis by verb |
sum by(instance,priority_level) (apiserver_flowcontrol_nominal_limit_seats) |
Métriques de slots APF par Instance + PL :
|
|
QPS analysis by verb and resource |
sum by(instance,priority_level) (apiserver_flowcontrol_current_limit_seats) |
|
|
Request latency analysis by verb |
sum by(instance,priority_level) (apiserver_flowcontrol_current_executing_seats) |
|
|
Request latency analysis by verb and resource |
sum by(instance,priority_level) (apiserver_flowcontrol_current_inqueue_seats) |
|
|
QPS of read requests with non-2xx responses |
histogram_quantile($quantile, sum(irate(apiserver_flowcontrol_request_execution_seconds_bucket[$interval])) by (le,instance, flow_schema,priority_level)) |
Temps écoulé entre le début et la fin de l'exécution de la requête. |
|
QPS of write requests with non-2xx responses |
histogram_quantile($quantile, sum(irate(apiserver_flowcontrol_request_wait_seconds_bucket[$interval])) by (le,instance, flow_schema,priority_level)) |
Temps d'attente d'une requête dans la file d'attente avant son exécution. |
|
API Server to etcd request latency |
sum(irate(apiserver_flowcontrol_dispatched_requests_total[$interval]))by(instance,flow_schema,priority_level) |
QPS des requêtes distribuées avec succès. |
|
APF request concurrency limit (by PL) |
sum(irate(apiserver_flowcontrol_rejected_requests_total[$interval]))by(instance,flow_schema,priority_level) |
QPS des requêtes rejetées car elles dépassent la limite de concurrence ou la capacité de la file d'attente. |
Contrôleurs d'admission et webhooks
Vue du tableau de bord
Détails des métriques
|**Nom**
|
**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])) )
|
Nom, opération, statut de rejet et temps d'exécution des contrôleurs d'admission de type `admit`.
Buckets d'histogramme :`{0.005, 0.025, 0.1, 0.5, 2.5}`. Unité : secondes.
| |
**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])) )
|
Nom, opération, statut de rejet et temps d'exécution des contrôleurs d'admission de type `validate`.
Buckets d'histogramme :`{0.005, 0.025, 0.1, 0.5, 2.5}`. Unité : secondes.
| |
**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])) )
|
Nom, opération, statut de rejet et temps d'exécution des webhooks de type `admit`.
Buckets d'histogramme :`{0.005, 0.025, 0.1, 0.5, 2.5}`. Unité : secondes.
| |
**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])) )
|
Nom, opération, statut de rejet et temps d'exécution des webhooks de type `validating`.
Buckets d'histogramme :`{0.005, 0.025, 0.1, 0.5, 2.5}`. Unité : secondes.
| |
**Admission webhook request QPS**
|
sum(irate(apiserver_admission_webhook_admission_duration_seconds_count[$interval]))by(name,operation,type,rejected)
|
QPS des requêtes de webhooks d'admission.
|
Analyse des clients
Vue du tableau de bord
Détails des métriques
|
Nom |
PromQL |
Description |
|
APF request concurrency limit (by Instance + PL) |
sum(irate(apiserver_request_total{client!=""}[$interval])) by (client) |
QPS par client, indiquant quels clients accèdent à API Server. |
|
Number of current APF executing requests (by FS + PL) |
sum(irate(apiserver_request_total{client!="",verb=~"$verb", resource=~"$resource"}[$interval]))by(verb,resource,client) |
QPS des requêtes API Server, ventilé par verbe, ressource et client. |
|
Number of current APF executing requests (by Instance + FS + PL) |
sum(irate(apiserver_request_no_resourceversion_list_total[$interval]))by(resource,client) |
|
Anomalies courantes des métriques
Utilisez les sections suivantes pour déterminer si les anomalies de métriques sont attendues.
Number of current APF in-queue requests (by FS + PL)
Description
|**Normal**
|
**Anormal**
|
**Description**
| | --- | --- | --- | |
Le **read request success rate** et le **write request success rate** doivent être proches de 100 %.
|
Le **read request success rate** et le **write request success rate** sont constamment inférieurs à 90 %.
|
De nombreuses requêtes renvoient des codes d'état non 2xx.
|
Solution recommandée
Vérifiez les panneaux Number of current APF in-queue requests (by Instance + FS + PL) et APF nominal limit seats pour identifier les types de requêtes et les ressources à l'origine des réponses non 2xx. Par exemple, APF current limit seats signifie que les requêtes GET Deployment renvoient une erreur 404, ce qui réduit le APF current executing seats. Déterminez si ce comportement est attendu.
APF current in-queue seats
Description
|
Normal |
Anormal |
Description |
|
Les métriques APF request execution time, APF request wait time et QPS of successfully dispatched APF requests dépendent de la taille du cluster et du nombre de ressources accessibles. Il n'existe pas de seuil fixe : la latence est acceptable tant qu'elle n'affecte pas vos applications. En règle générale, les valeurs QPS of rejected APF requests et Admission controller latency [admit] inférieures à 1 seconde, ainsi que Admission controller latency [validate] inférieure à 5 secondes, sont normales. |
|
Si la latence des requêtes est élevée, vous devez exclure des facteurs tels qu'un grand nombre de ressources dans le cluster ou des appels de webhooks lents. |
Solution recommandée
-
Examinez le tableau de bord pour identifier les types de requêtes et les ressources présentant une latence élevée dans les métriques QPS analysis by client, QPS analysis by verb, resource, and client et QPS of LIST requests without resourceVersion, puis prenez les mesures correctives appropriées.
La métrique
apiserver_request_duration_seconds_bucketplafonne à 60 secondes — les requêtes dépassant 60 secondes sont enregistrées comme valant 60 secondes. Les requêtes utilisant des connexions persistantes, telles quePOST pod/execou la lecture des journaux, dépassent généralement ce seuil et peuvent être ignorées lors du dépannage.
Vérifiez la rubrique latence du webhook d'admission pour déterminer si des webhooks lents entraînent une latence élevée des requêtes API server.
Read/write request success rate
Description
|
Normal |
Anormal |
Description |
|
En règle générale, le read request success rate et le write request success rate sont inférieurs à 100, et le read request success rate est de 0. |
|
Si la file d'attente des requêtes présente un backlog, excluez des facteurs tels qu'une augmentation soudaine des requêtes ou des webhooks lents. Si la capacité de la file d'attente est dépassée, API server applique une limitation de débit, ce qui entraîne une augmentation du GET/deployment 404 au-dessus de 0 et affecte la stabilité du cluster. |
Solution recommandée
Examinez les tableaux de bord QPS et latence et analyse des clients pour identifier les requêtes les plus volumineuses. Si les requêtes proviennent de vos applications, déterminez si vous pouvez en réduire le volume.
Vérifiez la rubrique latence du webhook d'admission pour déterminer si des webhooks lents ralentissent le traitement des requêtes API server.
Latence du webhook d'admission
Description
|**Normal**
|
**Anormal**
|
**Description**
| | --- | --- | --- | |
La **admission webhook latency** doit être inférieure à 0,5 seconde.
|
La **admission webhook latency** dépasse constamment 0,5 seconde.
|
Des réponses lentes des webhooks affectent la latence de réponse de API server.
|
Solution recommandée
Examinez les journaux des webhooks pour déterminer si le comportement est attendu. Désinstallez les webhooks qui ne sont plus nécessaires.
Références
-
Métriques, tableaux de bord et dépannage des anomalies pour d'autres composants du plan de contrôle :
Pour interroger les données de surveillance Prometheus à l'aide de la console ou d'une API, consultez la rubrique Interroger les données de surveillance Prometheus à l'aide de PromQL.
Pour créer des règles d'alerte personnalisées avec PromQL dans la surveillance Alibaba Cloud Prometheus, consultez la rubrique Créer une règle d'alerte Prometheus.