Usar los SLIs de Config Sync

En esta página se describe cómo usar los indicadores de nivel de servicio (SLIs) de Config Sync.

Para recibir notificaciones cuando Config Sync no funcione correctamente, configura reglas de alertas de Prometheus basadas en estos SLIs. Cada SLI incluye un ejemplo de cómo crear una regla de alerta. Para obtener más información sobre cómo usar Prometheus con Config Sync, consulta el artículo Monitorizar Config Sync con métricas.

Pods de Config Sync con un número de contenedores incorrecto

Si el número de contenedores de un pod de Config Sync es inferior al esperado, es posible que Config Sync no se esté ejecutando. Puedes configurar una alerta para detectar este problema e inspeccionar el pod de Config Sync para averiguar por qué faltan algunos contenedores. Cuando configures las alertas, te recomendamos que establezcas un intervalo de tiempo de al menos cinco minutos para evitar alertas innecesarias. Por ejemplo, durante una actualización, el recuento de contenedores de un pod puede ser inferior al objetivo.

Si no sabes cuántos contenedores se esperan, consulta Implementaciones, pods y contenedores de Config Sync.

Ejemplos de reglas de alertas de Prometheus

En esta sección se incluyen ejemplos que te avisan cuando hay pods con un número de contenedores incorrecto.

  • Para recibir una notificación cuando el número de contenedores de un pod de reconciliador raíz sea inferior al esperado, crea la siguiente regla de alerta:

    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
    
  • Para recibir una notificación cuando el número de contenedores de un reconciliador de espacio de nombres Pod sea inferior al esperado, crea la siguiente regla de alerta:

    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
    
  • Para recibir una notificación cuando el número de contenedores de un pod reconciler-manager sea inferior al esperado, crea la siguiente regla de alerta:

    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
    

Contenedores de Config Sync en mal estado

Si el recuento de reinicios de un contenedor de Config Sync alcanza un umbral determinado, significa que algo va mal. Por ejemplo, un contenedor de reconciliador raíz que no tenga suficientes recursos de memoria se reiniciará con el error OOMKilled hasta que tenga suficiente memoria.

Ejemplo de regla de alerta de Prometheus

Para recibir una notificación cuando un contenedor de Config Sync se haya reiniciado más de tres veces, crea la siguiente regla de alerta:

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

Config Sync tiene errores persistentes

Si Config Sync detecta errores persistentes, significa que algo no funciona correctamente. Cuando Config Sync detecta errores, sigue intentando sincronizar las configuraciones del origen con un clúster hasta que se complete la sincronización. Sin embargo, algunos errores no se pueden corregir volviendo a intentarlo y requieren tu intervención.

Ejemplo de regla de alerta de Prometheus

Para recibir una notificación cuando un reconciliador de raíz o de espacio de nombres detecte errores persistentes durante dos horas, crea la siguiente regla de alerta:

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

En este ejemplo:

  • La etiqueta configsync_sync_kind puede tener los siguientes valores: RootSync o RepoSync.
  • La etiqueta configsync_sync_name indica el nombre de un objeto RootSync o RepoSync.
  • La etiqueta configsync_sync_namespace indica el espacio de nombres de un objeto RootSync o RepoSync.
  • La etiqueta errorclass puede tener tres valores: 1xxx, 2xxx y 9xxx. Cada etiqueta corresponde a un tipo de error diferente:

    • 1xxx errores: errores de configuración que puedes corregir
    • 2xxx errores: errores del lado del servidor que puede que no puedas corregir
    • 9xxx errores: errores internos que no puedes corregir

Config Sync se queda bloqueado en la fase de sincronización

No se puede interrumpir un intento de sincronización en Config Sync. Si las configuraciones del origen son demasiado grandes o complejas (por ejemplo, si el origen contiene un gran número de recursos de Config Connector), puede tardar más de una hora en sincronizarse con el clúster. Sin embargo, si han transcurrido dos horas desde la última sincronización correcta, puede que haya algún problema.

