Sdílet prostřednictvím


Dotazování metrik Prometheus pomocí rozhraní API a PromQL

Spravovaná služba Azure Monitor pro Prometheus shromažďuje metriky z clusterů Azure Kubernetes a ukládá je do pracovního prostoru služby Azure Monitor. Prometheus Query Language (PromQL) je funkční dotazovací jazyk, který můžete použít k dotazování a agregaci dat časových řad. Pomocí nástroje PromQL můžete dotazovat a agregovat metriky uložené v pracovním prostoru služby Azure Monitor.

Tento článek popisuje, jak dotazovat pracovní prostor služby Azure Monitor pomocí jazyka PromQL prostřednictvím rozhraní REST API. Další informace o nástroji PromQL najdete v tématu Dotaz prometheus.

Prerequisites

Pokud chcete dotazovat pracovní prostor Azure Monitoru pomocí nástroje PromQL, potřebujete:

  • Cluster Azure Kubernetes nebo cluster Kubernetes dálkového přístupu.
  • Spravovaná služba Azure Monitor pro Prometheus, která sbírá metriky z clusteru Kubernetes.
  • Pracovní prostor služby Azure Monitor, ve kterém se ukládají metriky Prometheus.

Authentication

Pokud chcete dotazovat pracovní prostor Azure Monitoru, ověřte se pomocí Microsoft Entra ID. Rozhraní API podporuje ověřování Microsoft Entra pomocí přihlašovacích údajů klienta. Zaregistrujte klientskou aplikaci s ID Microsoft Entra a požádejte o token.

Pokud chcete nastavit ověřování Microsoft Entra, postupujte takto:

  1. Zaregistrujte aplikaci pomocí Microsoft Entra ID.
  2. Udělte aplikaci přístup k pracovnímu prostoru služby Azure Monitor.
  3. Požádejte o token.

Registrace aplikace pomocí Microsoft Entra ID

Pokud chcete aplikaci zaregistrovat, postupujte podle pokynů v části Registrace aplikace a požádejte o autorizační tokeny a práci s rozhraními API.

Povolit aplikaci přístup k vašemu pracovnímu prostoru

Přiřaďte aplikaci roli Čtenář dat monitorování, aby se mohl dotazovat na data z pracovního prostoru služby Azure Monitor.

  1. Otevřete pracovní prostor Azure Monitoru na webu Azure Portal.

  2. Na stránce Přehled si poznamenejte koncový bod dotazu pro použití v požadavku REST.

  3. Vyberte Řízení přístupu (IAM) .

  4. Na stránce Řízení přístupu (IAM) vyberte Přidat>přiřazení role.

    Snímek obrazovky se stránkou Přehled pracovního prostoru služby Azure Monitor

  5. Na stránce Přidat přiřazení role vyhledejte monitorování.

  6. Vyberte Čtenář monitorovacích dat a pak vyberte kartu Členové.

    Snímek obrazovky se stránkou Přidat přiřazení role

  7. Zvolte Vybrat členy.

  8. Vyhledejte aplikaci, kterou jste zaregistrovali, a vyberte ji.

  9. Zvolte Vybrat.

  10. Vyberte Zkontrolovat a přiřadit.

    Snímek obrazovky ukazující stránku Přiřazení role s otevřeným podoknem Vybrat členy

Vytvořili jste registraci aplikace a přiřadili jste jí přístup k dotazování dat z pracovního prostoru služby Azure Monitor. Teď můžete vygenerovat token a použít ho v dotazu.

Vyžádání tokenu

Na příkazovém řádku nebo pomocí klienta, jako je Insomnia nebo příkaz PowerShell Invoke-RestMethod odešlete následující požadavek.

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'

Ukázkový text odpovědi

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

Uložte přístupový token z odpovědi pro použití v následujících požadavcích HTTP.

Koncový bod dotazu

Na stránce Přehled pracovního prostoru služby Azure Monitor vyhledejte koncový bod dotazu pracovního prostoru služby Azure Monitor.

Snímek obrazovky znázorňující koncový bod dotazu na stránce Přehled pracovního prostoru služby Azure Monitor

Podporovaná rozhraní API

Podporují se následující dotazy.

Okamžité dotazy

Další informace najdete v tématu Okamžité dotazy.

Cesta:/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>'

Dotazy na rozsah

Další informace najdete v tématu Dotazy rozsahu.

Cesta:/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

Další informace najdete v tématu Série.

Cesta:/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

Další informace najdete v části Popisky.

Cesta:/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'

Hodnoty popisků

Pro více informací viz Hodnoty popisku.

Cesta:/api/v1/label/__name__/values

Note

Jediná podporovaná verze tohoto rozhraní API je __name__a vrátí všechny názvy metrik. Nejsou podporovány žádné jiné /api/v1/label/<label_name>/values.

Example

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

Úplnou specifikaci opensourcového softwaru Prometheus API najdete v tématu Prometheus HTTP API.

Omezení rozhraní API

