Aracılığıyla paylaş


API ve PromQL kullanarak Prometheus ölçümlerini sorgulama

Prometheus için Azure İzleyici yönetilen hizmeti, Azure Kubernetes kümelerinden ölçümleri toplar ve bunları bir Azure İzleyici çalışma alanında depolar. Prometheus Sorgu Dili (PromQL), zaman serisi verilerini sorgulamak ve toplamak için kullanabileceğiniz işlevsel bir sorgu dilidir. Azure İzleyici çalışma alanında depolanan ölçümleri sorgulamak ve toplamak için PromQL kullanın.

Bu makalede, REST API aracılığıyla PromQL kullanarak Azure İzleyici çalışma alanını sorgulama açıklanmaktadır. PromQL hakkında daha fazla bilgi için bkz. Sorgu Prometheus.

Önkoşullar

PromQL kullanarak azure izleyici çalışma alanını sorgulamak için şunları yapmanız gerekir:

  • Azure Kubernetes kümesi veya uzak Kubernetes kümesi.
  • Azure Monitor, Prometheus ölçümlerini bir Kubernetes kümesinden kazıyan yönetilen bir hizmettir.
  • Prometheus ölçümlerinin depolandığı bir Azure İzleyici çalışma alanı.

Kimlik doğrulama

Azure İzleyici çalışma alanınızı sorgulamak için Microsoft Entra Id kullanarak kimlik doğrulaması yapın. API, istemci kimlik bilgilerini kullanarak Microsoft Entra kimlik doğrulamasını destekler. Microsoft Entra Id ile bir istemci uygulaması kaydedin ve bir belirteç isteyin.

Microsoft Entra kimlik doğrulamasını ayarlamak için şu adımları izleyin:

  1. Bir uygulamayı Microsoft Entra Id ile kaydedin.
  2. Uygulama için Azure İzleyici çalışma alanınıza erişim izni verin.
  3. Jeton isteyin.

Microsoft Entra Id ile uygulama kaydetme

Bir uygulamayı kaydetmek için, Yetkilendirme belirteçleri istemek ve API'lerle çalışmak için Uygulama kaydetme'deki adımları izleyin.

Uygulamanızın çalışma alanınıza erişmesine izin verme

Azure İzleyici çalışma alanınızdaki verileri sorgu edebilmesi için uygulamanıza İzleme Veri Okuyucusu rolünü atayın.

  1. Azure İzleyici çalışma alanınızı Azure portalında açın.

  2. Genel Bakış sayfasında, REST isteğinizde kullanmak üzere sorgu uç noktanızı not edin.

  3. Erişim denetimi (IAM) öğesini seçin.

  4. Erişim denetimi (IAM) sayfasındaRol ataması ekle'yi> seçin.

    Azure İzleyici çalışma alanına genel bakış sayfasını gösteren ekran görüntüsü.

  5. Rol ataması ekle sayfasında İzleme'yi arayın.

  6. İzleme Verisi Okuyucusu'nu seçin ve ardından Üyeler sekmesini seçin.

    Rol ataması ekle sayfasını gösteren ekran görüntüsü.

  7. Üyeleri seç'i seçin .

  8. Kaydettiğiniz uygulamayı arayın ve seçin.

  9. Seç'i seçin.

  10. Gözden geçir + ata'yı seçin.

    Üye seç bölmesinin açık olduğu Rol ataması ekle sayfasını gösteren ekran görüntüsü.

Uygulama kaydınızı oluşturdunuz ve Azure İzleyici çalışma alanınızdaki sorgu verilerine erişim atamıştınız. Artık bir belirteç oluşturabilir ve bunu sorguda kullanabilirsiniz.

Jeton talep et

Komut isteminde veya Insomnia veya PowerShell Invoke-RestMethod komutu gibi bir istemci kullanarak aşağıdaki isteği gönderin.

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'

Örnek yanıt gövdesi

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

Erişim belirtecini yanıttan aşağıdaki HTTP isteklerinde kullanmak üzere kaydedin.

Sorgu uç noktası

Azure İzleyici çalışma alanınızın sorgu uç noktasını Azure İzleyici çalışma alanına Genel Bakış sayfasında bulabilirsiniz.

Azure İzleyici çalışma alanına Genel Bakış sayfasında sorgu uç noktasını gösteren ekran görüntüsü.

Desteklenen API'ler

Aşağıdaki sorgular desteklenir.

Anlık sorgular

Daha fazla bilgi için bkz . Anlık sorgular.

Yol:/api/v1/query

Örnekler

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

Aralık sorguları

Daha fazla bilgi için Aralık sorguları bölümüne bakın.

Yol:/api/v1/query_range

Örnekler

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'

Seriler

Daha fazla bilgi için bkz. Seriler.

Yol:/api/v1/series

Örnekler

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

Etiketler

Daha fazla bilgi için bkz. Etiketler.

Yol:/api/v1/labels

Örnekler

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'

Etiket değerleri

Daha fazla bilgi için bkz. Etiket değerleri.

Yol:/api/v1/label/__name__/values

Uyarı

Bu API'nin desteklenen tek sürümü olur __name__ve tüm ölçüm adlarını döndürür. Başka /api/v1/label/<label_name>/values desteklenmez.

Örnek

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

Açık kaynak yazılım Prometheus API'lerinin tam belirtimi için bkz. Prometheus HTTP API.

API sınırlamaları

