Utiliser les SLI Config Sync

Cette page explique comment utiliser les indicateurs de niveau de service (SLI) de Config Sync.

Pour recevoir des notifications lorsque Config Sync ne fonctionne pas comme prévu, configurez des règles d'alerte Prometheus basées sur ces SLI. Chaque SLI inclut un exemple de création d'une règle d'alerte. Pour en savoir plus sur l'utilisation de Prometheus avec Config Sync, consultez la page Surveiller Config Sync avec des métriques.

Pods Config Sync avec un nombre de conteneurs incorrect

Si le nombre de conteneurs d'un pod Config Sync est inférieur à vos attentes, il se peut que Config Sync ne soit pas en cours d'exécution. Vous pouvez configurer une alerte pour détecter ce problème et inspecter le pod Config Sync pour déterminer pourquoi certains conteneurs sont manquants. Lorsque vous définissez vos alertes, nous vous recommandons de définir un intervalle de temps d'au moins cinq minutes pour éviter des alertes inutiles. Par exemple, lors de la mise à niveau, le nombre de conteneurs d'un pod peut passer en dessous de la cible.

Si vous ne connaissez pas le nombre de conteneurs attendu, consultez la page Déploiements, pods et conteneurs de Config Sync.

Exemples de règles d'alerte Prometheus

Cette section inclut des exemples qui vous avertissent lorsque le nombre de conteneurs de certains pods est incorrect.

  • Pour recevoir une notification lorsque le nombre de conteneurs d'un pod de rapprochement de racine est inférieur au nombre attendu, créez la règle d'alerte suivante:

    alert: RootReconcilerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"root-reconciler-.*"}) < 4
    # Setting the for field to 5m to avoid unnecessary alerts.
    for: 5m
    
  • Pour recevoir une notification lorsque le nombre de conteneurs d'un pod de rapprochement d'espaces de noms est inférieur au nombre attendu, créez la règle d'alerte suivante:

    alert: NamespaceReconcilerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"ns-reconciler-.*"}) < 4
    for: 5m
    
  • Pour recevoir une notification lorsque le nombre de conteneurs d'un pod de gestionnaire de rapprochement est inférieur au nombre attendu, créez la règle d'alerte suivante:

    alert: ReconcilerManagerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"reconciler-manager-.*"}) < 2
    for: 5m
    

Conteneurs Config Sync non opérationnels

Si le nombre de redémarrages d'un conteneur Config Sync atteint un certain seuil, un problème est survenu. Par exemple, un conteneur de rapprochement de racine qui n'a pas assez de ressources de mémoire redémarrerait avec l'erreur OOMKilled jusqu'à ce qu'il obtienne suffisamment de mémoire.

Exemple de règle d'alerte Prometheus

Pour recevoir une notification lorsqu'un conteneur Config Sync a redémarré plus de trois fois, créez la règle d'alerte suivante:

alert: TooManyContainerRestarts
expr: kubernetes_io:container_restart_count{namespace_name=~"config-management-system|config-management-monitoring|resource-group-system"} > 3

Config Sync rencontre des erreurs persistantes

Si Config Sync rencontre des erreurs persistantes, cela signifie qu'un problème est survenu. Lorsque Config Sync rencontre des erreurs, il continue de réessayer de synchroniser les configurations de la source vers un cluster jusqu'à ce que l'opération réussisse. Cependant, certaines erreurs ne peuvent pas être corrigées en effectuant une nouvelle tentative et nécessitent une intervention de votre part.

Exemple de règle d'alerte Prometheus

Pour recevoir une notification lorsqu'un rapprochement de racines ou d'espaces de noms rencontre des erreurs persistantes pendant deux heures, créez la règle d'alerte suivante:

alert: PersistentConfigSyncErrors
expr: sum by (cluster, configsync_sync_kind, configsync_sync_name, configsync_sync_namespace, errorclass) (config_sync_reconciler_errors) > 0
for: 2h

Dans cet exemple :

  • Le libellé configsync_sync_kind peut avoir les valeurs suivantes: RootSync ou RepoSync.
  • Le libellé configsync_sync_name indique le nom d'un objet RootSync ou RepoSync.
  • Le libellé configsync_sync_namespace indique l'espace de noms d'un objet RootSync ou RepoSync.
  • L'étiquette errorclass peut avoir trois valeurs: 1xxx, 2xxx et 9xxx. Chaque étiquette correspond à un type d'erreur différent:

    • Erreurs 1xxx: erreurs de configuration que vous pouvez corriger
    • Erreurs 2xxx: erreurs côté serveur que vous ne pouvez peut-être pas corriger
    • 9xxx erreur: erreurs internes que vous ne pouvez pas corriger

Config Sync bloqué en phase de synchronisation

Une tentative de synchronisation dans Config Sync ne peut pas être interrompue. Si les configurations de la source sont trop volumineuses ou complexes (par exemple, si votre source contient un grand nombre de ressources Config Connector), la synchronisation de ces configurations avec le cluster peut prendre plus d'une heure. Toutefois, si deux heures se sont écoulées depuis la dernière synchronisation réussie, il se peut qu'il y ait un problème.

