Sincronização da configuração do monitor com o Prometheus

A página descreve como enviar métricas do Config Sync para o Prometheus.

Esta página explica como usar o Prometheus para ver as métricas do Config Sync. Recomendamos que use o Prometheus (esta página) ou o Cloud Monitoring para exportar métricas. Também é possível usar métricas personalizadas.

O Config Sync recolhe e exporta automaticamente métricas para o Prometheus. Pode configurar o Cloud Monitoring para extrair métricas personalizadas do Prometheus. Em seguida, pode ver as métricas personalizadas no Prometheus e no Monitoring. Para mais informações, consulte o artigo Usar o Prometheus na documentação do GKE.

Extraia as métricas

Todas as métricas do Prometheus estão disponíveis para extração na porta 8675. Antes de poder extrair métricas, tem de configurar o cluster para o Prometheus de uma das duas formas. Uma das seguintes opções:

  • Siga a documentação do Prometheus para configurar o cluster para extração de dados, ou

  • Use o Prometheus Operator juntamente com os seguintes manifestos, que extraem todas as métricas do Config Sync a cada 10 segundos.

    1. Crie um diretório temporário para guardar os ficheiros de manifesto.

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. Transfira o manifesto do operador Prometheus do repositório CoreOS. repositório, através do comando curl:

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

      Este manifesto está configurado para usar o espaço de nomes default, o que não é recomendado. O passo seguinte modifica a configuração para usar um espaço de nomes chamado monitoring. Para usar um espaço de nomes diferente, substitua-o onde vir monitoring nos passos restantes.

    3. Crie um ficheiro para atualizar o espaço de nomes 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 ficheiro kustomization.yaml que aplique o patch e modifique o espaço de nomes para outros recursos no manifesto.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. Crie o espaço de nomes monitoring se não existir. Pode usar um nome diferente para o espaço de nomes, mas, se o fizer, também deve alterar o valor de namespace nos manifestos YAML dos passos anteriores.

      kubectl create namespace monitoring
      
    6. Aplique o manifesto do Kustomize através dos seguintes comandos:

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

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

    7. Crie o manifesto para os recursos necessários para configurar um servidor Prometheus que recolhe 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
        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
      --- 
      --- 
      
    8. Aplique o manifesto através dos seguintes comandos:

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

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

    9. Pode validar a instalação encaminhando a porta Web do servidor Prometheus para o seu computador local.

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

      Já pode aceder à IU 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

A sincronização de configuração recolhe as seguintes métricas e disponibiliza-as ao Prometheus. A coluna Etiquetas apresenta todas as etiquetas aplicáveis a cada métrica. As métricas sem etiquetas representam uma única medição ao longo do tempo, enquanto as métricas com etiquetas representam várias medições, uma para cada combinação de valores de etiquetas.

Se esta tabela ficar dessincronizada, pode filtrar as métricas por prefixo na interface do utilizador do Prometheus. Todas as métricas começam com o prefixo config_sync_.

