Compartilhar via


Criar e validar o arquivo de configuração personalizado para métricas do Prometheus no Azure Monitor

Além dos destinos de extração padrão que o agente do Prometheus do Azure Monitor extrai por padrão, use as etapas a seguir para fornecer mais configurações de extração ao agente usando um configmap. O agente do Prometheus do Azure Monitor não entende nem processa os CRDs do operador para configuração de extração, mas usa a configuração nativa do Prometheus, conforme definido na configuração do Prometheus.

Os três configmaps que podem ser usados para raspagem de destino personalizado são:

  • ama-metrics-prometheus-config (Recomendado) – Quando um configmap com esse nome é criado, os trabalhos de raspagem definidos nele são executados no pod de réplica de métricas do Azure Monitor sendo executados no cluster.
  • ama-metrics-prometheus-config-node (Avançado) – Quando um configmap com esse nome é criado, os trabalhos de raspagem definidos nele são executados a partir de cada pod DaemonSet do Linux sendo executados no cluster. Para obter mais informações, confira Configuração Avançada.
  • ama-metrics-prometheus-config-node-windows (Avançado) – Quando um configmap com esse nome é criado, os trabalhos de raspagem definidos nele são executados de cada DaemonSet do Windows. Para obter mais informações, confira Configuração Avançada.

Criar arquivo de configuração do Prometheus

Uma maneira mais fácil de criar os trabalhos de configuração de extração do Prometheus:

  • Etapa:1 use um arquivo de configuração (yaml) para criar/definir os trabalhos de extração
  • Etapa:2 validar o arquivo de configuração de extração usando uma ferramenta personalizada (conforme especificado neste artigo) e converter esse arquivo de configuração em um configmap
  • Etapa:3 implantar o arquivo de configuração de extração como um configmap para seus clusters.

Dessa maneira, é mais fácil criar a configuração yaml (que é extremamente sensível ao espaço) e não adicionar espaços não intencionais criando diretamente a configuração de raspagem dentro do mapa de configurações.

Crie um arquivo de configuração de extração do Prometheus chamado prometheus-config. Para obter mais informações, confira as dicas e exemplos de configuração, que fornecem mais detalhes sobre como criar a configuração de extração para o Prometheus. Você também pode ver a referência de configuração de extração do Prometheus.io. Seu arquivo de configuração lista as configurações de extrção na seção scrape_configs e pode, opcionalmente, usar a seção global para definir as configurações globais scrape_interval, scrape_timeout e external_labels.

Dica

As alterações na seção global afetarão as configurações padrão e a configuração personalizada.

Aqui está um exemplo de arquivo de configuração de extração do Prometheus:

global:
  scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
  scrape_interval: 60s
  static_configs:
    - targets: ['my-static-service.svc.cluster.local:1234']

- job_name: prometheus_example_app
  scheme: http
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_name]
      action: keep
      regex: "prometheus-example-service"

Validar o arquivo de configuração de extração

O agente usa uma ferramenta promconfigvalidator personalizada para validar a configuração do Prometheus fornecida a ele por meio do configmap. Se a configuração não for válida, a configuração personalizada fornecida será rejeitada pelo agente do complemento. Depois de ter o arquivo de configuração do Prometheus, você pode usar opcionalmente a ferramenta promconfigvalidator para validar a configuração, antes de criar um configmap que será consumido pelo agente.

A ferramenta promconfigvalidator é enviada dentro do(s) pod(s) adicional(is) de métricas do Azure Monitor. Você pode usar qualquer um dos pods ama-metrics-node-* no namespace kube-system do cluster para baixar a ferramenta para validação. Use kubectl cp para baixar a ferramenta e sua configuração:

for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator;  kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done

Depois de copiar o executável e o yaml, localize o caminho do arquivo de configuração do Prometheus que você criou. Em seguida, substitua <config path> no comando e execute o validador com o comando:

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

Executar o validador gera o arquivo de configuração mesclado merged-otel-config.yaml, se nenhum caminho for fornecido com o parâmetro opcional output. Não use esse arquivo mesclado gerado automaticamente como configuração para o agente coletor de métricas, pois ele é usado apenas para fins de validação e depuração de ferramentas.

Implantar o arquivo de configuração como um configmap

Seu arquivo de configuração personalizado do Prometheus é consumido como um campo denominado prometheus-config dentro do complemento de métricas do(a) configmap(s) ama-metrics-prometheus-config (ou) ama-metrics-prometheus-config-node (ou) ama-metrics-prometheus-config-node-windows no namespace kube-system. Você pode criar um configmap a partir do arquivo de configuração de extração que você criou acima, renomeando o arquivo de configuração do Prometheus para prometheus-config (sem a extensão do arquivo) e executando um ou mais dos seguintes comandos, dependendo do configmap que você deseja criar para sua configuração personalizada do(s) trabalho(s) de extração.

