Recolha métricas do Prometheus

Este documento descreve a configuração e a utilização de um recetor de métricas do agente de operações que pode usar para recolher métricas do Prometheus no Compute Engine. Este documento também descreve um exemplo que pode usar para experimentar o recetor.

Os utilizadores do Google Kubernetes Engine têm conseguido recolher métricas do Prometheus através do Managed Service for Prometheus do Google Cloud. O recetor Prometheus do agente de operações oferece aos utilizadores do Compute Engine a mesma capacidade.

Pode usar todas as ferramentas fornecidas pelo Cloud Monitoring, incluindo o PromQL, para ver e analisar os dados recolhidos pelo recetor do Prometheus. Por exemplo, pode usar o Explorador de métricas, conforme descrito na Google Cloud consola para Monitorização, para consultar os seus dados. Também pode criar painéis de controlo do Cloud Monitoring e políticas de alerta para monitorizar as suas métricas do Prometheus. Recomendamos que use o PromQL como linguagem de consulta para as suas métricas do Prometheus.

Também pode ver as suas métricas do Prometheus em interfaces fora do Cloud Monitoring, como a IU do Prometheus e o Grafana.

Escolha o recetor certo

Antes de decidir usar o recetor do Prometheus, determine se já existe uma integração do agente de operações para a aplicação que está a usar. Para obter informações sobre as integrações existentes com o agente de operações, consulte o artigo Monitorizar aplicações de terceiros. Se existir uma integração, recomendamos que a use. Para mais informações, consulte o artigo Escolher uma integração existente.

Recomendamos a utilização do recetor Prometheus do agente de operações quando as seguintes condições forem verdadeiras:

Integrações existentes

O agente de operações oferece integrações para várias aplicações de terceiros. Estas integrações oferecem-lhe o seguinte:

  • Um conjunto de workload.googleapis.com métricas selecionadas para a aplicação
  • Um painel de controlo para visualizar as métricas.

As métricas carregadas através de uma integração existente estão sujeitas a preços baseados em bytes para métricas recolhidas pelo agente. Para obter informações acerca destes preços, consulte o artigo Métricas cobradas por bytes carregados. O número e os tipos de métricas são conhecidos antecipadamente e pode usar essas informações para estimar os custos.

Por exemplo, se estiver a usar a integração do servidor Web Apache (httpd), o agente de operações recolhe cinco métricas escalares. Cada ponto de dados conta como 8 bytes. Se mantiver a frequência de amostragem predefinida do agente de operações de 60 segundos, o número de bytes carregados por dia é 57 600 * o número de anfitriões:

  • 8 (bytes) * 1440 (minutos por dia) * 5 (métricas) * n (anfitriões) ou
  • 57 600 * n (anfitriões)

Para mais informações sobre a estimativa de custos, consulte os Exemplos de preços com base nos bytes carregados.

O recetor do Prometheus

Quando usa o agente de operações para recolher métricas do Prometheus, aplicam-se as seguintes condições:

  • O número e a cardinalidade das métricas emitidas pela sua aplicação estão sob o seu controlo. Não existe um conjunto organizado de métricas. A quantidade de dados que carrega é determinada pela configuração da sua aplicação Prometheus e pelo recetor Prometheus do agente de operações.

  • As métricas são carregadas no Cloud Monitoring como métricas.prometheus.googleapis.com Estas métricas são classificadas como um tipo de métricas "personalizadas" quando são carregadas no Cloud Monitoring e estão sujeitas às quotas e limites das métricas personalizadas.

  • Tem de conceber e criar todos os painéis de controlo do Cloud Monitoring de que precisa com base no conjunto de métricas que está a carregar e nas necessidades da sua empresa. Para obter informações sobre como criar painéis de controlo, consulte o artigo Painéis de controlo e gráficos.

  • O preço da carregamento de métricas baseia-se no número de métricas cobradas por amostras carregadas. Para estimar os custos quando usar o recetor do Prometheus, tem de determinar o número de exemplos que é provável recolher durante um ciclo de faturação. A estimativa baseia-se nos seguintes fatores:

    • Número de métricas escalares; cada valor é uma amostra
    • Número de métricas de distribuição; cada histograma conta como (2 + número de grupos no histograma) amostras
    • Frequência de amostragem de cada métrica
    • Número de anfitriões a partir dos quais as métricas são amostradas

    Para mais informações sobre a contagem de amostras e a estimativa de custos, consulte os Exemplos de preços com base nas amostras carregadas.

