Usar SLIs do Config Sync

Nesta página, descrevemos como usar os indicadores de nível de serviço (SLIs) do Config Sync.

Para receber notificações quando o Config Sync não estiver funcionando como esperado, configure regras de alerta do Prometheus com base nesses SLIs. Cada SLI inclui um exemplo de como criar uma regra de alerta. Para saber mais sobre como usar o Prometheus com o Config Sync, consulte Monitorar o Config Sync com métricas.

Pods do Config Sync com contagem incorreta de contêineres

Se a contagem do contêiner de um pod do Config Sync for menor que o esperado, talvez o Config Sync não esteja em execução. É possível configurar um alerta para detectar esse problema e inspecionar o pod do Config Sync para descobrir por que alguns contêineres estão ausentes. Para evitar alertas desnecessários, defina o intervalo de tempo para pelo menos cinco minutos. Por exemplo, durante o upgrade, a contagem de contêineres de um pod pode ficar abaixo do objetivo.

Se você não souber a contagem esperada de contêineres, consulte Implantações, pods e contêineres do Config Sync.

Exemplos de regras de alertas do Prometheus

Esta seção inclui exemplos que notificam você quando há pods com uma contagem de contêineres incorreta.

  • Para receber uma notificação quando a contagem de contêineres de um pod de reconciliação raiz estiver abaixo da contagem esperada, crie a seguinte regra 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 receber uma notificação quando a contagem de contêineres de um pod de reconciliação de namespace estiver abaixo da contagem esperada, crie a seguinte regra 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 receber uma notificação quando a contagem do contêiner de um pod de reconciliação-administrador estiver abaixo da contagem esperada, crie a seguinte regra 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
    

Contêineres não íntegros do Config Sync

Se a contagem de reinicializações de um contêiner do Config Sync atingir um determinado limite, isso significa que há algo errado. Por exemplo, um contêiner de reconciliação raiz que não tem recursos de memória suficientes será reiniciado com o erro OOMKilled até conseguir memória suficiente.

Exemplo de regra de alerta do Prometheus

Para receber uma notificação quando um contêiner do Config Sync for reiniciado mais de três vezes, crie a seguinte regra de alerta:

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

O Config Sync está encontrando erros persistentes

Se o Config Sync encontrar erros persistentes, isso significa que há algo errado. Quando o Config Sync encontra erros, ele continua tentando sincronizar as configurações da origem com um cluster até ser bem-sucedido. No entanto, alguns erros não podem ser corrigidos ao tentar novamente e exigem sua intervenção.

Exemplo de regra de alerta do Prometheus

Para receber uma notificação quando um reconciliador de raiz ou namespace encontrar erros persistentes por duas horas, crie a seguinte regra 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

Neste exemplo:

  • O identificador configsync_sync_kind pode ter os seguintes valores: RootSync ou RepoSync.
  • O identificador configsync_sync_name indica o nome de um objeto RootSync ou RepoSync.
  • O identificador configsync_sync_namespace indica o namespace de um objeto RootSync ou RepoSync.
  • O identificador errorclass pode ter três valores: 1xxx, 2xxx e 9xxx. Cada identificador corresponde a um tipo diferente de erro:

    • Erros de 1xxx: erros de configuração que podem ser corrigidos por você
    • 2xxx erro: erros do lado do servidor que você não consegue corrigir
    • 9xxx erro: erros internos que não podem ser corrigidos por você

O Config Sync trava no estágio de sincronização

Uma tentativa de sincronização no Config Sync é ininterrupta. Se as configurações na origem forem muito grandes ou complexas (por exemplo, se a origem tiver um número alto de recursos do Config Connector), pode levar mais de uma hora para terminar de sincronizar essas configurações com o cluster. No entanto, se já se passaram duas horas desde a última sincronização bem-sucedida, algo pode estar errado.