Ex: para criar o configmap a ser usado pelo replicsset

kubectl create configmap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

Isso cria um configmap nomeado ama-metrics-prometheus-config no namespace kube-system. O pod de réplica de métricas do Azure Monitor é reiniciado em 30 a 60 segundos para aplicar a nova configuração. Para ver se há algum problema com a validação, o processamento ou a mesclagem da configuração, você pode ver os ama-metrics pods de réplica

Ex: para criar o configmap a ser usado pelo DaemonSet do Linux

kubectl create configmap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

Isso cria um configmap nomeado ama-metrics-prometheus-config-node no namespace kube-system. Cada pod DaemonSet do Linux de métricas do Azure Monitor é reiniciado em 30 a 60 segundos para aplicar a nova configuração. Para ver se há algum problema com a validação, processamento ou mesclagem da configuração, você pode ver os pods deamonset do ama-metrics-node linux

Ex; para criar o configmap a ser usado pelo DaemonSet do Windows

kubectl create configmap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

Isso cria um configmap nomeado ama-metrics-prometheus-config-node-windows no namespace kube-system. Cada pod DaemonSet do Windows de métricas do Azure Monitor é reiniciado em 30 a 60 segundos para aplicar a nova configuração. Para ver se há algum problema com a validação, processamento ou mesclagem da configuração, você pode ver os pods deamonset do ama-metrics-win-node windows

Verifique se o arquivo de configuração do Prometheus se chama prometheus-config, antes de executar o comando a seguir, já que o nome do arquivo é usado como o nome da configuração do configmap.

Isso cria um configmap nomeado ama-metrics-prometheus-config no namespace kube-system. O pod de métricas do Azure Monitor é reiniciado para aplicar a nova configuração. Para ver se há algum problema com a validação, processamento ou mesclagem da configuração, você pode ver os ama-metrics pods.

Veja um exemplo do configmap ama-metrics-prometheus-configaqui.

Solução de problemas

Se você criou com sucesso o configmap (ama-metrics-prometheus-config ou ama-metrics-prometheus-config-node) no namespace kube-system e ainda não vê os destinos personalizados sendo extraídos, verifique se há erros nos logs do pod de réplica para ama-metrics-prometheus-config configmap ou os logos do pod DaemonSet para o configmap ama-metrics-prometheus-config-node) usando os logs do kubect e verifique se não há erros na seção Iniciar a Configuração da Mesclagem Padrão e Personalizada do Prometheus com o prefixo prometheus-config-mergerger

Observação

Configuração avançada: configurar os trabalhos de extração personalizados do Prometheus para o DaemonSet

O pod de réplica ama-metrics consome a configuração personalizada do Prometheus e extrair os destinos especificados. Para um cluster com um grande número de nós e pods e um grande volume de métricas para extrair, alguns dos destinos de extração personalizados aplicáveis podem ser descarregados do único pod ama-metrics de Replica para o pod ama-metrics DaemonSet.

O ama-metrics-prometheus-config-node configmap é semelhante ao configmap do conjunto de réplicas e pode ser criado para ter configurações de extração estática em cada nó. A configuração de raspagem deve ter como destino apenas um único nó e não deve usar anotações de descoberta/pod de serviço. Caso contrário, cada nó tentará coletar todos os destinos e fazer muitas chamadas para o servidor de API do Kubernetes.

Os destinos de extração personalizados podem seguir o mesmo formato usando static_configs com destinos e usando a variável de ambiente $NODE_IP e especificando a porta a ser extraída. Cada pod do DaemonSet pega a configuração, extrai as métricas e as envia para esse nó.

Exemplo:- A seguinte configuração node-exporter é um dos destinos padrão para os pods do DaemonSet. Ele usa a variável de ambiente $NODE_IP, que já está definida para cada contêiner de complemento ama-metrics para direcionar uma porta específica no nó.

- job_name: nodesample
  scrape_interval: 30s
  scheme: http
  metrics_path: /metrics
  relabel_configs:
  - source_labels: [__metrics_path__]
    regex: (.*)
    target_label: metrics_path
  - source_labels: [__address__]
    replacement: '$NODE_NAME'
    target_label: instance
  static_configs:
  - targets: ['$NODE_IP:9100']

Próximas etapas