Pré-requisitos

Para recolher métricas do Prometheus através do recetor do Prometheus, tem de instalar a versão 2.25.0 ou superior do agente de operações.

O recetor do agente de operações requer um ponto final que emita métricas do Prometheus. Por conseguinte, a sua aplicação tem de fornecer esse ponto final diretamente ou usar uma biblioteca ou um exportador do Prometheus para expor um ponto final. Muitas bibliotecas e frameworks de linguagem, como Spring e DropWizard, ou aplicações como StatsD, DogStatsD e Graphite, que emitem métricas não Prometheus, podem usar bibliotecas cliente ou exportadores Prometheus para emitir métricas ao estilo Prometheus. Por exemplo, para emitir métricas do Prometheus:

Quando as métricas do Prometheus são emitidas por uma aplicação, diretamente ou através de uma biblioteca ou um exportador, as métricas podem ser recolhidas por um agente de operações configurado com um recetor do Prometheus.

Configure o agente de operações

Normalmente, o modelo de configuração do Ops Agent envolve a definição do seguinte:

  • Recetores, que determinam as métricas recolhidas.
  • Processadores, que descrevem como o agente de operações pode modificar as métricas.
  • Pipelines, que associam recetores e processadores num serviço.

A configuração para carregar métricas do Prometheus é ligeiramente diferente: não existem processadores envolvidos.

Configuração para métricas do Prometheus

A configuração do agente de operações para carregar métricas do Prometheus difere da configuração habitual da seguinte forma:

  • Não cria um processador do agente de operações para métricas do Prometheus. O recetor do Prometheus suporta quase todas as opções de configuração especificadas pela especificação do Prometheus scrape_config, incluindo opções de reetiquetagem.

    Em vez de usar um processador do agente de operações, o processamento de métricas é feito usando as secções relabel_configs e metric_relabel_configs da configuração de raspagem, conforme especificado no recetor do Prometheus. Para mais informações, consulte o artigo Reetiquetagem: modificar os dados extraídos.

  • Define o pipeline do Prometheus apenas em termos do recetor do Prometheus. Não especificar processadores. Também não pode usar recetores não Prometheus no pipeline para métricas Prometheus.

A maioria da configuração do recetor é a especificação das opções de scrape-config. Omitindo essas opções para simplificar, o seguinte mostra a estrutura de uma configuração do agente de operações que usa um recetor do Prometheus. Especifica os valores de RECEIVER_ID e PIPELINE_ID.

metrics:
  receivers:
    RECEIVER_ID:
      type: prometheus
      config:
        scrape_configs:
          [... omitted for brevity ...]

  service:
    pipelines:
      PIPELINE_ID:
        receivers: [RECEIVER_ID]

A secção seguinte descreve o recetor do Prometheus mais detalhadamente. Para ver um exemplo funcional de um recetor e um pipeline, consulte o artigo Adicione o recetor e o pipeline do agente de operações.

O recetor do Prometheus

Para especificar um recetor para métricas do Prometheus, crie um recetor de métricas do tipo prometheus e especifique um conjunto de opções scrape_config. O recetor suporta todas as opções do Prometheus, exceto as seguintes:scrape_config

  • As secções de deteção de serviços, *_sd_config.
  • A definição honor_labels.

Por conseguinte, pode copiar as configurações de recolha existentes e usá-las para o agente de operações com pouca ou nenhuma modificação.

A estrutura completa do recetor do Prometheus é apresentada no seguinte:

