Monitorar o Config Sync com o Prometheus

Nesta página, descrevemos como enviar métricas do Config Sync para o Prometheus.

Nesta página, explicamos como usar o Prometheus para visualizar as métricas do Config Sync. Para ver outras maneiras de exportar métricas, consulte Monitorar o Config Sync com o Cloud Monitoring ou Monitorar o Config Sync com o monitoramento personalizado.

O Config Sync coleta e exporta automaticamente as métricas para o Prometheus. É possível configurar o Cloud Monitoring para extrair métricas personalizadas do Prometheus. Em seguida, você poderá ver métricas personalizadas no Prometheus e no Monitoring. Para mais informações, consulte Como usar o Prometheus na documentação do GKE.

Analisar as métricas

Todas as métricas do Prometheus estão disponíveis para captura na porta 8675. Para analisar as métricas, configure seu cluster para o Prometheus de duas maneiras. Siga uma destas instruções:

  • Siga a documentação do Prometheus para configurar seu cluster para captura, ou

  • Use o operador Prometheus com os manifestos a seguir, que capturam todas as métricas do Policy Controller, Config Sync e Config Controller a cada 10 segundos.

    1. Crie um diretório temporário para conter os arquivos de manifesto.

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. Faça o download do manifesto do Prometheus Operator no repositório do CoreOS usando o comando curl:

      curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
      

      Esse manifesto é configurado para usar o namespace default, o que não é recomendável. A próxima etapa modifica a configuração para usar um namespace chamado monitoring. Para usar um namespace diferente, substitua-o onde houver monitoring nas etapas restantes.

    3. Crie um arquivo para atualizar o namespace do ClusterRoleBinding no pacote acima.

      # patch-crb.yaml
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-operator
      subjects:
      - kind: ServiceAccount
        name: prometheus-operator
        namespace: monitoring # we are patching from default namespace
      
    4. Crie um arquivo kustomization.yaml que aplique o patch e modifique o namespace para outros recursos no manifesto.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. Crie o namespace monitoring se não houver um. É possível usar um nome diferente para o namespace. Se você fizer isso, altere também o valor de namespace nos manifestos YAML das etapas anteriores.

      kubectl create namespace monitoring
      
    6. Aplique o manifesto Kustomize usando os seguintes comandos:

      kubectl apply -k .
      
      until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \
      do date; sleep 1; echo ""; done

      O segundo comando permanece bloqueado até que os CRDs estejam disponíveis no cluster.

    7. Crie o manifesto para os recursos necessários a fim de configurar um servidor Prometheus que copie métricas do Config Sync.

      # config-sync-monitoring.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: prometheus-config-sync
        namespace: monitoring
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: prometheus-config-sync
      rules:
      - apiGroups: [""]
        resources:
        - nodes
        - services
        - endpoints
        - pods
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources:
        - configmaps
        verbs: ["get"]
      - nonResourceURLs: ["/metrics"]
        verbs: ["get"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-config-sync
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: prometheus-config-sync
      subjects:
      - kind: ServiceAccount
        name: prometheus-config-sync
        namespace: monitoring
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: Prometheus
      metadata:
        name: config-sync
        namespace: monitoring
        labels:
          prometheus: config-sync
      spec:
        replicas: 2
        serviceAccountName: prometheus-config-sync
        serviceMonitorSelector:
          matchLabels:
            prometheus: config-management
        podMonitorSelector:
          matchLabels:
            prometheus: config-management
        alerting:
          alertmanagers:
          - namespace: default
            name: alertmanager
            port: web
        resources:
          requests:
            memory: 400Mi
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: prometheus-config-sync
        namespace: monitoring
        labels:
          prometheus: config-sync
      spec:
        type: NodePort
        ports:
        - name: web
          nodePort: 31900
          port: 9190
          protocol: TCP
          targetPort: web
        selector:
          prometheus: config-sync
      --- 
      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        name: config-sync-service
        namespace: monitoring
        labels:
          prometheus: config-management
      spec:
        selector:
          matchLabels:
            monitored: "true"
        namespaceSelector:
          matchNames:
          - config-management-monitoring
        endpoints:
        - port: metrics
          interval: 10s 
      --- 
      
    8. Aplique o manifesto usando os comandos a seguir:

      kubectl apply -f config-sync.yaml
      
      until kubectl rollout status statefulset/prometheus-config-sync -n monitoring; \
      do sleep 1; done
      

      O segundo comando permanece bloqueado até que os pods estejam em execução.

    9. É possível verificar a instalação encaminhando a porta da Web do servidor do Prometheus para a máquina local.

      kubectl -n monitoring port-forward svc/prometheus-config-sync 9190
      

      Agora é possível acessar a IU da Web do Prometheus em http://localhost:9190.

    10. Remova o diretório temporário.

      cd ..
      rm -rf config-sync-monitor
      

Métricas do Prometheus disponíveis

O Config Sync coleta as métricas a seguir e as disponibiliza para o Prometheus. A coluna Rótulos lista todos os rótulos aplicáveis a cada métrica. As métricas sem rótulos representam uma única medida ao longo do tempo, enquanto as métricas com rótulos representam várias medidas, uma para cada combinação de valores de rótulo.

Se essa tabela ficar dessincronizada, filtre as métricas por prefixo na interface do usuário do Prometheus. Todas as métricas começam com o prefixo config_sync_.

Nome Tipo Rótulos Descrição
config_sync_api_duration_seconds_bucket Histograma status, operação Distribuição de latência das chamadas do servidor de API (distribuídas em buckets pela duração de cada ciclo)
config_sync_api_duration_seconds_count Histograma status, operação Distribuição de latência de chamadas do servidor de API (ignorando a duração)
config_sync_api_duration_seconds_sum Histograma status, operação Soma das durações de todas as chamadas do servidor de API
config_sync_apply_duration_seconds_bucket Histograma commit, status Distribuição de latência da aplicação de recursos declarados da fonte de verdade a um cluster (distribuído em buckets pela duração de cada ciclo)
config_sync_apply_duration_seconds_count Histograma commit, status Distribuição de latência da aplicação de recursos declarados da fonte de verdade a um cluster (ignorando a duração)
config_sync_apply_duration_seconds_sum Histograma commit, status Soma das durações de toda a latência de aplicação de recursos declarados da fonte de verdade a um cluster
config_sync_apply_operations_total Contador operation, status, controller Número de operações executadas para sincronizar recursos da fonte de verdade com um cluster
config_sync_cluster_scoped_resource_count Medidor resourcegroup Número de recursos com escopo de cluster em um ResourceGroup
config_sync_crd_count Medidor resourcegroup Número de CRDs em um ResourceGroup
config_sync_declared_resources Medidor commit Número de recursos declarados analisados pelo Git
config_sync_internal_errors_total Contador source Número de erros internos acionados pelo Config Sync. A métrica pode não aparecer se nenhum erro interno tiver ocorrido
config_sync_kcc_resource_count Medidor resourcegroup Número de recursos do Config Connector em um ResourceGroup
config_sync_last_apply_timestamp Medidor commit, status Carimbo de data/hora da operação de aplicação mais recente
config_sync_last_sync_timestamp Medidor commit, status Carimbo de data/hora da sincronização mais recente do Git
config_sync_parser_duration_seconds_bucket Histograma status, trigger, source Distribuição de latência de diferentes estágios envolvidos na sincronização da fonte da verdade para um cluster
config_sync_parser_duration_seconds_count Histograma status, trigger, source Distribuição de latência de diferentes estágios envolvidos na sincronização da fonte da verdade para um cluster (ignorando a duração)
config_sync_parser_duration_seconds_sum Histograma status, trigger, source Soma das latências dos diferentes estágios envolvidos na sincronização da fonte da verdade para um cluster
config_sync_pipeline_error_observed Medidor nome, reconciliador, componente Status dos recursos personalizados do RootSync e RepoSync. O valor 1 indica uma falha
config_sync_ready_resource_count Medidor resourcegroup Número total de recursos prontos em um ResourceGroup
config_sync_reconcile_duration_seconds_bucket Histograma status Distribuição de latência dos eventos de reconciliação gerenciados pelo gerenciador de reconciliação (distribuídos em buckets pela duração de cada chamada)
config_sync_reconcile_duration_seconds_count Histograma status Distribuição de latência de eventos de reconciliação processados pelo gerenciador de reconciliação (ignorando a duração)
config_sync_reconcile_duration_seconds_sum Histograma status Soma das durações de toda a latência dos eventos de reconciliação processados pelo administrador do reconciliador
config_sync_reconciler_errors Medidor component, errorclass Número de erros encontrados ao sincronizar recursos da origem da verdade para um cluster
config_sync_remediate_duration_seconds_bucket Histograma status Distribuição de latência dos eventos de reconciliação do remediador (distribuídos em buckets por duração)
config_sync_remediate_duration_seconds_count Histograma status Distribuição de latência dos eventos de reconciliação do remediador (ignorando a duração)
config_sync_remediate_duration_seconds_sum Histograma status Soma das durações de toda a latência dos eventos de reconciliação do remediador
config_sync_resource_count Medidor resourcegroup Número de recursos rastreados por um ResourceGroup
config_sync_resource_conflicts_total Contador commit Número de conflitos de recursos resultantes de uma incompatibilidade entre os recursos armazenados em cache e os recursos do cluster. A métrica pode não aparecer se nenhum conflito de recursos tiver ocorrido
config_sync_resource_fights_total Contador Número de recursos que são sincronizados com muita frequência. A métrica pode não aparecer se nenhuma disputa de recursos tiver ocorrido
config_sync_resource_group_total Medidor Número de respostas automáticas do ResourceGroup
config_sync_resource_ns_count Medidor resourcegroup Número de namespaces usados por recursos em um ResourceGroup
config_sync_rg_reconcile_duration_seconds_bucket. Histograma parada Distribuição de tempo da reconciliação de uma resposta automática ResourceGroup (distribuída em buckets por duração)
config_sync_rg_reconcile_duration_seconds_count Histograma parada Distribuição de tempo da reconciliação de uma resposta automática do ResourceGroup (ignorando a duração)
config_sync_rg_reconcile_duration_seconds_sum Histograma parada Soma de todos os tempos em que uma resposta automática do ResourceGroup é reconciliada
config_sync_kustomize_build_latency_bucket Histograma Distribuição de latência do tempo de execução de kustomize build (distribuído em buckets pela duração de cada operação)
config_sync_kustomize_build_latency_count Histograma Distribuição de latência do tempo de execução de kustomize build (ignorando a duração)
config_sync_kustomize_build_latency_sum Histograma Soma de todo o tempo de execução de kustomize build
config_sync_kustomize_ordered_top_tier_metrics Medidor top_tier_field Uso de recursos, geradores, SecretGenerator, ConfigMapGenerator, transformadores e validadores
config_sync_kustomize_builtin_transformers Medidor k8s_builtin_transformer Uso de transformadores integrados relacionados aos metadados de objetos do Kubernetes
config_sync_kustomize_resource_count Medidor Número de recursos gerados por kustomize build
config_sync_kustomize_field_count Medidor field_name Número de vezes que um campo específico é usado nos arquivos de personalização
config_sync_kustomize_patch_count Medidor patch_field Número de patches nos campos patches, patchesStrategicMerge e patchesJson6902
config_sync_kustomize_base_count Medidor base_source Número de bases remotas e locais
kustomize_deprecating_field_count Medidor deprecating_field uso de campos que podem se tornar descontinuados
kustomize_simplification_adoption_count Medidor simplification_field Uso de imagens, réplicas e substituições de transformadores de simplificação
kustomize_helm_inflator_count Medidor helm_inflator Uso do Helm no Kubernetes, seja pelos campos integrados ou pela função personalizada

Exemplo de procedimentos de depuração para o Prometheus

Nos exemplos a seguir, ilustramos alguns padrões para usar métricas do Prometheus, campos de status de objetos e anotações de objetos para detectar e diagnosticar problemas relacionados ao Config Sync. Nos exemplos, mostramos como começar com o monitoramento de alto nível que detecta um problema e refinar progressivamente sua pesquisa para detalhar e diagnosticar a causa principal do problema.

Consultar configurações por status

O processo reconciler fornece métricas de alto nível que dão insights úteis para uma visão geral de como o Config Sync está operando no cluster. É possível ver se algum erro ocorreu e até mesmo configurar alertas para ele (em inglês).

config_sync_reconciler_errors

Consultar métricas por reconciliador

Se você estiver usando as APIs Config Sync RootSync e RepoSync, vai ser possível monitorar os objetos RootSync e RepoSync. Os objetos do RootSync e RepoSync são instrumentados com métricas de alto nível que fornecem insights úteis sobre como o Config Sync está operando no cluster. Quase todas as métricas são marcadas com tag pelo nome do reconciliador. Assim, você vê se ocorreu algum erro e pode configurar alertas para ele no Prometheus.

Confira a lista completa de rótulos de métricas disponíveis para filtragem.

No Prometheus, você pode usar os seguintes filtros para RootSyncs ou RepoSyncs:

# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}

# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}

Consultar operações de importação e sincronização por status

No Prometheus, é possível usar as seguintes consultas:

# Check for errors that occurred when sourcing configs.
config_sync_reconciler_errors{component="source"}

# Check for errors that occurred when syncing configs to the cluster.
config_sync_reconciler_errors{component="sync"}

Também é possível verificar as métricas dos processos de origem e sincronização:

config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}