Nome Tipo Etiquetas Descrição
config_sync_api_duration_seconds_bucket Histograma status, operation Distribuição da latência das chamadas do servidor da API (distribuídas em contentores pela duração de cada ciclo)
config_sync_api_duration_seconds_count Histograma status, operation Distribuição da latência das chamadas do servidor da API (ignorando a duração)
config_sync_api_duration_seconds_sum Histograma status, operation Soma das durações de todas as chamadas do servidor da API
config_sync_apply_duration_seconds_bucket Histograma commit, status Distribuição da latência da aplicação de recursos declarados a partir da fonte prioritária a um cluster (distribuída em contentores pela duração de cada ciclo)
config_sync_apply_duration_seconds_count Histograma commit, status Distribuição da latência da aplicação de recursos declarados a partir da fonte prioritária 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 da aplicação de recursos declarados a partir da fonte prioritária a um cluster
config_sync_apply_operations_total Contrapropor funcionamento, estado, controlador Número de operações que foram realizadas para sincronizar recursos da fonte de informação fidedigna com um cluster
config_sync_cluster_scoped_resource_count Indicador resourcegroup Número de recursos com âmbito de cluster num ResourceGroup
config_sync_crd_count Indicador resourcegroup Número de CRDs num ResourceGroup
config_sync_declared_resources Indicador consolidar Número de recursos declarados analisados a partir do Git
config_sync_internal_errors_total Contrapropor fonte Número de erros internos acionados pela sincronização de configuração. A métrica pode não aparecer se não tiver ocorrido nenhum erro interno
config_sync_kcc_resource_count Indicador resourcegroup Número de recursos do Config Connector num ResourceGroup
config_sync_last_apply_timestamp Indicador commit, status Data/hora da operação de aplicação mais recente
config_sync_last_sync_timestamp Indicador commit, status Data/hora da sincronização mais recente do Git
config_sync_parser_duration_seconds_bucket Histograma status, trigger, source Distribuição da latência das diferentes fases envolvidas na sincronização da fonte de dados fidedignos com um cluster
config_sync_parser_duration_seconds_count Histograma status, trigger, source Distribuição da latência das diferentes fases envolvidas na sincronização da fonte de verdade com um cluster (ignorando a duração)
config_sync_parser_duration_seconds_sum Histograma status, trigger, source Soma das latências das diferentes fases envolvidas na sincronização da fonte de informação fidedigna com um cluster
config_sync_pipeline_error_observed Indicador name, reconciler, component Estado dos recursos personalizados RootSync e RepoSync. Um valor de 1 indica uma falha
config_sync_ready_resource_count Indicador resourcegroup Número total de recursos prontos num ResourceGroup
config_sync_reconcile_duration_seconds_bucket Histograma estado Distribuição da latência de eventos de conciliação processados pelo gestor de conciliação (distribuídos em contentores pela duração de cada chamada)
config_sync_reconcile_duration_seconds_count Histograma estado Distribuição da latência de eventos de conciliação processados pelo gestor de conciliação (ignorando a duração)
config_sync_reconcile_duration_seconds_sum Histograma estado Soma das durações de todos os eventos de latência de conciliação processados pelo gestor de conciliação
config_sync_reconciler_errors Indicador component, errorclass Número de erros encontrados durante a sincronização de recursos da fonte de dados fidedignos para um cluster
config_sync_remediate_duration_seconds_bucket Histograma estado Distribuição da latência de eventos de conciliação de remediadores (distribuídos em grupos por duração)
config_sync_remediate_duration_seconds_count Histograma estado Distribuição da latência de eventos de conciliação de remediadores (ignorando a duração)
config_sync_remediate_duration_seconds_sum Histograma estado Soma das durações de todos os eventos de conciliação de remediadores
config_sync_resource_count Indicador resourcegroup Número de recursos monitorizados por um ResourceGroup
config_sync_resource_conflicts_total Contrapropor consolidar Número de conflitos de recursos resultantes de uma incompatibilidade entre os recursos em cache e os recursos do cluster. A métrica pode não aparecer se não tiver ocorrido nenhum conflito de recursos
config_sync_resource_fights_total Contrapropor O número de recursos que estão a ser sincronizados com demasiada frequência. A métrica pode não ser apresentada se não tiver ocorrido nenhum conflito de recursos
config_sync_resource_group_total Indicador Número de CRs ResourceGroup
config_sync_resource_ns_count Indicador resourcegroup Número de espaços de nomes usados por recursos num ResourceGroup
config_sync_rg_reconcile_duration_seconds_bucket. Histograma stallreason Distribuição de tempo da conciliação de um CR ResourceGroup (distribuído em segmentos por duração)
config_sync_rg_reconcile_duration_seconds_count Histograma stallreason Distribuição de tempo da conciliação de uma CR de ResourceGroup (ignorando a duração)
config_sync_rg_reconcile_duration_seconds_sum Histograma stallreason Soma da conciliação de todos os tempos de um CR ResourceGroup
config_sync_kustomize_build_latency_bucket Histograma Distribuição da latência do tempo de execução de kustomize build (distribuída em contentores pela duração de cada operação)
config_sync_kustomize_build_latency_count Histograma Distribuição da latência do tempo de execução de kustomize build (ignorando a duração)
config_sync_kustomize_build_latency_sum Histograma Soma do tempo de execução de todas as kustomize build
config_sync_kustomize_ordered_top_tier_metrics Indicador top_tier_field Utilização de recursos, geradores, SecretGenerator, ConfigMapGenerator, transformadores e validadores
config_sync_kustomize_builtin_transformers Indicador k8s_builtin_transformer Utilização de transformadores incorporados relacionados com metadados de objetos do Kubernetes
config_sync_kustomize_resource_count Indicador Número de recursos gerados por kustomize build
config_sync_kustomize_field_count Indicador field_name Número de vezes que um campo específico é usado nos ficheiros de personalização
config_sync_kustomize_patch_count Indicador patch_field Número de patches nos campos patches, patchesStrategicMerge e patchesJson6902
config_sync_kustomize_base_count Indicador base_source Número de bases remotas e locais
kustomize_deprecating_field_count Indicador deprecating_field Utilização de campos que podem ficar descontinuados
kustomize_simplification_adoption_count Indicador simplification_field Utilização de transformadores de simplificação de imagens, réplicas e substituições
kustomize_helm_inflator_count Indicador helm_inflator Utilização do Helm no Kustomize, quer seja pelos campos incorporados ou pela função personalizada