metrics:
  receivers:
    prom_application:
      type: prometheus
      config:
        scrape_configs:
          - job_name: 'STRING' # must be unique across all Prometheus receivers
              scrape_interval: # duration, like 10m or 15s
              scrape_timeout:  # duration, like 10m or 15s
              metrics_path: # resource path for metrics, default = /metrics
              honor_timestamps: # boolean, default = false
              scheme: # http or https, default = http
              params:
                - STRING: STRING
              basic_auth:
                username: STRING
                password: SECRET
                password_file: STRING
              authorization:
                type: STRING # default = Bearer
                credentials: SECRET
                credentials_file: FILENAME

              oauth2: OAUTH2 # See Prometheus oauth2
              follow_redirects: # boolean, default = true
              enable_http2: # boolean, default = true
              tls_config: TLS_CONFIG # See Prometheus tls_config
              proxy_url: STRING

              static_configs:
                STATIC_CONFIG # See Prometheus static_config
              relabel_configs:
                RELABEL_CONFIG # See Prometheus relabel_config
              metric_relabel_configs:
                METRIC_RELABEL_CONFIGS # See Prometheus metric_relabel_configs

Para ver exemplos de configurações de reetiquetagem, consulte a Configuração do recetor adicional.

Exemplo: configure o agente de operações para o Prometheus

Esta secção mostra um exemplo de como configurar o agente de operações para recolher métricas do Prometheus a partir de uma aplicação. Este exemplo usa o JSON Exporter fornecido pela comunidade do Prometheus (json_exporter), que expõe as métricas do Prometheus na porta 7979.

A configuração do exemplo requer os seguintes recursos, que pode ter de instalar:

  • git
  • curl
  • make
  • python3
  • Linguagem Go, versão 1.19 ou superior

Crie ou configure a sua aplicação

Para obter e executar o exportador JSON, use o seguinte procedimento:

  1. Clone o repositório json_exporter e consulte o exportador executando os seguintes comandos:

    git clone https://github.com/prometheus-community/json_exporter.git
    
    cd json_exporter
    
    git checkout v0.5.0
    
  2. Crie o exportador executando o seguinte comando:

    make build
    
  3. Inicie o servidor HTTP Python executando o seguinte comando:

    python3 -m http.server 8000 &
    
  4. Inicie o exportador JSON executando o seguinte comando:

    ./json_exporter --config.file examples/config.yml &
    
  5. Consulte o exportador JSON para verificar se está em execução e a expor métricas na porta 7979:

    curl "http://localhost:7979/probe?module=default&target=http://localhost:8000/examples/data.json"
    

    Se a consulta tiver sido bem-sucedida, é apresentado um resultado semelhante ao seguinte:

    # HELP example_global_value Example of a top-level global value scrape in the json
    # TYPE example_global_value untyped
    example_global_value{environment="beta",location="planet-mars"} 1234
    # HELP example_value_active Example of sub-level value scrapes from a json
    # TYPE example_value_active untyped
    example_value_active{environment="beta",id="id-A"} 1
    example_value_active{environment="beta",id="id-C"} 1
    # HELP example_value_boolean Example of sub-level value scrapes from a json
    # TYPE example_value_boolean untyped
    example_value_boolean{environment="beta",id="id-A"} 1
    example_value_boolean{environment="beta",id="id-C"} 0
    # HELP example_value_count Example of sub-level value scrapes from a json
    # TYPE example_value_count untyped
    example_value_count{environment="beta",id="id-A"} 1
    example_value_count{environment="beta",id="id-C"} 3
    

    Neste resultado, as strings como example_value_active são os nomes das métricas, com etiquetas e valores entre chavetas. O valor de dados segue o conjunto de etiquetas.

Adicione o recetor e o pipeline do agente de operações

