Dela via


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:

  1. Registrera en app med Microsoft Entra-ID.
  2. Bevilja åtkomst för appen till din Azure Monitor-arbetsyta.
  3. Begär en token.

Registrera en app med Microsoft Entra-ID

  1. 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.

  1. Öppna din Azure Monitor-arbetsyta i Azure-portalen.

  2. På sidan Översikt noterar du din frågeslutpunkt för användning i din REST-begäran.

  3. Välj Åtkomstkontroll (IAM) .

  4. Välj Lägg till och sedan Lägg till rolltilldelning från sidan Åtkomstkontroll (IAM).

    A screenshot showing the Azure Monitor workspace overview page.

  5. På sidan Lägg till rolltilldelning söker du efter Övervakning.

  6. Välj Övervaka dataläsare och välj sedan fliken Medlemmar.

    A screenshot showing the Add role assignment page.

  7. Välj Välj medlemmar.

  8. Sök efter den app som du registrerade och välj den.

  9. Välj Välj.

  10. Välj Granska + tilldela.

    A screenshot showing the Add role assignment, select members page.

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 Postman.

curl -X POST 'https://login.microsoftonline.com/<tennant 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.

A screenshot sowing the query endpoint on the Azure Monitor workspace overview page.

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å startTimeendTime – 12h
  • 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-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.

Kommentar

Det här beteendet skiljer sig från det interna öppen källkod Prometheus, som är ett skiftlägeskänsligt system.

I Azure-hanterad Prometheus anses följande tidsserie vara densamma:

diskSize(cluster="eastus", node="node1", filesystem="usr_mnt")
diskSize(cluster="eastus", node="node1", filesystem="usr_MNT")

Exemplen ovan är en enskild tidsserie i en tidsseriedatabas.

  • Alla exempel som matas in mot dem lagras som om de skrapas/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. Olika höljen kan returneras vid olika tidpunkter för samma tidsserie.
  • Alla måttnamn eller etikettnamn/värdematchare som finns i frågan hämtas från tidsseriedatabasen genom att göra 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 när du gör strängjämförelser.

Det är bästa praxis att se till att en tidsserie skapas eller skrapas med ett enda konsekvent fall.

I Prometheus med öppen källkod behandlas ovanstående tidsserier som två olika tidsserier. Alla prover som skrapas/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