Exemplos de procedimentos de depuração para o Prometheus

Os exemplos seguintes ilustram alguns padrões de utilização de métricas do Prometheus, campos de estado de objetos e anotações de objetos para detetar e diagnosticar problemas relacionados com o Config Sync. Estes exemplos mostram como pode começar com uma monitorização de alto nível que deteta um problema e, em seguida, refinar progressivamente a sua pesquisa para analisar em detalhe e diagnosticar a causa principal do problema.

Consulte as configurações de consultas por estado

O processo reconciler fornece métricas de alto nível que dão estatísticas úteis sobre uma vista geral do funcionamento da sincronização de configuração no cluster. Pode ver se ocorreram erros e até configurar alertas para os mesmos.

config_sync_reconciler_errors

Consulte métricas por reconciliador

Se estiver a usar as APIs Config Sync RootSync e RepoSync, pode monitorizar os objetos RootSync e RepoSync. Os objetos RootSync e RepoSync são instrumentados com métricas de alto nível que lhe dão estatísticas úteis sobre o funcionamento do Config Sync no cluster. Quase todas as métricas são etiquetadas pelo nome do reconciliador, para que possa ver se ocorreram erros e configurar alertas para os mesmos no Prometheus.

Consulte a lista completa de etiquetas de métricas disponíveis para filtragem.

No Prometheus, 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}

Consulte as operações de importação e sincronização por estado

No Prometheus, pode 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 pode verificar as métricas dos próprios 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"}

Monitorize recursos com o Google Cloud Managed Service for Prometheus

O Google Cloud Managed Service for Prometheus é uma solução multinuvem totalmente gerida para métricas do Prometheus. Google CloudSuporta dois modos para a recolha de dados: recolha gerida (o modo recomendado) ou recolha de dados implementada autonomamente. Conclua os passos seguintes para configurar a monitorização do Config Sync com o Google Cloud Managed Service for Prometheus no modo de recolha gerido.

  1. Ative o Managed Prometheus no cluster seguindo as instruções em Configure a recolha gerida.

  2. Guarde o seguinte manifesto de exemplo como pod-monitoring-config-sync-monitoring.yaml. Este manifesto configura um recurso PodMonitoring para extrair as métricas do Config Sync na porta 8675 do pod otel-collector-* no espaço de nomes config-management-monitoring. O recurso PodMonitoring usa um seletor de etiquetas do Kubernetes para encontrar o otel-collector-*pod.

    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 seus dados do Prometheus estão a ser exportados através da página do explorador de métricas do Cloud Monitoring na Google Cloud consola seguindo as instruções sobre os dados do Managed Service for Prometheus no Cloud Monitoring.

O que se segue?