المستوى المطلوب: مبتدئ. هذا المقال مناسب لو قابلت Prometheus لأول مرة، أو شغّال على مشروع فيه Grafana بس مش عارف تكتب استعلام أبعد من up. مش محتاج خبرة سابقة في time series databases، بس مفيد لو فاهم الفرق بين CPU و RAM وعارف يعني إيه HTTP 500.
لو Prometheus بيجمع metrics من 12 خدمة وانت بتفتح Grafana كل صباح وبتبص في رسم بياني واحد، انت بتدفع تخزين على بيانات مش بتستخدمها. الـ 8 استعلامات اللي قدامك بتحوّل Prometheus من "log عرضي" إلى نظام تحذير مبكر يكشف مشاكل الإنتاج قبل ما العميل يلاحظ.
المشكلة في غياب PromQL
Prometheus بيخزّن أرقام كل 15 ثانية لكل خدمة. CPU، الذاكرة، عدد الطلبات، زمن الاستجابة. المشكلة: البيانات الخام مش بتقولك "في مشكلة دلوقتي". انت محتاج تحوّلها لإجابات. PromQL هي اللغة اللي بتسأل بيها الأسئلة دي.
الفريق العادي اللي بيركّب Prometheus بيقعد أسابيع بيرسم رسومات جميلة بدون ما يعرف يجاوب على سؤال زي "كم نسبة الطلبات اللي رجعت 500 آخر 5 دقايق؟". الفرق بين فريق بيستعمل PromQL وفريق مش بيستعمله: الأول بيكتشف العطل في 90 ثانية، التاني بيكتشفه لما العميل يبعت تذكرة.
مثال للمبتدئ: PromQL زي طبيب الباطنة
تخيّل إنك دخلت لطبيب وقعدت قدامه بدون كلام. الطبيب مش هيعرف يكشف على إيه أصلاً. لكن لو قلتله "بطني بتوجعني من ساعة بعد الأكل"، الطبيب يعرف يدور بالظبط في الكبد والمعدة والمرارة، ويعمل أشعة محددة، ويرجّعك بإجابة في 15 دقيقة.
بعد المثال ده، التعريف العملي بسيط: Prometheus بيجمع الأشعة. Grafana بيعرضها على شاشة. PromQL هي السؤال اللي بتسأله للطبيب. بدون السؤال الصح، انت قاعد قدام رسومات وألوان من غير ما تعرف فيه إيه ولا فيه إيه.
التعريف العلمي لـ PromQL
PromQL (Prometheus Query Language) لغة استعلام functional بتشتغل على time series data. كل metric في Prometheus عبارة عن سلسلة من الأرقام مع timestamp و labels. PromQL بياخد السلاسل دي ويعمل عليها 4 عمليات أساسية: filtering بالـ labels، aggregation عبر الأبعاد، rate calculation على المدى الزمني، و arithmetic بين السلاسل.
على عكس SQL اللي بيرجّع جدول ثابت، PromQL بيرجّع instant vector (قيمة واحدة لكل سلسلة في لحظة معيّنة) أو range vector (قيم على مدى زمني). الفرق ده هيبقى مهم لما نشوف الأمثلة.
الـ 8 استعلامات اللي لازم تعرفها
1) هل الخدمة شغّالة؟
up{job="api-server"}
بيرجّع 1 لو Prometheus قدر يعمل scrape للخدمة، و0 لو لأ. لو طلع 0 على instance معيّن، الخدمة وقعت أو الـ scrape config مش صح. ده أبسط استعلام في PromQL وأهم alert لازم تركّبه.