Kromě omezení popsaných ve specifikaci Prometheus platí následující omezení:

  • Všechny dotazy řady time-series (/series nebo /query/query_range) musí obsahovat \_\_name\_\_ odpovídající popisek. To znamená, že každý dotaz musí být vymezen na metriku. V dotazu může být pouze jeden \_\_name\_\_ porovnávač štítků.

  • Dotaz /series nepodporuje filtr regulárních výrazů.

  • Podporovaný časový rozsah:

    • Rozhraní /query_range API podporuje časový rozsah 32 dnů. Tato doba je maximální povolený časový rozsah, včetně selektorů rozsahů zadaných v samotném dotazu. Například dotaz rate(http_requests_total[1h] za posledních 24 hodin znamená, že se data dotazuje po dobu 25 hodin. Toto číslo pochází z rozmezí 24 hodin plus 1 hodina specifikovaná v rámci dotazu.
    • Rozhraní API /series načítá data pro maximální rozsah 12 hodin. Pokud endTime není zadaný, pak endTime = time.now(). Pokud je časový rozsah větší než 12 hodin, startTime je nastaven na endTime – 12hhodnotu .
  • Počáteční a koncový čas poskytnuté /labels a /label/__name__/values jsou ignorovány. Všechna zachovaná data v pracovním prostoru služby Azure Monitor jsou dotazována.

  • Experimentální funkce, jako jsou příklady, se nepodporují.

Další informace o limitech metrik Prometheus najdete v tématu Metriky Prometheus.

Citlivost na velikost písmen

Spravovaná služba Azure Monitoru pro Prometheus je systém nerozlišující velká a malá písmena. Zpracovává řetězce (například názvy metrik, názvy popisků nebo hodnoty popisků) jako stejné časové řady, pokud se liší od jiné časové řady pouze v případě řetězce.

Note

Toto chování se liší od nativního open source systému Prometheus, což je systém rozlišující malá a velká písmena. Samořízené instance Prometheus, které běží na virtuálních počítačích Azure, ve škálovacích sadách virtuálních počítačů nebo v clusterech Azure Kubernetes Service, jsou systémy s rozlišováním malých a velkých písmen.

Ve spravované službě pro Prometheus jsou následující časové řady považovány za stejné:

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

Předchozí příklady představují jednu časovou řadu v databázi časových řad. Vezměte na vědomí následující:

  • Všechny ingestované vzorky se ukládají tak, jako by byly šrotovány nebo ingestovány v rámci jedné časové řady.
  • Pokud jsou předchozí příklady zpracovány se stejným časovým razítkem, jeden z nich se náhodně vyřadí.
  • Pouzdro uložené v databázi časových řad a vrácené dotazem je nepředvídatelné. Stejná časová řada může v různých časech vracet různá pouzdra.
  • Z databáze časových řad se pomocí porovnání nerozlišujícího velká a malá písmena načte jakýkoli název metriky nebo shodný název/hodnota popisku, který je obsažen v dotazu. Pokud je v dotazu použito rozlišování velkých a malých písmen, při porovnávání řetězců se automaticky považuje za neodlišující velká a malá písmena.

Osvědčeným postupem je použít jeden konzistentní formát k výrobě nebo sběru časových řad.

Open source Prometheus považuje předchozí příklady za dvě různé časové řady. Všechny vzorky šrotované nebo ingestované proti nim se ukládají samostatně.

Zabránění duplicitním časovým řadám

Prometheus nepodporuje duplicitní časové řady. Spravovaná služba Azure Prometheus zobrazuje uživatelům tyto chyby jako 422, místo aby tiše zahazovala duplicitní časové řady. Uživatelé, kteří na tyto chyby narazí, by měli podniknout kroky, aby se zabránilo duplikaci časových řad.

Pokud například uživatel používá stejnou hodnotu označení pro dva různé clustery uložené v různých skupinách prostředků, ale odesílá data do stejné AMW, měl by jedno z těchto označení přejmenovat pro zajištění jedinečnosti. K této chybě dojde pouze v hraničních případech, kdy jsou časové razítko a hodnoty v obou clusterech v tomto scénáři stejné.

To lze opravit přidáním popisku jedinečného identifikátoru, opětovným naplněním existujícího popisku, který byl zamýšlen jako jedinečný, nebo použitím relabel_configs k vložení nebo úpravě štítků v době scrapení.

Nejčastější dotazy

Tato část obsahuje odpovědi na běžné otázky.

Chybí mi všechny nebo některé metriky. Jak můžu řešit potíže?

V průvodci odstraňováním potíží se dozvíte, jak ingestovat metriky Prometheus ze spravovaného agenta.

Proč mi chybí metriky, které mají dva štítky se stejným názvem, ale různým velikostí písmen?

Azure Managed Prometheus je systém nerozlišující malá a velká písmena. Zpracovává řetězce, jako jsou názvy metrik, názvy popisků nebo hodnoty popisků, stejně jako stejné časové řady, pokud se odlišují od jiné časové řady jen velikostí písmen v řetězci. Další informace najdete v tématu Přehled metrik Prometheus.

V datech metrik vidím určité mezery. Proč k tomuto chování dochází?

Během aktualizací uzlů se může v metrických datech shromážděných našimi sběrači na úrovni klastru vyskytnout minutová až dvouminutová mezera. K této mezerě dochází, protože uzel, na kterém se data spouští, se aktualizuje jako součást normálního procesu aktualizace. Tento proces aktualizace má vliv na cíle na úrovni clusteru, jako jsou metriky stavu kube a vlastní cíle aplikace, které jsou zadané. K tomuto procesu dochází při ruční aktualizaci clusteru nebo prostřednictvím automatické aktualizace.

Toto chování je očekávané a nemá vliv na žádná z našich doporučených pravidel upozornění.