Para verificar se a tentativa de sincronização atual ainda está em andamento, verifique o status de RootSync ou RepoSync. Se a tentativa de sincronização atual ainda estiver em andamento, você poderá detalhar sua fonte de verdade para que cada fonte de verdade possa ser sincronizada mais rapidamente ou aumentar o limite de alerta de duas horas para um valor mais longo. Se não houver tentativa de sincronização em andamento, o reconciliador do Config Sync está corrompido porque precisa continuar tentando sincronizar as configurações da origem com o cluster. Se isso acontecer, encaminhe para o suporte do Google Cloud.

Exemplo de regra de alerta do Prometheus

Para receber uma notificação quando a última sincronização de um reconciliador de raiz ou namespace tiver sido há mais de duas horas, crie uma regra 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 com regressões de desempenho

O Config Sync pode ter regressões de desempenho após o upgrade. As regressões de desempenho podem acontecer das seguintes maneiras:

  • um aumento na sobrecarga de tempo de reconciliação de um objeto RootSync ou RepoSync;
  • um aumento na sobrecarga de tempo de reconciliação de um objeto ResourceGroup;
  • um aumento na sobrecarga de tempo de sincronização de configurações da origem para um cluster;

a sobrecarga de tempo de reconciliação de um objeto RootSync ou RepoSync.

A implantação reconciler-manager reconcilia objetos RootSync e RepoSync. Você pode usar o 90o percentil da sobrecarga de tempo na reconciliação de um objeto RootSync ou RepoSync para detectar regressões de desempenho.

Exemplos de regras de alertas do Prometheus

Nesta seção, incluímos exemplos de regras de alerta do Prometheus que notificam você quando a implantação reconciler-manager tem regressões de desempenho.

Os exemplos a seguir enviam uma notificação quando o percentil 99 da sobrecarga de tempo de reconciliação de um objeto RootSync ou RepoSync nas últimas 5 horas é maior que 0,1 segundo por 10 minutos. É possível criar regras de alerta que monitorem todos os clusters ou apenas um.

  • Crie a regra a seguir para monitorar todos os clusters:

    alert: HighLatencyReconcileRootSyncAndRepoSyncOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    
  • Crie a regra a seguir para monitorar um único cluster:

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

A sobrecarga de tempo de reconciliação de um objeto ResourceGroup

A implantação resource-group-controller-manager reconcilia objetos ResourceGroup. É possível usar o 90o percentil da sobrecarga de tempo na reconciliação de um ResourceGroup para capturar regressões de desempenho.

Exemplos de regras de alertas do Prometheus

Esta seção inclui regras de alerta do Prometheus que notificam você quando a implantação resource-group-controller-manager tem regressões de desempenho.

Os exemplos a seguir enviam uma notificação quando o percentil 99 da sobrecarga de tempo de reconciliação de um objeto ResourceGroup nas últimas 5 horas é maior que 5 segundos por 10 minutos. É possível criar regras de alerta que monitorem todos os clusters ou apenas um.

  • Crie a regra a seguir para monitorar todos os clusters:

    alert: HighLatencyReconcileResourceGroupOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    
  • Crie a regra a seguir para monitorar um único cluster:

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

A sobrecarga de tempo de sincronização das configurações da origem para um cluster

Um reconciliador de raiz ou namespace sincroniza as configurações da fonte da verdade com um cluster. É possível usar o 90o percentil da sobrecarga de tempo de sincronização de configurações da origem para um cluster a fim de detectar regressões de desempenho.

Exemplos de regras de alertas do Prometheus

Esta seção inclui regras de alerta do Prometheus que notificam você quando a implantação do reconciliador de raiz ou namespace tem regressões de desempenho.

Os exemplos a seguir enviam uma notificação quando o percentil 99 da sobrecarga de tempo de sincronização das configurações em todos os clusters nas últimas cinco horas é superior a uma hora por cinco minutos. Você pode criar regras de alerta que monitoram todos os clusters ou um cluster.

  • Crie a regra a seguir para monitorar todos os clusters:

    alert: HighApplyDurationOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m
    
  • Crie a regra a seguir para monitorar um único 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