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 extração.
Use o operador Prometheus com os manifestos a seguir, que capturam todas as métricas do Config Sync a cada 10 segundos.
Crie um diretório temporário para conter os arquivos de manifesto.
mkdir config-sync-monitor cd config-sync-monitor
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 chamadomonitoring
. Para usar um namespace diferente, substitua-o onde houvermonitoring
nas etapas restantes.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
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
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 denamespace
nos manifestos YAML das etapas anteriores.kubectl create namespace monitoring
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.
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 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 --- ---
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.
É 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
.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çarão 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ída em intervalos pela duração de cada ciclo) |
config_sync_api_duration_seconds_count |
Histograma | status, operação | Distribuição de latência das 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 da API |
config_sync_apply_duration_seconds_bucket |
Histograma | commit, status | Distribuição de latência da aplicação de recursos declarados da fonte da verdade para um cluster (distribuídos em intervalos 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 da verdade para 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 da fonte da verdade para um cluster |
config_sync_apply_operations_total |
Contador | operation, status, controller | Número de operações realizadas para sincronizar recursos da fonte da 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 do 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 com 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 com um cluster (ignorando a duração) |
config_sync_parser_duration_seconds_sum |
Histograma | status, trigger, source | Soma das latências de diferentes estágios envolvidos na sincronização da fonte da verdade com um cluster |
config_sync_pipeline_error_observed |
Medidor | nome, reconciliador, componente | Status dos recursos personalizados RootSync e RepoSync. Um valor de 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 de eventos de reconciliação processados pelo gerenciador de reconciliação (distribuídos em intervalos 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 todas as latências de eventos de reconciliação processados pelo gerenciador de reconciliação |
config_sync_reconciler_errors |
Medidor | component, errorclass | Número de erros encontrados ao sincronizar recursos da fonte da verdade com um cluster |
config_sync_remediate_duration_seconds_bucket |
Histograma | status | Distribuição de latência de eventos de reconciliação do remediador (distribuídos em intervalos por duração) |
config_sync_remediate_duration_seconds_count |
Histograma | status | Distribuição de latência de eventos de reconciliação do remediador (ignorando a duração) |
config_sync_remediate_duration_seconds_sum |
Histograma | status | Soma das durações de todas as latências de 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 em cache e os recursos de cluster. A métrica pode não aparecer se não tiver ocorrido nenhum conflito de recursos. |
config_sync_resource_fights_total |
Contador | Número de recursos que estão sendo sincronizados com muita frequência. A métrica pode não aparecer se não tiver ocorrido nenhuma disputa de recursos. | |
config_sync_resource_group_total |
Medidor | Número de CRs de 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 de reconciliação de uma resposta automática do ResourceGroup (distribuída em intervalos por duração) |
config_sync_rg_reconcile_duration_seconds_count |
Histograma | parada | Distribuição de tempo de reconciliação de uma resposta automática do ResourceGroup (ignorando a duração) |
config_sync_rg_reconcile_duration_seconds_sum |
Histograma | parada | Soma de todo o tempo de reconciliação de uma resposta automática do ResourceGroup |
config_sync_kustomize_build_latency_bucket |
Histograma | Distribuição de latência do tempo de execução de kustomize build (distribuído em intervalos 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 da 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 do objeto do Kubernetes |
config_sync_kustomize_resource_count |
Medidor | Número de recursos gerados por kustomize build |
|
config_sync_kustomize_field_count |
Medidor | field_name | Quantas vezes um campo específico é usado nos arquivos de kustomizaçã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 locais e remotas |
kustomize_deprecating_field_count |
Medidor | deprecating_field | Uso de campos que podem ser 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 kustomize, 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.
Consulte a lista completa de rótulos de métrica disponíveis para filtrar.
No Prometheus, é possível 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 for Prometheus
O Google Cloud Managed Service para Prometheus é a solução de várias nuvens totalmente gerenciada do Google Cloudpara 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.
Ative o Prometheus gerenciado no cluster seguindo as instruções em Configurar a coleta gerenciada.
Salve o seguinte manifesto de amostra como
pod-monitoring-config-sync-monitoring.yaml
: Esse manifesto configura um recurso PodMonitoring para extrair as métricas do Config Sync na porta8675
do podotel-collector-*
no namespaceconfig-management-monitoring
. O recurso PodMonitoring usa um seletor de rótulos do Kubernetes para encontrar o podotel-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
Aplique o manifesto ao cluster:
kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
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.