Para configurar o agente de operações de modo a carregar métricas da aplicação JSON Exporter, tem de modificar a configuração do agente para adicionar um recetor e um pipeline do Prometheus. Para o exemplo do exportador JSON, use o seguinte procedimento:

  1. Edite o ficheiro de configuração do agente de operações, /etc/google-cloud-ops-agent/config.yaml, e adicione as seguintes entradas de pipeline e recetor do Prometheus:

    metrics:
      receivers:
        prometheus:
            type: prometheus
            config:
              scrape_configs:
                - job_name: 'json_exporter'
                  scrape_interval: 10s
                  metrics_path: /probe
                  params:
                    module: [default]
                    target: [http://localhost:8000/examples/data.json]
                  static_configs:
                    - targets: ['localhost:7979']
      service:
        pipelines:
          prometheus_pipeline:
            receivers:
              - prometheus
     

    Se já tiver outras entradas de configuração neste ficheiro, adicione o recetor e o pipeline do Prometheus às entradas metrics e service existentes. Para mais informações, consulte o artigo Configurações de métricas.

    Para ver exemplos de reetiquetagem de configurações no recetor, consulte a secção Configuração adicional do recetor.

Reinicie o agente de operações

Para aplicar as alterações de configuração, tem de reiniciar o agente de operações.

LINUX

  1. Para reiniciar o agente, execute o seguinte comando na sua instância:

    sudo service google-cloud-ops-agent restart
    
  2. Para confirmar que o agente foi reiniciado, execute o seguinte comando e verifique se os componentes "Agente de métricas" e "Agente de registo" foram iniciados:

    sudo systemctl status google-cloud-ops-agent"*"
    

Windows

  1. Estabeleça ligação à sua instância através do RDP ou de uma ferramenta semelhante e inicie sessão no Windows.

  2. Abra um terminal do PowerShell com privilégios de administrador clicando com o botão direito do rato no ícone do PowerShell e selecionando Executar como administrador.

  3. Para reiniciar o agente, execute o seguinte comando do PowerShell:

    Restart-Service google-cloud-ops-agent -Force
    
  4. Para confirmar que o agente foi reiniciado, execute o seguinte comando e verifique se os componentes "Agente de métricas" e "Agente de registo" foram iniciados:

    Get-Service google-cloud-ops-agent*
    

Métricas do Prometheus no Cloud Monitoring

Pode usar as ferramentas fornecidas pelo Cloud Monitoring com os dados recolhidos pelo recetor do Prometheus. Por exemplo, pode criar gráficos de dados através do Explorador de métricas, conforme descrito na Google Cloud consola de monitorização. As secções seguintes descrevem as ferramentas de consulta disponíveis no Cloud Monitoring com o Explorador de métricas:

Pode criar painéis de controlo e políticas de alerta do Cloud Monitoring para as suas métricas. Para informações sobre os painéis de controlo e os tipos de gráficos que pode usar, consulte o artigo Painéis de controlo e gráficos. Para obter informações sobre as políticas de alerta, consulte o artigo Usar políticas de alerta.

Também pode ver as suas métricas noutras interfaces, como a IU do Prometheus e o Grafana. Para informações sobre a configuração destas interfaces, consulte as secções seguintes na documentação do Google Cloud Managed Service for Prometheus:

Use PromQL

O PromQL é a linguagem de consulta recomendada para métricas carregadas através do recetor do Prometheus.

A forma mais simples de verificar se os seus dados do Prometheus estão a ser carregados é usar a página do explorador de métricas do Cloud Monitoring na Google Cloud consola:

  1. Na Google Cloud consola, aceda à página  Explorador de métricas:

    Aceda ao Metrics Explorer

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Na barra de ferramentas do painel do criador de consultas, selecione o botão cujo nome é  MQL ou  PromQL.

  3. Verifique se a opção PromQL está selecionada no botão Idioma. O botão para alternar o idioma encontra-se na mesma barra de ferramentas que lhe permite formatar a consulta.

  4. Introduza a seguinte consulta no editor e, de seguida, clique em Executar consulta:

    up
    

Se os dados estiverem a ser carregados, é apresentado um gráfico semelhante ao seguinte:

Gráfico do Explorador de métricas para a métrica json-exporter up.

Se estiver a executar o exemplo do exportador JSON, também pode emitir consultas como as seguintes:

  • Consultar todos os dados de uma métrica exportada específica por nome, por exemplo:

    example_value_count
    

    A imagem seguinte mostra um gráfico para example_value_count, incluindo etiquetas definidas pela aplicação JSON Exporter e etiquetas adicionadas pelo Ops Agent:

    Gráfico do explorador de métricas para a métrica example_value_count do exportador de JSON.

  • Consultar dados de uma métrica exportada que teve origem num espaço de nomes específico. O valor da etiqueta namespace é o ID da instância do Compute Engine, um número longo, como 5671897148133813325, atribuído à VM. Uma consulta tem o seguinte aspeto:

    example_value_count{namespace="INSTANCE_ID"}
    
  • Consultar dados que correspondem a uma expressão regular específica. O exportador JSON emite métricas com uma etiqueta id que tem valores como id-A, id-B e id-C. Para filtrar quaisquer métricas com uma etiqueta idque corresponda a este padrão, use a seguinte consulta:

    example_value_count{id=~"id.*"}
    

Para mais informações sobre a utilização do PromQL no Explorador de métricas e nos gráficos do Cloud Monitoring, consulte o artigo PromQL no Cloud Monitoring.

Veja a utilização de métricas e os diagnósticos no Cloud Monitoring

A página Gestão de métricas do Cloud Monitoring fornece informações que podem ajudar a controlar o valor gasto em métricas faturáveis sem afetar a observabilidade. A página Gestão de métricas apresenta as seguintes informações:

  • Volumes de carregamento para a faturação baseada em bytes e em amostras, em domínios de métricas e para métricas individuais.
  • Dados sobre as etiquetas e a cardinalidade das métricas.
  • Número de leituras para cada métrica.
  • Utilização de métricas em políticas de alerta e painéis de controlo personalizados.
  • Taxa de erros de escrita de métricas.

Também pode usar a página Gestão de métricas para excluir métricas desnecessárias, eliminando o custo da respetiva ingestão.

Para ver a página Gestão de métricas, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Gestão de métricas:

    Aceda a Gestão de métricas

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Na barra de ferramentas, selecione o intervalo de tempo. Por predefinição, a página Gestão de métricas apresenta informações sobre as métricas recolhidas no dia anterior.

Para mais informações sobre a página Gestão de métricas, consulte o artigo Veja e faça a gestão da utilização de métricas.

Reetiquetagem: modificar os dados extraídos

Pode usar a reetiquetagem para modificar o conjunto de etiquetas do destino de recolha de dados ou as respetivas métricas antes de o destino ser recolhido. Se tiver vários passos numa configuração de reetiquetagem, estes são aplicados pela ordem em que aparecem no ficheiro de configuração.

O agente de operações cria um conjunto de metacarateres (carateres com o prefixo da string __meta_. Estas metacaracterísticas registam informações sobre a instância do Compute Engine na qual o agente de operações está a ser executado. As etiquetas com o prefixo da string __, incluindo as meta etiquetas, só estão disponíveis durante a reetiquetagem. Pode usar a reetiquetagem para capturar os valores destas etiquetas em etiquetas extraídas.

A reetiquetagem de métricas é aplicada a amostras. É o último passo antes da carregamento. Pode usar a reetiquetagem de métricas para eliminar intervalos temporais que não precisa de carregar. A eliminação destes intervalos temporais reduz o número de amostras carregadas, o que pode diminuir os custos.

Para mais informações sobre a reetiquetagem, consulte a documentação do Prometheus para relabel_config e metric_relabel_configs.

Metiquetas do Compute Engine disponíveis durante a reetiquetagem

Quando o agente de operações extrai métricas, inclui um conjunto de metacaraterísticas cujos valores se baseiam na configuração da VM do Compute Engine na qual o agente está a ser executado. Pode usar estas etiquetas e a secção relabel_configs do recetor do Prometheus para adicionar metadados adicionais às suas métricas sobre a VM a partir da qual foram carregadas. Para ver um exemplo, consulte a secção Configuração adicional do recetor.

As seguintes etiquetas meta estão disponíveis em alvos para utilização na secção relabel_configs:

  • __meta_gce_instance_id: o ID numérico da instância do Compute Engine (local)
  • __meta_gce_instance_name: o nome da instância do Compute Engine (local); o agente de operações coloca automaticamente este valor na etiqueta instance_name mutável nas suas métricas.
  • __meta_gce_machine_type: URL completo ou parcial do tipo de máquina da instância; o agente de operações coloca automaticamente este valor na etiqueta machine_type mutável nas suas métricas.
  • __meta_gce_metadata_NAME: cada item de metadados da instância
  • __meta_gce_network: o URL de rede da instância
  • __meta_gce_private_ip: o endereço IP privado da instância
  • __meta_gce_interface_ipv4_NAME: endereço IPv4 de cada interface com nome
  • __meta_gce_project: o Google Cloud projeto no qual a instância está a ser executada (local)
  • __meta_gce_public_ip: o endereço IP público da instância, se estiver presente
  • __meta_gce_tags: lista de etiquetas de instâncias separadas por vírgulas
  • __meta_gce_zone: o URL da zona do Compute Engine na qual a instância está em execução

Os valores destas etiquetas são definidos quando o agente de operações é iniciado. Se modificar os valores, tem de reiniciar o agente do Ops para atualizar os valores.

Configuração adicional do recetor

Esta secção fornece exemplos que usam as secções relabel_configs e metric_relabel_configs do recetor do Prometheus para modificar o número e a estrutura das métricas carregadas. Esta secção também inclui uma versão modificada do recetor para o exemplo do exportador JSON que usa as opções de reetiquetagem.

Adicione metadados de VMs

Pode usar a secção relabel_configs para adicionar etiquetas às métricas. Por exemplo, o seguinte usa uma etiqueta meta, __meta_gce_zone, fornecida pelo agente de operações para criar uma etiqueta de métrica, zone, que é preservada após a reetiquetagem, porque zone não tem o prefixo __.

Para ver uma lista de metacaraterísticas disponíveis, consulte o artigo Metacaraterísticas do Compute Engine disponíveis durante a reetiquetagem. Alguns dos metamarcadores são reetiquetados para si pela configuração predefinida do agente de operações.

relabel_configs:
  - source_labels: [__meta_gce_zone]
    regex: '(.+)'
    replacement: '${1}'
    target_label: zone

O recetor do Prometheus apresentado no Exemplo: configure o agente de operações para o Prometheus inclui a adição desta etiqueta.

Métricas de abandono

Pode usar a secção metrics_relabel_configs para ignorar métricas que não quer carregar. Este padrão é útil para a contenção de custos. Por exemplo, pode usar o seguinte padrão para rejeitar qualquer métrica com nomes que correspondam a METRIC_NAME_REGEX_1 ou METRIC_NAME_REGEX_2:

metric_relabel_configs:
  - source_labels: [ __name__ ]
    regex: 'METRIC_NAME_REGEX_1'
    action: drop
  - source_labels: [ __name__ ]
    regex: 'METRIC_NAME_REGEX_2'
    action: drop

Adicione etiquetas estáticas

Pode usar a secção metrics_relabel_configs para adicionar etiquetas estáticas a todas as métricas carregadas pelo recetor do Prometheus. Pode usar o seguinte padrão para adicionar etiquetas staticLabel1 e staticLabel2 a todas as métricas carregadas:

metric_relabel_configs:
  - source_labels: [ __address__ ]
    action: replace
    replacement: 'STATIC_VALUE_1'
    target_label: staticLabel1
  - source_labels: [ __address__ ]
    action: replace
    replacement: 'STATIC_VALUE_2'
    target_label: staticLabel2

A seguinte versão do recetor do Prometheus para o exemplo do exportador JSON usa estes padrões de configuração para fazer o seguinte:

  • Defina a etiqueta zone a partir do valor da etiqueta __meta_gce_zone meta fornecida pelo agente de operações.
  • Diminuir a métrica example_global_value do exportador.
  • Adicione a etiqueta staticLabel com o valor "Um valor estático" a todas as métricas carregadas.
metrics:
  receivers:
    prometheus:
        type: prometheus
        config:
          scrape_configs:
            - job_name: 'json_exporter'
              scrape_interval: 10s
              metrics_path: /probe
              params:
                module: [default]
                target: [http://localhost:8000/examples/data.json]
              static_configs:
                - targets: ['localhost:7979']
              relabel_configs:
                - source_labels: [__meta_gce_zone]
                  regex: '(.+)'
                  replacement: '${1}'
                  target_label: zone
              metric_relabel_configs:
                - source_labels: [ __name__ ]
                  regex: 'example_global_value'
                  action: drop
                - source_labels: [ __address__ ]
                  action: replace
                  replacement: 'A static value'
                  target_label: staticLabel