Fråga Prometheus-mått med hjälp av API:et och PromQL
Azure Monitor-hanterad tjänst för Prometheus samlar in mått från Azure Kubernetes-kluster och lagrar dem på en Azure Monitor-arbetsyta. PromQL (Prometheus-frågespråk) är ett funktionellt frågespråk som gör att du kan fråga efter och aggregera tidsseriedata. Använd PromQL för att fråga efter och aggregera mått som lagras på en Azure Monitor-arbetsyta.
Den här artikeln beskriver hur du frågar en Azure Monitor-arbetsyta med promQL via REST-API:et. Mer information om PromQL finns i Fråga prometheus.
Förutsättningar
Om du vill köra frågor mot en Azure Monitor-arbetsyta med PromQL behöver du följande krav:
- Ett Azure Kubernetes-kluster eller ett fjärranslutet Kubernetes-kluster.
- Azure Monitor-hanterad tjänst för Prometheus som skrapar mått från ett Kubernetes-kluster.
- En Azure Monitor-arbetsyta där Prometheus-mått lagras.
Autentisering
Om du vill fråga din Azure Monitor-arbetsyta autentiserar du med Hjälp av Microsoft Entra-ID. API:et stöder Microsoft Entra-autentisering med klientautentiseringsuppgifter. Registrera en klientapp med Microsoft Entra-ID och begär en token.
Följ stegen nedan för att konfigurera Microsoft Entra-autentisering:
- Registrera en app med Microsoft Entra-ID.
- Bevilja åtkomst för appen till din Azure Monitor-arbetsyta.
- Begär en token.
Registrera en app med Microsoft Entra-ID
- Om du vill registrera en app följer du stegen i Registrera en app för att begära auktoriseringstoken och arbeta med API:er
Ge din app åtkomst till din arbetsyta
Tilldela rollen Övervakningsdataläsare för din app så att den kan köra frågor mot data från din Azure Monitor-arbetsyta.
Öppna din Azure Monitor-arbetsyta i Azure Portal.
På sidan Översikt noterar du din frågeslutpunkt för användning i din REST-begäran.
Välj Åtkomstkontroll (IAM) .
Välj Lägg till och sedan Lägg till rolltilldelning från sidan Åtkomstkontroll (IAM).
På sidan Lägg till rolltilldelning söker du efter Övervakning.
Välj Övervaka dataläsare och välj sedan fliken Medlemmar.
Välj Välj medlemmar.
Sök efter den app som du registrerade och välj den.
Välj Välj.
Välj Granska + tilldela.
Du har skapat din appregistrering och har tilldelat den åtkomst till frågedata från Din Azure Monitor-arbetsyta. Nu kan du generera en token och använda den i en fråga.
Begära en token
Skicka följande begäran i kommandotolken eller med hjälp av en klient som Insomnia eller PowerShells Invoke-RestMethod
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'
Exempel på svarstext:
{
"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"
}
Spara åtkomsttoken från svaret för användning i följande HTTP-begäranden.
Frågeslutpunkt
Hitta din Azure Monitor-arbetsytas frågeslutpunkt på översiktssidan för Azure Monitor-arbetsytan.
API:er som stöds
Följande frågor stöds:
Omedelbara frågor
Mer information finns i Snabbfrågor
Sökväg: /api/v1/query
Exempel:
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>'
Intervallfrågor
Mer information finns i Intervallfrågor
Sökväg: /api/v1/query_range
Exempel:
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'
Serie
Mer information finns i Serie
Sökväg: /api/v1/series
Exempel:
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"}'
Etiketter
Mer information finns i Sökväg för etiketter : /api/v1/labels
Exempel:
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'
Etikettvärden
Mer information finns i Etikettvärden
Sökväg: /api/v1/label/__name__/values.
Kommentar
__name__
är den enda version som stöds av det här API:et och returnerar alla måttnamn. Inga andra /api/v1/label/<label_name>/values stöds.
Exempel:
GET 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/label/__name__/values'
Fullständig specifikation av OSS-prom-API:er finns i Prometheus HTTP API.
API-begränsningar
Följande begränsningar är utöver de som beskrivs i Prometheus-specifikationen.
- Frågan måste vara begränsad till ett mått
Alla tidsserier som hämtar frågor (/series eller /query eller /query_range) måste innehålla en __name__ etikettmatchare. Varje fråga måste alltså begränsas till ett mått. Det kan bara finnas en __name__ etikettmatchare i en fråga. - Fråge-/serie stöder inte filter för reguljära uttryck
- Tidsintervall som stöds
- /query_range API stöder ett tidsintervall på 32 dagar. Det här är det maximala tillåtna tidsintervallet, inklusive intervallväljare som anges i själva frågan.
Frågan
rate(http_requests_total[1h]
för de senaste 24 timmarna skulle till exempel innebära att data efterfrågas i 25 timmar. Detta kommer från 24-timmarsintervallet plus den 1 timme som anges i själva frågan. - /series API hämtar data för ett maximalt tidsintervall på 12 timmar. Om
endTime
inte anges, endTime = time.now(). Om tidsraset är större än 12 timmar är den inställd påstartTime
endTime – 12h
- /query_range API stöder ett tidsintervall på 32 dagar. Det här är det maximala tillåtna tidsintervallet, inklusive intervallväljare som anges i själva frågan.
Frågan
- Ignorerat tidsintervall
Starttid och sluttid som tillhandahålls med/labels
och/label/__name__/values
ignoreras, och alla kvarhållna data på Azure Monitor-arbetsytan efterfrågas. - Experimentella funktioner
Experimentella funktioner som exempel stöds inte.
Mer information om Prometheus-måttgränser finns i Prometheus-mått
Skiftlägeskänslig
Azure Monitor-hanterad tjänst för Prometheus är ett skiftlägesokänsligt system. Den behandlar strängar (till exempel måttnamn, etikettnamn eller etikettvärden) som samma tidsserie om de skiljer sig från en annan tidsserie endast när det gäller strängen.
Kommentar
Det här beteendet skiljer sig från prometheus med öppen källkod, som är ett skiftlägeskänsligt system. Självhanterade Prometheus-instanser som körs på virtuella Azure-datorer, vm-skalningsuppsättningar eller Azure Kubernetes Service-kluster är skiftlägeskänsliga system.
I den hanterade tjänsten för Prometheus anses följande tidsserie vara densamma:
diskSize(cluster="eastus", node="node1", filesystem="usr_mnt")
diskSize(cluster="eastus", node="node1", filesystem="usr_MNT")
Föregående exempel är en enda tidsserie i en tidsseriedatabas. Följande gäller:
- Alla exempel som matas in mot dem lagras som om de skrapas eller matas in mot en enda tidsserie.
- Om föregående exempel matas in med samma tidsstämpel släpps en av dem slumpmässigt.
- Höljet som lagras i tidsseriedatabasen och returneras av en fråga är oförutsägbart. Samma tidsserier kan returnera olika höljen vid olika tidpunkter.
- Alla måttnamn eller etikettnamn/värdematchare som finns i frågan hämtas från tidsseriedatabasen via en skiftlägeskänslig jämförelse. Om det finns en skiftlägeskänslig matchare i en fråga behandlas den automatiskt som en skiftlägeskänslig matchare i strängjämförelser.
Det är bästa praxis att använda ett enda konsekvent fall för att producera eller skrapa en tidsserie.
Prometheus med öppen källkod behandlar föregående exempel som två olika tidsserier. Alla prover som skrapas eller matas in mot dem lagras separat.
Vanliga frågor och svar
Det här avsnittet innehåller svar på vanliga frågor.
Jag saknar alla eller några av mina mått. Hur felsöker jag?
Du kan använda felsökningsguiden för att mata in Prometheus-mått från den hanterade agenten här.
Varför saknar jag mått som har två etiketter med samma namn men ett annat hölje?
Azure-hanterad Prometheus är ett skiftlägesokänsligt system. Den behandlar strängar, till exempel måttnamn, etikettnamn eller etikettvärden, som samma tidsserie om de endast skiljer sig från en annan tidsserie när det gäller strängen. Mer information finns i Översikt över Prometheus-mått.
Jag ser vissa luckor i måttdata, varför inträffar detta?
Under noduppdateringar kan du se ett mellanrum på 1 minut till 2 minuter i måttdata för mått som samlats in från våra insamlare på klusternivå. Det här felet beror på att noden som data körs på uppdateras som en del av en normal uppdateringsprocess. Den här uppdateringsprocessen påverkar klusteromfattande mål som kube-state-metrics och anpassade programmål som anges. Detta inträffar när klustret uppdateras manuellt eller via autouppdate. Det här beteendet förväntas och inträffar på grund av den nod som körs när den uppdateras. Det här beteendet påverkar inte någon av våra rekommenderade aviseringsregler.
Nästa steg
Översikt över Azure Monitor-arbetsyta
Hantera en Azure Monitor-arbetsyta
Översikt över Azure Monitor Managed Service för Prometheus
Köra frågor mot Prometheus-mått med hjälp av Azure-arbetsböcker