Consultar métricas do Prometheus usando a API e o PromQL
O serviço gerenciado para Prometheus do Azure Monitor coleta métricas dos clusters do Azure Kubernetes e as armazena em um espaço de trabalho do Azure Monitor. PromQL (Linguagem de consulta do Prometheus), é uma linguagem de consulta funcional que permite consultar e agregar dados de série temporal. Use o PromQL para consultar e agregar métricas armazenadas em um workspace do Azure Monitor.
Este artigo descreve como consultar um workspace do Azure Monitor usando o PromQL por meio da API REST. Para saber mais sobre PromQL, confira Consultando Prometheus.
Pré-requisitos
Para consultar um workspace do Azure Monitor usando o PromQL, você precisa dos seguintes pré-requisitos:
- Um cluster do Azure Kubernetes ou um cluster de Kubernetes remoto.
- Serviço gerenciado para Prometheus do Azure Monitor para extração de métricas de um cluster do Kubernetes.
- Um espaço de trabalho do Azure Monitor onde as métricas do Prometheus estão sendo armazenadas.
Autenticação
Para consultar seu espaço de trabalho do Monitor do Azure, autentique-se usando o Microsoft Entra ID. A API oferece suporte à autenticação do Microsoft Entra usando credenciais de cliente. Registre um aplicativo cliente com o Microsoft Entra ID e solicite um token.
Para configurar a autenticação do Microsoft Entra, siga as etapas abaixo:
- Registre um aplicativo com o Microsoft Entra ID.
- Conceda ao aplicativo acesso ao workspace do Azure Monitor.
- Solicitar um token.
Registrar um aplicativo com o Microsoft Entra ID
- Para registrar um aplicativo, siga as etapas em Registrar um aplicativo para solicitar tokens de autorização e trabalhar com APIs
Conceda ao aplicativo acesso ao workspace
Atribua a função de Leitor de dados de monitoramento ao seu aplicativo para que ele possa consultar os dados do workspace do Azure Monitor.
Abra o workspace do Azure Monitor no portal do Azure.
Na página Visão geral, anote seu ponto de extremidade de consulta para uso em sua solicitação REST.
Selecione IAM (Controle de acesso) .
Selecione Adicionar e, em seguida, Adicionar atribuição de função na página Controle de acesso (IAM).
Na página Adicionar página de atribuição de função, pesquise Monitoramento.
Selecione Monitoramento de Leitor de Dados e selecione a guia Membros.
Selecione Selecionar membros.
Pesquise pelo aplicativo que você registrou e selecione-o.
Escolha Selecionar.
Selecione Examinar + atribuir.
Você criou o registro do seu aplicativo e atribuiu a ele acesso para consultar dados do seu espaço de trabalho do Azure Monitor. Agora você pode gerar um token e usá-lo em uma consulta.
Solicitar um token
Enviar a solicitação a seguir no prompt de comando ou usando um cliente como Insomnia ou Invoke-RestMethod do PowerShell
curl -X POST 'https://login.microsoftonline.com/<tenant ID>/oauth2/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=<your apps client ID>' \
--data-urlencode 'client_secret=<your apps client secret>' \
--data-urlencode 'resource=https://prometheus.monitor.azure.com'
Amostra de corpo de resposta:
{
"token_type": "Bearer",
"expires_in": "86399",
"ext_expires_in": "86399",
"expires_on": "1672826207",
"not_before": "1672739507",
"resource": "https:/prometheus.monitor.azure.com",
"access_token": "eyJ0eXAiOiJKV1Qi....gpHWoRzeDdVQd2OE3dNsLIvUIxQ"
}
Salve o token de acesso da resposta para uso nas solicitações HTTP a seguir.
Ponto de extremidade de consulta
Encontre o ponto de extremidade de consulta do seu espaço de trabalho do Azure Monitor na página de visão geral do espaço de trabalho do Azure Monitor.
APIs com suporte
As seguintes consultas são compatíveis:
Consultas instantâneas
Para obter mais informações, consulte Consultas instantâneas
Caminho: /api/v1/query
Exemplos:
POST https://k8s-02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/query
--header 'Authorization: Bearer <access token>'
--header 'Content-Type: application/x-www-form-urlencoded'
--data-urlencode 'query=sum( \
container_memory_working_set_bytes \
* on(namespace,pod) \
group_left(workload, workload_type) \
namespace_workload_pod:kube_pod_owner:relabel{ workload_type="deployment"}) by (pod)'
GET 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/query?query=container_memory_working_set_bytes'
--header 'Authorization: Bearer <access token>'
Consultas de intervalo
Para obter mais informações, confira Consultas de intervalo
Caminho: /api/v1/query_range
Exemplos:
GET 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/query_range?query=container_memory_working_set_bytes&start=2023-03-01T00:00:00.000Z&end=2023-03-20T00:00:00.000Z&step=6h'
--header 'Authorization: Bearer <access token>
POST 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/query_range'
--header 'Authorization: Bearer <access token>'
--header 'Content-Type: application/x-www-form-urlencoded'
--data-urlencode 'query=up'
--data-urlencode 'start=2023-03-01T20:10:30.781Z'
--data-urlencode 'end=2023-03-20T20:10:30.781Z'
--data-urlencode 'step=6h'
Série
Para obter mais informações, confira Série.
Caminho: /api/v1/series
Exemplos:
POST 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/series'
--header 'Authorization: Bearer <access token>
--header 'Content-Type: application/x-www-form-urlencoded'
--data-urlencode 'match[]=kube_pod_info{pod="bestapp-123abc456d-4nmfm"}'
GET 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/series?match[]=container_network_receive_bytes_total{namespace="default-1669648428598"}'
Rótulos
Para obter mais informações, consulte Rótulos Caminho: /api/v1/labels
Exemplos:
GET 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/labels'
POST 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/labels'
Valores de rótulo
Para obter mais informações, confira Valores de rótulo
Caminho: /api/v1/label/__name__/values.
Observação
__name__
é a única versão com suporte dessa API e retorna todos os nomes de métrica. Outros /api/v1/label/<label_name>/valores não têm suporte.
Exemplo:
GET 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/label/__name__/values'
Para ver a especificação completa das APIs Prom do OSS, confira API HTTP do Prometheus.
Limitações de API
As limitações a seguir são adicionais às detalhadas na especificação do Prometheus.
- O escopo da consulta deve ser uma métrica
Todas as consultas de busca de série temporal (/series ou /query ou /query_range) devem conter um __name__ correspondente de rótulo. Ou seja, cada consulta deve ter como escopo uma métrica. Só pode haver um __name__ correspondente de rótulo em uma consulta. - A consulta /series não dá suporte ao filtro de expressão regular
- Intervalo de tempo com suporte
- A API /query_range dá suporte a um intervalo de tempo de 32 dias. Este é o intervalo de tempo máximo permitido, incluindo seletores de intervalo especificados na própria consulta.
Por exemplo, a consulta
rate(http_requests_total[1h]
para as últimas 24 horas significaria, na verdade, que os dados estão sendo consultados por 25 horas. Isto vem do intervalo de 24 horas mais a 1 hora especificada na própria consulta. - A API /series busca dados para um intervalo de tempo máximo de 12 horas. Se
endTime
não for fornecido, endTime = time.now(). Se o intervalo de tempo for maior que 12 horas, ostartTime
será definido comoendTime – 12h
- A API /query_range dá suporte a um intervalo de tempo de 32 dias. Este é o intervalo de tempo máximo permitido, incluindo seletores de intervalo especificados na própria consulta.
Por exemplo, a consulta
- Intervalo de tempo ignorado
A hora de início e a hora de término fornecidas com/labels
e/label/__name__/values
são ignoradas, e todos os dados retidos no espaço de trabalho do Azure Monitor são consultados. - Recursos experimentais
Não há suporte para recursos experimentais, como exemplares.
Para obter mais informações sobre os limites de métricas do Prometheus, confira Métricas do Prometheus
Diferenciar maiúsculas de minúsculas
O serviço gerenciado para Prometheus do Azure Monitor é um sistema que não diferencia maiúsculas de minúsculas. Ele trata cadeias de caracteres (como nomes de métrica, nomes de rótulo ou valores de rótulo) como a mesma série temporal se forem diferentes de outra série temporal somente em relação às maiúsculas e minúsculas da cadeia de caracteres.
Observação
Esse comportamento é diferente do Prometheus de código aberto nativo, que diferencia maiúsculas de minúsculas. Instâncias do Prometheus autogerenciado em execução em máquinas virtuais do Azure, conjuntos de dimensionamento de máquinas virtuais ou clusters do Serviço de Kubernetes do Azure são sistemas que diferenciam maiúsculas de minúsculas.
No serviço gerenciado para Prometheus, as seguintes séries temporais são consideradas as mesmas:
diskSize(cluster="eastus", node="node1", filesystem="usr_mnt")
diskSize(cluster="eastus", node="node1", filesystem="usr_MNT")
Os exemplos anteriores são uma única série temporal em um banco de dados de série temporal. As seguintes considerações se aplicam:
- Todos os exemplos ingeridos neles são armazenados como se fossem raspados ou ingeridos em uma única série temporal.
- Se os exemplos anteriores forem ingeridos com o mesmo carimbo de data/hora, um deles será descartado aleatoriamente.
- O uso de letras maiúsculas e minúsculas armazenadas no banco de dados de séries temporais e retornadas por uma consulta é imprevisível. A mesma série temporal pode retornar maiúsculas e minúsculas diferentes em momentos diferentes.
- Qualquer nome de métrica ou valor/nome correspondente presente na consulta é recuperado do banco de dados de série temporal por meio de uma comparação que não diferencia maiúsculas de minúsculas. Se houver um valor correspondente que diferencia maiúsculas de minúsculas em uma consulta, ele será tratado automaticamente como um valor correspondente que não diferencia maiúsculas de minúsculas em comparações de cadeia de caracteres.
É uma prática recomendada usar maiúsculas e minúsculas de forma consistente para produzir ou extrair uma série temporal.
O Prometheus de código aberto trata os exemplos anteriores como duas séries temporais diferentes. Todos os exemplos extraídos ou ingeridos neles são armazenados separadamente.
Perguntas frequentes
Esta seção fornece respostas para perguntas comuns.
Estou perdendo todas ou algumas das minhas métricas. Como posso solucionar problemas?
Você pode usar o guia de solução de problemas para ingerir métricas do Prometheus a partir do agente gerenciado aqui.
Por que faltam métricas que têm dois rótulos com o mesmo nome, mas com maiúsculas e minúsculas diferentes?
O Prometheus gerenciado pelo Azure é um sistema que não diferencia maiúsculas de minúsculas. Ele trata as cadeias de caracteres, como nomes de métricas, nomes de rótulos ou valores de rótulos, como a mesma série temporal se elas diferirem de outra série temporal apenas pelo caso da cadeia de caracteres. Para obter mais informações, consulte Visão geral das métricas do Prometheus.
Vejo algumas lacunas nos dados de métrica. Por que isso está ocorrendo?
Durante as atualizações de nó, você pode ver uma lacuna de 1 minuto a 2 minutos nos dados de métrica para métricas coletadas de nossos coletores de nível de cluster. Essa lacuna ocorre porque o nó em que os dados são executados está sendo atualizado como parte de um processo normal de atualização. Esse processo de atualização afeta destinos em todo o cluster, como kube-state-metrics e destinos de aplicativos personalizados especificados. Isso ocorre quando o cluster é atualizado manualmente ou por meio da autenticação automática. Esse comportamento é esperado e ocorre devido à atualização do nó em que ele é executado. Esse comportamento não afeta nenhuma das nossas regras de alerta recomendadas.
Próximas etapas
Visão geral do workspace do Azure Monitor
Gerenciar um workspace do Azure Monitor
Visão Geral do serviço gerenciado do Azure Monitor para Prometheus
Consultar métricas do Prometheus usando pastas de trabalho do Azure