الاستعلام عن مقاييس Prometheus باستخدام واجهة برمجة التطبيقات وPromQL
خدمة Azure Monitor المدارة ل Prometheus، تجمع المقاييس من مجموعات Azure Kubernetes وتخزنها في مساحة عمل Azure Monitor. PromQL (لغة استعلام Prometheus)، هي لغة استعلام وظيفية تسمح لك بالاستعلام عن بيانات السلسلة الزمنية وتجميعها. استخدم PromQL للاستعلام عن المقاييس المخزنة في مساحة عمل Azure Monitor وتجميعها.
توضح هذه المقالة كيفية الاستعلام عن مساحة عمل Azure Monitor باستخدام PromQL عبر واجهة برمجة تطبيقات REST. لمزيد من المعلومات حول PromQL، راجع الاستعلام عن prometheus.
المتطلبات الأساسية
للاستعلام عن مساحة عمل Azure monitor باستخدام PromQL، تحتاج إلى المتطلبات الأساسية التالية:
- مجموعة Azure Kubernetes أو مجموعة Kubernetes البعيدة.
- خدمة Azure Monitor المدارة لمقاييس استخراج Prometheus من مجموعة Kubernetes.
- مساحة عمل Azure Monitor حيث يتم تخزين مقاييس Prometheus.
المصادقة
للاستعلام عن مساحة عمل Azure Monitor، قم بالمصادقة باستخدام معرف Microsoft Entra. تدعم واجهة برمجة التطبيقات مصادقة Microsoft Entra باستخدام بيانات اعتماد العميل. سجل تطبيق عميل باستخدام معرف Microsoft Entra واطلب رمزا مميزا.
لإعداد مصادقة Microsoft Entra، اتبع الخطوات التالية:
- تسجيل تطبيق باستخدام معرف Microsoft Entra.
- منح حق الوصول للتطبيق إلى مساحة عمل Azure Monitor.
- طلب رمز مميز.
تسجيل تطبيق باستخدام معرف Microsoft Entra
- لتسجيل تطبيق، اتبع الخطوات الواردة في تسجيل تطبيق لطلب رموز التخويل المميزة والعمل مع واجهات برمجة التطبيقات
السماح للتطبيق بالوصول إلى مساحة العمل الخاصة بك
قم بتعيين دور قارئ بيانات المراقبة لتطبيقك حتى يتمكن من الاستعلام عن البيانات من مساحة عمل Azure Monitor.
افتح مساحة عمل Azure Monitor في مدخل Microsoft Azure.
في صفحة نظرة عامة، لاحظ نقطة نهاية الاستعلام لاستخدامها في طلب REST.
حدد Access control (IAM).
حدد إضافة، ثم إضافة تعيين دور من صفحة التحكم بالوصول (IAM).
في صفحة Add role Assignment، ابحث عن Monitoring.
حدد مراقبة قارئ البيانات، ثم حدد علامة التبويب الأعضاء.
حدد تحديد أعضاء.
ابحث عن التطبيق الذي قمت بتسجيله وحدده.
اختر تحديد.
حدد مراجعة + تعيين.
لقد أنشأت تسجيل التطبيق الخاص بك وقمت بتعيينه للوصول إلى بيانات الاستعلام من مساحة عمل Azure Monitor. يمكنك الآن إنشاء رمز مميز واستخدامه في استعلام.
طلب رمز مميز
إرسال الطلب التالي في موجه الأوامر أو باستخدام عميل مثل Insomnia أو Invoke-RestMethod الخاص ب PowerShell
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'
نموذج نص الاستجابة:
{
"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"
}
احفظ الرمز المميز للوصول من الاستجابة للاستخدام في طلبات HTTP التالية.
نقطة نهاية الاستعلام
ابحث عن نقطة نهاية استعلام مساحة عمل Azure Monitor في صفحة نظرة عامة على مساحة عمل Azure Monitor.
واجهات برمجة التطبيقات المعتمدة
الاستعلامات التالية مدعومة:
الاستعلامات الفورية
لمزيد من المعلومات، راجع الاستعلامات الفورية
مسار: /api/v1/query
أمثلة:
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>'
استعلامات النطاق
لمزيد من المعلومات، راجع استعلامات النطاق
مسار: /api/v1/query_range
أمثلة:
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'
السلسلة
لمزيد من المعلومات، راجع السلسلة
مسار: /api/v1/series
أمثلة:
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"}'
بطاقات عنونة
لمزيد من المعلومات، راجع مسار التسميات : /api/v1/labels
أمثلة:
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'
قيم التسمية
لمزيد من المعلومات، راجع قيم التسمية
مسار: /api/v1/label/__name__/values.
إشعار
__name__
هو الإصدار الوحيد المدعوم من واجهة برمجة التطبيقات هذه ويعيد جميع أسماء المقاييس. لا يتم دعم أي قيم /api/v1/label/<label_name>/values أخرى.
مثال:
GET 'https://k8s02-workspace-abcd.eastus.prometheus.monitor.azure.com/api/v1/label/__name__/values'
للحصول على المواصفات الكاملة لواجهات برمجة تطبيقات OSS prom، راجع Prometheus HTTP API.
قيود واجهة برمجة التطبيقات
القيود التالية بالإضافة إلى تلك المفصلة في مواصفات Prometheus.
- يجب تحديد نطاق الاستعلام إلى مقياس
يجب أن تحتوي أي استعلامات إحضار سلسلة زمنية (/سلسلة أو /استعلام أو /query_range) على مطابق تسمية __name__. أي، يجب تحديد نطاق كل استعلام إلى مقياس. يمكن أن يكون هناك مطابق تسمية __name__ واحد فقط في استعلام. - لا يدعم الاستعلام /السلسلة عامل تصفية التعبير العادي
- النطاق الزمني المدعوم
- تدعم /query_range API نطاقا زمنيا من 32 يوما. هذا هو الحد الأقصى للنطاق الزمني المسموح به، بما في ذلك محددات النطاق المحددة في الاستعلام نفسه.
على سبيل المثال، يعني الاستعلام
rate(http_requests_total[1h]
لآخر 24 ساعة أنه يتم الاستعلام عن البيانات لمدة 25 ساعة. يأتي هذا من نطاق 24 ساعة بالإضافة إلى ساعة واحدة محددة في الاستعلام نفسه. - تجلب واجهة برمجة التطبيقات /series البيانات لنطاق زمني أقصى 12 ساعة. إذا
endTime
لم يتم توفيره، endTime = time.now(). إذا كان الغضب الزمني أكبر من 12 ساعة،startTime
يتم تعيين إلىendTime – 12h
- تدعم /query_range API نطاقا زمنيا من 32 يوما. هذا هو الحد الأقصى للنطاق الزمني المسموح به، بما في ذلك محددات النطاق المحددة في الاستعلام نفسه.
على سبيل المثال، يعني الاستعلام
- النطاق الزمني الذي تم تجاهله
يتم توفير وقت البدء ووقت الانتهاء مع/labels
و/label/__name__/values
، ويتم الاستعلام عن جميع البيانات التي تم الاحتفاظ بها في مساحة عمل Azure Monitor. - الميزات التجريبية
الميزات التجريبية مثل النماذج غير مدعومة.
لمزيد من المعلومات حول حدود مقاييس Prometheus، راجع مقاييس Prometheus
مميِّز لحالة الأحرف
خدمة Azure Monitor المدارة ل Prometheus هي نظام غير حساس لحالة الأحرف. يتعامل مع السلاسل (مثل أسماء المقاييس أو أسماء التسميات أو قيم التسميات) على أنها نفس السلسلة الزمنية إذا كانت تختلف عن سلسلة زمنية أخرى فقط حسب حالة السلسلة.
إشعار
يختلف هذا السلوك عن Prometheus الأصلي مفتوح المصدر، وهو نظام حساس لحالة الأحرف. مثيلات Prometheus المدارة ذاتيا التي تعمل في أجهزة Azure الظاهرية أو مجموعات مقياس الجهاز الظاهري أو مجموعات خدمة Azure Kubernetes هي أنظمة حساسة لحالة الأحرف.
في الخدمة المدارة ل Prometheus، تعتبر السلسلة الزمنية التالية هي نفسها:
diskSize(cluster="eastus", node="node1", filesystem="usr_mnt")
diskSize(cluster="eastus", node="node1", filesystem="usr_MNT")
الأمثلة السابقة هي سلسلة زمنية واحدة في قاعدة بيانات سلسلة زمنية. تنطبق الاعتبارات التالية:
- يتم تخزين أي عينات تم تناولها مقابلها كما لو تم استخراجها أو استيعابها مقابل سلسلة زمنية واحدة.
- إذا تم استيعاب الأمثلة السابقة بنفس الطابع الزمني، يتم إسقاط أحدها عشوائيا.
- لا يمكن التنبؤ بالأغلفة المخزنة في قاعدة بيانات السلسلة الزمنية والتي يتم إرجاعها بواسطة استعلام. قد ترجع السلسلة الزمنية نفسها غلافا مختلفا في أوقات مختلفة.
- يتم استرداد أي اسم مقياس أو اسم التسمية/مطابقة القيمة الموجودة في الاستعلام من قاعدة بيانات السلسلة الزمنية من خلال مقارنة غير حساسة لحالة الأحرف. إذا كان هناك مطابق حساس لحالة الأحرف في استعلام، يتم التعامل معه تلقائيا كمطابق غير حساس لحالة الأحرف في مقارنات السلسلة.
من أفضل الممارسات استخدام حالة متسقة واحدة لإنتاج سلسلة زمنية أو استخراجها.
يتعامل Prometheus مفتوح المصدر مع الأمثلة السابقة كسلسلة زمنية مختلفة. يتم تخزين أي عينات تم استخراجها أو استيعابها ضدها بشكل منفصل.
الأسئلة الشائعة
يقدم هذا القسم إجابات للأسئلة الشائعة.
أفتقد جميع مقاييسي أو بعضها. كيف يمكنني استكشاف الأخطاء وإصلاحها؟
يمكنك استخدام دليل استكشاف الأخطاء وإصلاحها لاستيعاب مقاييس Prometheus من العامل المدار هنا.
لماذا أفتقد المقاييس التي تحتوي على تسميتين بنفس الاسم ولكن غلاف مختلف؟
Azure Managed Prometheus هو نظام غير حساس لحالة الأحرف. يتعامل مع السلاسل، مثل أسماء المقاييس أو أسماء التسميات أو قيم التسميات، على أنها نفس السلسلة الزمنية إذا كانت تختلف عن سلسلة زمنية أخرى فقط حسب حالة السلسلة. لمزيد من المعلومات، راجع نظرة عامة على مقاييس Prometheus.
أرى بعض الثغرات في بيانات القياس، لماذا يحدث هذا؟
أثناء تحديثات العقدة، قد ترى فجوة من دقيقة إلى دقيقتين في البيانات القياسية للمقاييس التي تم جمعها من مجمعات مستوى نظام المجموعة لدينا. تحدث هذه الفجوة لأنه يتم تحديث العقدة التي يتم تشغيل البيانات عليها كجزء من عملية تحديث عادية. تؤثر عملية التحديث هذه على الأهداف على مستوى المجموعة مثل kube-state-metrics وأهداف التطبيق المخصصة المحددة. يحدث هذا عند تحديث نظام المجموعة يدويا أو عن طريق التحديث التلقائي. هذا السلوك متوقع ويحدث بسبب العقدة التي يتم تشغيلها عند تحديثها. لا يؤثر هذا السلوك على أي من قواعد التنبيه الموصى بها.
الخطوات التالية
نظرة عامة على مساحة عمل Azure Monitor
إدارة مساحة عمل Azure Monitor
نظرة عامة على خدمة Azure Monitor المدارة ل Prometheus
الاستعلام عن مقاييس Prometheus باستخدام مصنفات Azure