Prometheus belirtiminde açıklanan sınırlamalara ek olarak aşağıdaki sınırlamalar vardır:

  • Herhangi bir zaman serisi getirme sorgusu (/series veya /query veya /query_range) bir \_\_name\_\_ etiket eşleştirici içermelidir. Yani, her sorgu bir ölçüm kapsamına alınmalıdır. Sorguda yalnızca bir \_\_name\_\_ etiket eşleştiricisi olabilir.

  • Sorgu /series normal ifade filtresini desteklemiyor.

  • Desteklenen zaman aralığı:

    • /query_range API 32 günlük bir zaman aralığını destekler. Bu süre, sorgunun kendisinde belirtilen aralık seçicileri de dahil olmak üzere izin verilen maksimum zaman aralığıdır. Örneğin, son 24 saatin sorgusu rate(http_requests_total[1h] , verilerin 25 saat sorgulandığı anlamına gelir. Bu sayı, 24 saatlik aralıktan ve sorgunun kendisinde belirtilen 1 saatten gelir.
    • API, /series en fazla 12 saatlik zaman aralığı için veri getirir. endTime sağlanmadıysa, o zaman endTime = time.now(). Zaman aralığı 12 saatten büyükse, startTimeendTime – 12h olarak ayarlanır.
  • /labels ve /label/__name__/values ile sağlanan başlangıç saati ve bitiş saati göz ardı edilir. Azure İzleyici çalışma alanında tutulan tüm veriler sorgulanır.

  • Örnek gibi deneysel özellikler desteklenmez.

Prometheus ölçüm sınırları hakkında daha fazla bilgi için bkz. Prometheus ölçümleri.

Büyük/küçük harf duyarlılığı

Prometheus için Azure Monitor yönetilen hizmeti, büyük/küçük harf duyarsız bir sistemdir. Dizeleri (ölçüm adları, etiket adları veya etiket değerleri gibi) başka bir zaman serisinden yalnızca dizenin durumuyla farklıysa aynı zaman serisi olarak değerlendirir.

Uyarı

Bu davranış, büyük/küçük harfe duyarlı bir sistem olan yerel açık kaynak Prometheus'tan farklıdır. Azure sanal makinelerinde, sanal makine ölçek kümelerinde veya Azure Kubernetes Service kümelerinde çalışan kendi kendine yönetilen Prometheus örnekleri büyük/küçük harfe duyarlı sistemlerdir.

Prometheus için yönetilen hizmette aşağıdaki zaman serisi aynı kabul edilir:

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

Yukarıdaki örnekler, bir zaman serisi veritabanındaki tek bir zaman serisidir. Aşağıdaki noktalara dikkat edilmelidir:

  • Bunlara karşı alınan tüm örnekler, tek bir zaman serisine göre kazınmış veya alınmış gibi depolanır.
  • Yukarıdaki örnekler aynı zaman damgasıyla alınıyorsa, bunlardan biri rastgele bırakılır.
  • Zaman serisi veritabanında depolanan ve sorgu tarafından döndürülen verinin formatı öngörülemez. Aynı zaman serisi, farklı zamanlarda farklı harf biçimlendirmelerini döndürebilir.
  • Sorguda bulunan herhangi bir ölçüm adı veya etiket adı/değer eşleştiricisi, büyük/küçük harfe duyarlı olmayan bir karşılaştırma yoluyla zaman serisi veritabanından alınır. Sorguda büyük/küçük harfe duyarlı bir eşleştirici varsa, dize karşılaştırmalarında otomatik olarak büyük/küçük harfe duyarlı olmayan eşleştirici olarak işlenir.

Zaman serisi oluşturmak veya kazımak için, tek bir tutarlı biçim kullanmak en iyi yöntemdir.

Açık kaynak Prometheus, önceki örnekleri iki farklı zaman serisi olarak ele alır. Bunlar üzerinde kazınmış veya alınan tüm örnekler ayrı olarak depolanır.

Sıkça sorulan sorular

Bu bölüm, yaygın sorulara yanıtlar sağlar.

Ölçümlerimin tamamı veya bazıları eksik. Nasıl sorun giderebilirim?

Yönetilen aracıdan Prometheus ölçümlerini almayı öğrenmek için Sorun Giderme kılavuzunu kullanın.

Neden aynı isme ama farklı büyük/küçük harfe sahip iki etikete sahip ölçümleri kaçırıyorum?

Azure Yönetilen Prometheus büyük/küçük harfe duyarlı olmayan bir sistemdir. Ölçüm adları, etiket adları veya etiket değerleri gibi dizeleri, başka bir zaman serisinden yalnızca dizenin durumu açısından farklıysa aynı zaman serisi olarak ele alır. Daha fazla bilgi için bkz . Prometheus ölçümlerine genel bakış.

Ölçüm verilerinde bazı boşluklar görüyorum. Bu davranış neden oluşuyor?

Düğüm güncelleştirmeleri sırasında, küme düzeyindeki toplayıcılarımızdan toplanan ölçümler için ölçüm verilerinde bir dakikadan iki dakikaya kadar bir boşluk görebilirsiniz. Bu boşluk, verilerin üzerinde çalıştığı düğüm normal bir güncelleştirme işleminin parçası olarak güncelleştirildiğinden oluşur. Bu güncelleştirme işlemi, kube-state-metrics ve belirtilen özel uygulama hedefleri gibi küme genelindeki hedefleri etkiler. Bu işlem, kümeniz el ile veya otomatik güncelleştirme yoluyla güncelleştirildiğinde gerçekleşir.

Bu davranış beklenen bir davranıştır ve önerilen uyarı kurallarımızdan hiçbirini etkilemez.