Monitorar recursos com o Google Cloud Managed Service para Prometheus

O Google Cloud Managed Service para Prometheus é a solução de várias nuvens totalmente gerenciada do Google Cloud para métricas do Prometheus. Ele oferece suporte a dois modos de coleta de dados: a coleta gerenciada (o modo recomendado) ou a coleta de dados autoimplantada. Conclua as etapas a seguir para configurar o monitoramento do Config Sync com o Google Cloud Managed Service para Prometheus no modo de coleta gerenciada.

  1. Ative o Prometheus gerenciado no cluster seguindo as instruções em Configurar a coleta gerenciada.

  2. Salve o seguinte manifesto de amostra como pod-monitoring-config-sync-monitoring.yaml: Nesse manifesto, um recurso do PodMonitoring é configurado para raspar as métricas do Config Sync na porta 8675 do pod otel-collector-* no namespace config-management-monitoring. O recurso do PodMonitoring usa um seletor de rótulos do Kubernetes para encontrar o pod otel-collector-*.

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: config-sync-monitoring
      namespace: config-management-monitoring
    spec:
      selector:
        matchLabels:
          app: opentelemetry
          component: otel-collector
      endpoints:
      - port: 8675
        interval: 10s
    
  3. Aplique o manifesto ao cluster:

    kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
    

  4. Verifique se os dados do Prometheus estão sendo exportados usando a página "Metrics Explorer" do Cloud Monitoring no console do Google Cloud seguindo as instruções em Dados do Managed Service para Prometheus no Cloud Monitoring.