Vous pouvez vérifier si la tentative de synchronisation en cours est toujours en cours en vérifiant l'état RootSync ou RepoSync. Si la tentative de synchronisation en cours est toujours en cours, vous pouvez choisir de décomposer votre source de référence afin que chaque source de référence puisse être synchronisée plus rapidement, ou d'augmenter le seuil d'alerte de deux heures à quelque chose de plus. Si aucune tentative de synchronisation n'est en cours, le rapprochement de Config Sync ne fonctionne pas, car il est censé continuer à effectuer des tentatives jusqu'à ce qu'il synchronise correctement les configurations de la source avec le cluster. Dans ce cas, escaladez le problème à l'assistance Google Cloud.

Exemple de règle d'alerte Prometheus

Pour être averti lorsque la dernière synchronisation réussie d'un rapprochement de racine ou d'espace de noms remonte à plus de deux heures, créez une règle d'alerte:

  alert: OldLastSyncTimestamp
  # The status label indicates whether the last sync succeeded or not.
  # Possible values: success, error.
  expr: time() - topk by (cluster, configsync_sync_kind, configsync_sync_name, configsync_sync_namespace) (1, config_sync_last_sync_timestamp{status="success"}) > 7200

Config Sync rencontre des régressions de performances

Config Sync peut présenter des régressions de performances après la mise à niveau. Les régressions de performances peuvent se produire comme suit:

  • Augmentation du temps de rapprochement d'un objet RootSync ou RepoSync
  • Augmentation du temps nécessaire au rapprochement d'un objet ResourceGroup
  • Augmentation du temps de synchronisation des configurations de la source vers un cluster

Temps nécessaire au rapprochement d'un objet RootSync ou RepoSync

Le déploiement reconciler-manager rapproche les objets RootSync et RepoSync. Vous pouvez utiliser le quatre-vingt-dixième centile du temps nécessaire au rapprochement d'un objet RootSync ou RepoSync pour détecter des régressions de performances.

Exemples de règles d'alerte Prometheus

Cette section inclut des exemples de règles d'alerte Prometheus qui vous avertissent lorsque le déploiement reconciler-manager présente des régressions de performances.

Les exemples suivants vous envoient une notification lorsque le quatre-vingt-dixième centile de la surcharge de temps liée au rapprochement d'un objet RootSync ou RepoSync au cours des 5 dernières heures est supérieur à 0,1 seconde pendant 10 minutes. Vous pouvez créer des règles d'alerte qui surveillent tous les clusters ou un seul cluster.

  • Créez la règle suivante pour surveiller tous les clusters:

    alert: HighLatencyReconcileRootSyncAndRepoSyncOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    
  • Créez la règle suivante pour surveiller un seul cluster:

    alert: HighLatencyReconcileRootSyncAndRepoSyncClusterLevel
    expr: histogram_quantile(0.9, sum by (cluster, le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    

Temps nécessaire au rapprochement d'un objet ResourceGroup

Le déploiement resource-group-controller-manager rapproche les objets ResourceGroup. Vous pouvez utiliser le quatre-vingt-dixième centile du temps nécessaire au rapprochement d'un ResourceGroup pour détecter les régressions de performances.

Exemples de règles d'alerte Prometheus

Cette section inclut les règles d'alerte Prometheus qui vous avertissent lorsque le déploiement resource-group-controller-manager présente des régressions de performances.

Les exemples suivants vous envoient une notification lorsque le quatre-vingt-dixième centile du temps nécessaire au rapprochement d'un objet ResourceGroup au cours des cinq dernières heures dépasse cinq secondes pendant 10 minutes. Vous pouvez créer des règles d'alerte qui surveillent tous les clusters ou un seul cluster.

  • Créez la règle suivante pour surveiller tous les clusters:

    alert: HighLatencyReconcileResourceGroupOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    
  • Créez la règle suivante pour surveiller un seul cluster:

    alert: HighLatencyReconcileResourceGroupClusterLevel
    expr: histogram_quantile(0.9, sum by (cluster, le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    

Temps nécessaire à la synchronisation des configurations de la source vers un cluster

Un rapprochement de racines ou d'espaces de noms synchronise les configurations de la source fiable vers un cluster. Vous pouvez utiliser le quatre-vingt-dixième centile du temps nécessaire à la synchronisation des configurations de la source vers un cluster pour détecter les régressions de performances.

Exemples de règles d'alerte Prometheus

Cette section inclut les règles d'alerte Prometheus qui vous avertissent lorsque le déploiement de rapprochement de la racine ou de l'espace de noms présente des régressions de performances.

Les exemples suivants vous envoient une notification lorsque le quatre-vingt-dixième centile du temps nécessaire à la synchronisation des configurations sur tous les clusters au cours des cinq dernières heures est supérieur à une heure pendant cinq minutes.Vous pouvez créer des règles d'alerte qui surveillent tous les clusters ou un seul cluster.

  • Créez la règle suivante pour surveiller tous les clusters:

    alert: HighApplyDurationOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m
    
  • Créez la règle suivante pour surveiller un seul cluster:

    alert: HighApplyDurationRootSyncRepoSyncLevel
    expr: histogram_quantile(0.9, sum by (cluster, configsync_sync_kind,configsync_sync_name, configsync_sync_namespace, le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m