Share via


Enviar métricas do Prometheus para o workspace do Log Analytics com insights de contêiner

Este artigo descreve como enviar métricas do Prometheus do cluster do Kubernetes monitoradas por insights de contêiner para um workspace do Log Analytics. Antes de executar essa configuração, primeiro você deve garantir que está extraindo as métricas do Prometheus do cluster por meio do serviço gerenciado do Azure Monitor para Prometheus, que é o método recomendado para monitorar seus clusters. Só use a configuração descrita neste artigo se você também quiser enviar esses mesmos dados para um workspace do Log Analytics, no qual poderá analisá-los por meio de consultas de log e alertas de pesquisa de logs.

Isso requer a configuração do complemento de monitoramento para o agente do Azure Monitor, que é o usado atualmente pelos Insights do Contêiner para enviar dados para um workspace do Log Analytics. Isso requer expor o ponto de extremidade de métricas do Prometheus por meio de seus exportadores ou pods e, em seguida, configurar um dos complementos para o agente do Azure Monitor usado pelos Insights do Contêiner, conforme mostrado no diagrama a seguir.

Diagram of container monitoring architecture sending Prometheus metrics to Azure Monitor Logs.

Configurações de extração do Prometheus (para métricas armazenadas como logs)

A extração ativa de métricas do Prometheus é executada de uma das duas perspectivas abaixo e as métricas são enviadas para o workspace do Log Analytics configurado:

  • Em todo o cluster: definido na seção ConfigMap [Prometheus data_collection_settings.cluster].
  • Em todo o nó: definido na seção ConfigMap [Prometheus_data_collection_settings.node].
Ponto de extremidade Escopo Exemplo
Anotação de pod Em todo o cluster prometheus.io/scrape: "true"
prometheus.io/path: "/mymetrics"
prometheus.io/port: "8000"
prometheus.io/scheme: "http"
Serviço do Kubernetes Em todo o cluster http://my-service-dns.my-namespace:9100/metrics
http://metrics-server.kube-system.svc.cluster.local/metrics
URL/ponto de extremidade Por nó e/ou em todo o cluster http://myurl:9101/metrics

Quando uma URL é especificada, os insights do Contêiner extraem apenas o ponto de extremidade. Quando o serviço Kubernetes é especificado, o nome do serviço é resolvido com o servidor DNS do cluster para obter o endereço IP. Em seguida, o serviço resolvido é extraído.

