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. Prometheus Query Language (PromQL) är ett funktionellt frågespråk som du kan använda för att 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.

Prerequisites

Om du vill köra frågor mot en Azure Monitor-arbetsyta med PromQL behöver du:

  • Ett Azure Kubernetes-kluster eller ett fjärranslutet Kubernetes-kluster.
  • Azure Monitor-hanterad tjänst för Prometheus som samlar in mått från ett Kubernetes-kluster.
  • En Azure Monitor-arbetsyta där Prometheus-mått lagras.

Authentication

För att köra frågor mot din Azure Monitor-arbetsyta autentiserar du med hjälp av Microsoft Entra-ID. API:et stöder Microsoft Entra-autentisering med hjälp av klientautentiseringsuppgifter. Registrera en klientapp med Microsoft Entra-ID och begär en token.

Följ dessa steg 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

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 till 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 Portal.

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

  3. Välj Åtkomstkontroll (IAM).

  4. På sidan Åtkomstkontroll (IAM) väljer du Lägg till>rolltilldelning.

    Skärmbild som visar översiktssidan för Azure Monitor-arbetsytan.

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

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

    Skärmbild som visar sidan Lägg till rolltilldelning.

  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.

    Skärmbild som visar sidan Lägg till rolltilldelning med fönstret Välj medlemmar öppet.

Du har skapat din appregistrering och tilldelat den åtkomst för att söka efter data 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 PowerShell-kommandot 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'

Exempelsvarstext

{
    "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å sidan Översikt över Azure Monitor-arbetsyta.

Skärmbild som visar frågeslutpunkten på sidan Översikt över Azure Monitor-arbetsytan.

API:er som stöds

Följande frågor stöds.

Omedelbara frågor

Mer information finns i Snabbfrågor.

Stig:/api/v1/query

Examples

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.

Stig:/api/v1/query_range

Examples

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'

Series

Mer information finns i Serie.

Sökväg:/api/v1/series

Examples

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"}'

Labels

Mer information finns i Etiketter.

Stig:/api/v1/labels

Examples

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.

Stig:/api/v1/label/__name__/values

Note

Den enda version som stöds av det här API:et är __name__och returnerar alla måttnamn. Inga andra /api/v1/label/<label_name>/values stöds.

Example

GET 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/label/__name__/values'

Fullständig specifikation av prometheus-API:er för programvara med öppen källkod finns i Prometheus HTTP API.

API-begränsningar

Följande begränsningar är utöver de begränsningar som beskrivs i Prometheus-specifikationen:

  • Alla frågor om tidsseriehämtningar (/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 förfrågan.

  • Frågan /series stöder inte filter för reguljära uttryck.

  • Tidsintervall som stöds:

    • API:et /query_range stöder ett tidsintervall på 32 dagar. Den här tidsperioden är det maximala tillåtna tidsintervallet, inklusive intervallväljare som anges i själva frågan. Frågan rate(http_requests_total[1h] under de senaste 24 timmarna innebär till exempel att data efterfrågas i 25 timmar. Det här talet kommer från 24-timmarsintervallet plus den 1 timme som anges i själva frågan.
    • API:et /series hämtar data för ett maximalt tidsintervall på 12 timmar. Om endTime inte anges, så endTime = time.now(). Om tidsintervallet är större än 12 timmar anges startTime till endTime – 12h.
  • Starttid och sluttid som anges med /labels och /label/__name__/values ignoreras. Alla kvarhållna data på Azure Monitor-arbetsytan efterfrågas.

  • Experimentella funktioner som exempelvis exemplar stöds inte.

Mer information om Prometheus-måttgränser finns i Prometheus-mått.

Skiftlägesberoende

Den hanterade tjänsten i Azure Monitor 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.

Note

Det här beteendet skiljer sig från native öppen källkodssystemet Prometheus, som är ett skiftlägeskänsligt system. Självhanterade Prometheus-instanser som körs på virtuella Azure-datorer, skalningsgrupper för virtuella datorer 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 prover som matas in till dem lagras som om de skrapas eller matas in till 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ägesokänslig jämförelse. Om det finns en skiftlägeskänslig matchare i en fråga behandlas den automatiskt som en skiftlägesokä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.

Undvika duplicerade tidsserier

Prometheus stöder inte duplicerade tidsserier. Azure Managed Prometheus visar dessa för användarna som 422-fel i stället för att tyst släppa duplicerade tidsserier. Användare som stöter på dessa fel bör vidta åtgärder för att undvika duplicering av tidsserier.

Om en användare till exempel använder samma "kluster"-etikettvärde för två olika kluster som lagras i olika resursgrupper men matas in till samma AMW, bör de byta namn på en av dessa etiketter för unikhet. Det här felet uppstår endast i gränsfall där tidsstämpeln och värdena är identiska i båda kluster i det här scenariot.

Detta kan åtgärdas genom att lägga till en unik identifieraretikett, ominstrumentera en befintlig etikett som var avsedd att vara unik eller använda relabel_configs för att mata in eller ändra etiketter vid skrapning.

Vanliga frågor

Den här sektionen ger svar på vanliga frågor.

Jag saknar alla eller några av mina mått. Hur felsöker jag?

Använd felsökningsguiden för att lära dig hur du matar in Prometheus-mått från den hanterade agenten.

Varför saknar jag mått som har två etiketter med samma namn men ett annat hölje?

Azure Managed 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 det här beteendet?

Under noduppdateringar kan du se ett mellanrum på en minut till två 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. Den här processen inträffar när klustret uppdateras manuellt eller via automatisk uppdatering.

Det här beteendet är förväntat och påverkar inte några av våra rekommenderade aviseringsregler.