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:
Tem experiência na utilização do Prometheus, confia na norma do Prometheus e compreende como fatores como o intervalo de recolha e a cardinalidade podem afetar os seus custos. Para mais informações, consulte o artigo Escolher o recetor do Prometheus.
O software que está a monitorizar ainda não faz parte do conjunto de integrações do agente de operações existentes.
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:
- Os utilizadores do Spring podem usar a biblioteca Spring Metrics.
- Os utilizadores do StatsD podem usar o pacote
statsd_exporter
. - Os utilizadores do Graphite podem usar o pacote
graphite_exporter
.
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
emetric_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:
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
Crie o exportador executando o seguinte comando:
make build
Inicie o servidor HTTP Python executando o seguinte comando:
python3 -m http.server 8000 &
Inicie o exportador JSON executando o seguinte comando:
./json_exporter --config.file examples/config.yml &
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:
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
eservice
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
Para reiniciar o agente, execute o seguinte comando na sua instância:
sudo service google-cloud-ops-agent restart
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
Estabeleça ligação à sua instância através do RDP ou de uma ferramenta semelhante e inicie sessão no Windows.
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.
Para reiniciar o agente, execute o seguinte comando do PowerShell:
Restart-Service google-cloud-ops-agent -Force
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:
-
Na Google Cloud consola, aceda à página leaderboard Explorador de métricas:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.
Na barra de ferramentas do painel do criador de consultas, selecione o botão cujo nome é code MQL ou code PromQL.
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.
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:
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: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, como5671897148133813325
, 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 comoid-A
,id-B
eid-C
. Para filtrar quaisquer métricas com uma etiquetaid
que 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:
-
Na Google Cloud consola, aceda à página
Gestão de métricas:Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.
- 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 etiquetainstance_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 etiquetamachine_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