Escopo Chave Tipo de dados Valor Descrição
Em todo o cluster Especifique qualquer um dos três métodos a seguir para extrair pontos de extremidade para métricas.
urls String Matriz separada por vírgulas Ponto de extremidade de HTTP (endereço IP ou caminho de URL válido especificado). Por exemplo: urls=[$NODE_IP/metrics]. ($NODE_IP é um parâmetro específico de insights do contêiner e pode ser usado em vez de um endereço IP do nó. Deve estar em letras maiúsculas.)
kubernetes_services String Matriz separada por vírgulas Uma matriz de serviços do Kubernetes para extrair métricas das métricas de estado kube. Nomes de domínio totalmente qualificados devem ser usados aqui. Por exemplo, kubernetes_services = ["http://metrics-server.kube-system.svc.cluster.local/metrics",http://my-service-dns.my-namespace.svc.cluster.local:9100/metrics]
monitor_kubernetes_pods Boolean true ou false Quando definido como true nas configurações de todo o cluster, o agente de insights do Contêiner extrairá pods do Kubernetes em todo o cluster para as seguintes anotações do Prometheus:
prometheus.io/scrape:
prometheus.io/scheme:
prometheus.io/path:
prometheus.io/port:
prometheus.io/scrape Boolean true ou false Habilita a extração do pod e monitor_kubernetes_pods deve ser definido como true.
prometheus.io/scheme String http O padrão é a extração por HTTP.
prometheus.io/path String Matriz separada por vírgulas O caminho do recurso de HTTP do qual efetuar fetch de métricas. Se o caminho de métricas não for /metrics, defina-o com essa anotação.
prometheus.io/port String 9102 Especifique uma porta da qual extrair. Se a porta não estiver definida, o padrão será 9102.
monitor_kubernetes_pods_namespaces String Matriz separada por vírgulas Uma lista de permitidos de namespaces para retirar métricas de pods do Kubernetes.
Por exemplo, monitor_kubernetes_pods_namespaces = ["default1", "default2", "default3"]
Em todo o nó urls String Matriz separada por vírgulas Ponto de extremidade de HTTP (endereço IP ou caminho de URL válido especificado). Por exemplo: urls=[$NODE_IP/metrics]. ($NODE_IP é um parâmetro específico de insights do contêiner e pode ser usado em vez de um endereço IP do nó. Deve estar em letras maiúsculas.)
Em todo o nó ou em todo o cluster interval String 60s O padrão do intervalo de coleta é de um minuto (60 segundos). Você pode modificar a coleta para [prometheus_data_collection_settings.node] e/ou [prometheus_data_collection_settings.cluster] para unidades de tempo, como s, m e h.
Em todo o nó ou em todo o cluster fieldpass
fielddrop
String Matriz separada por vírgulas Você pode especificar determinadas métricas a serem coletadas ou não do ponto de extremidade definindo a listagem para permitir (fieldpass) e não permitir (fielddrop). Você deve definir a lista de permitidos primeiro.

Configurar o ConfigMaps para especificar a configuração de extração do Prometheus (para métricas armazenadas como logs)

Execute as etapas a seguir para definir o arquivo de configuração do ConfigMap para o seu cluster. ConfigMaps é uma lista global, e pode haver apenas um ConfigMap aplicado ao agente. Você não pode ter outro ConfigMaps que anule as coletas.

  1. Baixe o arquivo de modelo ConfigMap YAML e salve-o como container-azm-ms-agentconfig.yaml. Se você já tiver implantado um ConfigMap no cluster e quiser atualizá-lo com uma configuração mais recente, você poderá editar o arquivo o ConfigMap usado anteriormente.

  2. Edite o arquivo YAML do ConfigMap com suas personalizações para extrair as métricas do Prometheus.

    Para coletar serviços do Kubernetes em todo o cluster, configure o arquivo ConfigMap usando o exemplo a seguir:

    prometheus-data-collection-settings: |- ​
    # Custom Prometheus metrics data collection settings
    [prometheus_data_collection_settings.cluster] ​
    interval = "1m"  ## Valid time units are s, m, h.
    fieldpass = ["metric_to_pass1", "metric_to_pass12"] ## specify metrics to pass through ​
    fielddrop = ["metric_to_drop"] ## specify metrics to drop from collecting
    kubernetes_services = ["http://my-service-dns.my-namespace:9102/metrics"]
    
  3. Execute o seguinte comando kubectl: kubectl apply -f <configmap_yaml_file.yaml>.

    Exemplo: kubectl apply -f container-azm-ms-agentconfig.yaml.

A alteração da configuração pode levar alguns minutos para ser concluída, antes de entrar em vigor. Todos os pods de logs do ama no cluster serão reiniciados. Quando as reinicializações são concluídas, será exibida uma mensagem semelhante à seguinte e inclui o resultado configmap "container-azm-ms-agentconfig" created.

Verificar a configuração

Para verificar se a configuração foi aplicada com êxito a um cluster, use o seguinte comando para verificar os logs de um pod do agente: kubectl logs ama-logs-fdf58 -n=kube-system.

Se houver erros de configuração de pods do Agente do Azure Monitor, a saída mostrará erros semelhantes ao exemplo a seguir:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

Os erros relacionados à aplicação de alterações de configuração também estão disponíveis para verificação. As opções a seguir estão disponíveis para a solução de problemas adicionais de alterações de configuração e extração das métricas do Prometheus:

  • De logs de pod de um agente usando o mesmo comando kubectl logs.

  • Do Live Data. Os logs do Live Data mostram erros semelhantes ao exemplo a seguir:

    2019-07-08T18:55:00Z E! [inputs.prometheus]: Error in plugin: error making HTTP request to http://invalidurl:1010/metrics: Get http://invalidurl:1010/metrics: dial tcp: lookup invalidurl on 10.0.0.10:53: no such host
    
  • Da tabela KubeMonAgentEvents no seu espaço de trabalho do Log Analytics. Os dados são enviados a cada hora com severidade de Aviso para erros de extração e severidade de Erro para erros de configuração. Se não houver erros, a entrada na tabela mostrará dados com Informações sobre severidade, que não relatarão erros. A propriedade Tags contém mais informações sobre o pod e a ID do contêiner em que o erro ocorreu, e também a primeira e a última ocorrências e a contagem da última hora.

  • Para o Red Hat OpenShift no Azure v3.x e v4.x, verifique os logs do Agente do Azure Monitor pesquisando a tabela ContainerLog para confirmar se coleta de logs de openshift-azure-logging está habilitada.

Os erros impedem que o Agente do Azure Monitor analise o arquivo, fazendo com que ele seja reiniciado e use a configuração padrão. Após corrigir os erros no ConfigMap em clusters diferentes do Red Hat OpenShift no Azure v3.x, salve o arquivo YAML e aplique o ConfigMaps atualizado executando o comando kubectl apply -f <configmap_yaml_file.yaml.

No Red Hat OpenShift no Azure v3.x, edite e salve o ConfigMaps atualizado executando o comando oc edit configmaps container-azm-ms-agentconfig -n openshift-azure-logging.

Consultar dados de métricas do Prometheus

Para exibir as métricas do Prometheus extraídas pelo Azure Monitor e qualquer erro de configuração/extração relatados pelo agente, revise Consultar dados de métricas do Prometheus.

Exibir métricas do Prometheus no Grafana

Os insights do contêiner dão suporte à exibição de métricas armazenadas no seu workspace do Log Analytics nos painéis do Grafana. Fornecemos um modelo que você pode fazer download do repositório do painel do Grafana. Use o modelo para começar e faça referência a ele para ajudá-lo a aprender como consultar outros dados de seus clusters monitorados para visualizar em painéis personalizados do Grafana.

Próximas etapas