Para comprobar si el intento de sincronización actual sigue en curso, consulta el estado de RootSync o RepoSync. Si la sincronización actual sigue en curso, puedes dividir tu fuente de información veraz para que cada fuente se pueda sincronizar más rápido o aumentar el umbral de alerta de dos horas a un periodo más largo. Si no hay ningún intento de sincronización en curso, el reconciliador de Config Sync no funciona, ya que debería seguir intentándolo hasta que sincronice las configuraciones del origen con el clúster correctamente. Si esto ocurre, deriva el caso al equipo de asistencia de Google Cloud .

Ejemplo de regla de alerta de Prometheus

Para recibir una notificación cuando la última sincronización correcta de un reconciliador de raíz o de espacio de nombres se haya producido hace más de dos horas, crea una regla de alerta:

  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 experimenta regresiones en el rendimiento

Es posible que Config Sync tenga regresiones de rendimiento después de actualizarse. Las regresiones de rendimiento pueden producirse de las siguientes formas:

  • Aumento del tiempo de sobrecarga de conciliación de un objeto RootSync o RepoSync
  • Aumento del tiempo de sobrecarga de conciliación de un objeto ResourceGroup
  • Aumento del tiempo de sobrecarga de la sincronización de configuraciones de origen a un clúster

El tiempo adicional necesario para reconciliar un objeto RootSync o RepoSync

La reconciler-manager Deployment reconcilia los objetos RootSync y RepoSync. Puedes usar el percentil 90 del tiempo de sobrecarga de conciliación de un objeto RootSync o RepoSync para detectar regresiones de rendimiento.

Ejemplos de reglas de alertas de Prometheus

En esta sección se incluyen ejemplos de reglas de alertas de Prometheus que te avisan cuando la reconciler-manager Deployment tiene regresiones de rendimiento.

En los siguientes ejemplos se te envía una notificación cuando el percentil 90 del tiempo de sobrecarga de reconciliación de un objeto RootSync o RepoSync durante las últimas 5 horas supera los 0,1 segundos durante 10 minutos. Puedes crear reglas de alerta que monitoricen todos los clústeres o un solo clúster.

  • Crea la siguiente regla para monitorizar todos los clústeres:

    alert: HighLatencyReconcileRootSyncAndRepoSyncOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    
  • Crea la siguiente regla para monitorizar un solo clúster:

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

El tiempo adicional necesario para reconciliar un objeto ResourceGroup

La resource-group-controller-manager implementación reconcilia los objetos ResourceGroup. Puedes usar el percentil 90 de la sobrecarga de tiempo de reconciliación de un ResourceGroup para detectar regresiones de rendimiento.

Ejemplos de reglas de alertas de Prometheus

Esta sección incluye reglas de alertas de Prometheus que te avisan cuando la resource-group-controller-managerimplementación tiene regresiones de rendimiento.

En los siguientes ejemplos, se te envía una notificación cuando el percentil 90 de la sobrecarga de tiempo de conciliación de un objeto ResourceGroup durante las últimas 5 horas supera los 5 segundos durante 10 minutos. Puedes crear reglas de alerta que monitoricen todos los clústeres o un solo clúster.

  • Crea la siguiente regla para monitorizar todos los clústeres:

    alert: HighLatencyReconcileResourceGroupOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    
  • Crea la siguiente regla para monitorizar un solo clúster:

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

El tiempo adicional que supone sincronizar las configuraciones de la fuente con un clúster.

Un reconciliador de raíz o de espacio de nombres sincroniza las configuraciones de la fuente de información veraz con un clúster. Puedes usar el percentil 90 del tiempo de sobrecarga de la sincronización de configuraciones de la fuente a un clúster para detectar regresiones de rendimiento.

Ejemplos de reglas de alertas de Prometheus

Esta sección incluye reglas de alertas de Prometheus que te avisan cuando la implementación del reconciliador de espacio de nombres o raíz tiene regresiones de rendimiento.

En los siguientes ejemplos se te envía una notificación cuando el percentil 90 del tiempo de latencia de la sincronización de configuraciones en todos los clústeres durante las últimas cinco horas supera una hora durante cinco minutos.Puedes crear reglas de alertas que monitoricen todos los clústeres o un solo clúster.

  • Crea la siguiente regla para monitorizar todos los clústeres:

    alert: HighApplyDurationOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m
    
  • Crea la siguiente regla para monitorizar un solo clúster:

    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