يا جماعة الخير، السلام عليكم ورحمة الله.
الحكي بيناتنا، ما في أصعب من رنّة التلفون الساعة ثلاثة الفجر. بتكون نايم ومبسوط، وفجأة بتصحى على صوت مديرك أو زميلك وهو بحكيلك “الموقع واقع!”. والله يا جماعة هاي الرنّة كانت كابوسنا الأسبوعي لشهور طويلة. أذكر مرة، كان يوم خميس بالليل، وكنا بنجهز حالنا لعطلة نهاية الأسبوع، وإذ بالتلفونات ما بتهدا. النظام الأساسي للشركة توقف عن العمل تماماً.
نزلنا كلنا على المكتب، فريق كامل من المبرمجين ومهندسي الأنظمة، زي اللي بدور على إبرة بكومة قش. واحد بفتح ملفات الـ logs، والثاني بعمل `top` و `htop` على السيرفرات، والثالث بحاول يعيد تشغيل الخدمات عشوائياً على أمل تضبط معه. قعدنا حوالي أربع ساعات، واكتشفنا بالنهاية إن المشكلة كانت بسيطة جداً: أحد السيرفرات امتلأ القرص الصلب فيه بسبب ملفات logs قديمة ما انحذفت. مشكلة تافهة، لكنها كلفتنا ساعات من التوتر، وخسارة مالية للشركة، وفقدان ثقة من العملاء.
في تلك الليلة، وأنا راجع على البيت مهدود حيلي، قررت إن هذا الوضع ما بنفع يستمر. احنا مش “مطفّين حرائق”، احنا مهندسين! لازم نكون خطوة قبل المشكلة، مش نركض وراها. من هنا بدأت رحلتنا للبحث عن حل، رحلة انتهت بنا عند أداة غيرت طريقة تفكيرنا وعملنا بالكامل: بروميثيوس (Prometheus).
من الفوضى إلى النظام: ليش المراقبة التقليدية بتخذلنا؟
قبل ما نحكي عن الحل، خلينا نفهم أصل المشكلة. معظم أنظمة المراقبة اللي كنا نستخدمها (أو بالأحرى، عدم وجود أنظمة حقيقية) كانت “تفاعلية” (Reactive). شو يعني؟ يعني النظام ما بخبرك بالمشكلة إلا بعد ما تصير كارثة.
- فحص الحالة (Health Checks): كنا نعتمد على أدوات بسيطة بتعمل “ping” للسيرفر أو تتأكد إنه الخدمة بترد بـ “200 OK”. هذا مفيد، لكنه ما بحكيلك إنه الذاكرة على وشك الامتلاء أو إنه المعالج عليه ضغط 100% من ساعة.
- قراءة السجلات (Log Analysis): تحليل ملفات الـ logs مهم، لكنه مثل تشريح الجثة بعد الوفاة. بتعرف شو سبب الموت، لكنك ما قدرت تمنعه.
- التنبيهات المتأخرة: التنبيهات كانت توصلنا لما الخدمة تتوقف تماماً. يعني المستخدم بكون عرف بالمشكلة قبلك!
المراقبة التفاعلية بتخليك دايماً في وضع دفاعي، دايماً متوتر وخايف من الكارثة القادمة. وهذا بالضبط ما أردنا تغييره.
بروميثيوس (Prometheus): المنقذ اللي ما بستنى المصيبة تصير
بروميثيوس هو نظام مراقبة وتنبيه مفتوح المصدر، وهو جزء من مؤسسة الحوسبة السحابية الأصلية (CNCF)، نفس المؤسسة اللي بتدعم Kubernetes. لكن بعيداً عن الأسماء الكبيرة، اللي بميز بروميثيوس هو فلسفته المختلفة تماماً.
شو هو بروميثيوس بالضبط؟
ببساطة، بروميثيوس هو قاعدة بيانات زمنية (Time-Series Database) مصممة خصيصاً لتخزين “المقاييس” (Metrics). بدل ما يسألك “هل الخدمة شغالة؟”، هو بسألك “كيف حال الخدمة الآن؟ كم استهلاك الذاكرة؟ كم عدد الطلبات في الثانية؟ كم نسبة الأخطاء؟”.
هو لا ينتظر أن ترسل له البيانات، بل يذهب هو بنفسه و”يسحبها” (Pull Model) من تطبيقاتك وسيرفراتك بشكل دوري. هذا يعني أنه يبني صورة مستمرة ودقيقة عن صحة نظامك لحظة بلحظة.
كيف بشتغل؟ الحكاية ببساطة
الفكرة عبقرية في بساطتها. بروميثيوس يعتمد على نموذج السحب (Pull Model) كما ذكرنا. إليك المكونات الأساسية:
- Prometheus Server: هو قلب النظام. يقوم بسحب المقاييس من الأهداف (Targets) وتخزينها في قاعدة البيانات الخاصة به.
- Targets/Exporters: أي تطبيق أو خدمة تريد مراقبتها يجب أن تعرض مقاييسها على نقطة نهاية (endpoint) بصيغة يفهمها بروميثيوس (عادةً
/metrics). إذا كان التطبيق لا يدعم هذا بشكل أصلي، نستخدم “مُصدّر” (Exporter)، وهو برنامج صغير يقف كوسيط يترجم مقاييس الخدمة إلى لغة بروميثيوس. - Alertmanager: هو المسؤول عن التعامل مع التنبيهات. عندما يكتشف بروميثيوس مشكلة بناءً على قواعد أنت تحددها، يرسل تنبيهاً إلى Alertmanager، الذي يقوم بدوره بتجميعها، منع تكرارها، وإرسالها إلى القناة المناسبة (Email, Slack, PagerDuty, etc.).
نصيحة من أبو عمر: نموذج السحب (Pull) هو أحد أقوى ميزات بروميثيوس. يجعلك تتحكم مركزيًا بما تريد مراقبته ومتى، ويسهل اكتشاف الخدمات الجديدة (Service Discovery)، خاصة في بيئات ديناميكية مثل Kubernetes.
يلا نشتغل شغل عملي: تركيب بروميثيوس لأول مرة
الكلام النظري حلو، بس الشغل العملي أحلى. خلينا نركّب بروميثيوس ونخليه يراقب نفسه كبداية. رح نستخدم Docker لسهولة الإعداد.
الخطوة الأولى: ملف الإعدادات prometheus.yml
أنشئ ملف جديد باسم prometheus.yml وضع فيه الإعدادات التالية. هذا الملف هو اللي بخبر بروميثيوس شو هي الأهداف اللي لازم يسحب منها البيانات.
# prometheus.yml
# الإعدادات العامة
global:
scrape_interval: 15s # كل كم ثانية يقوم بروميثيوس بسحب البيانات (أمر طبيعي)
evaluation_interval: 15s # كل كم ثانية يقوم بتقييم قواعد التنبيه
# هنا يتم تعريف الأهداف (Targets) التي سيتم مراقبتها
scrape_configs:
# المهمة الأولى: مراقبة بروميثيوس نفسه
- job_name: 'prometheus'
# بروميثيوس يعرض مقاييسه الخاصة على هذا العنوان
static_configs:
- targets: ['localhost:9090']
الخطوة الثانية: تشغيل بروميثيوس باستخدام Docker
الآن، افتح الطرفية (Terminal) في نفس المجلد الذي يوجد به ملف prometheus.yml وشغّل الأمر التالي:
docker run
-p 9090:9090
-v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml
prom/prometheus
هذا الأمر يقوم بتشغيل حاوية Docker لبروميثيوس، يربط المنفذ 9090، ويزودها بملف الإعدادات الذي أنشأناه.
إذا سارت الأمور على ما يرام، يمكنك الآن فتح المتصفح والذهاب إلى http://localhost:9090. ستجد واجهة بروميثيوس البسيطة. اذهب إلى قائمة Status -> Targets، وستجد أن بروميثيوس يراقب نفسه بنجاح!
توسيع نطاق المراقبة: الـ Exporters هم أبطالنا الخفيين
مراقبة بروميثيوس نفسه شيء رائع، لكن الفائدة الحقيقية تأتي من مراقبة بقية مكونات بنيتك التحتية. هنا يأتي دور الـ Exporters.
لنتخيل أنك تريد مراقبة سيرفر لينكس (استهلاك المعالج، الذاكرة، القرص الصلب، …إلخ). نظام التشغيل لينكس لا يعرض هذه المقاييس بصيغة بروميثيوس بشكل افتراضي. الحل؟ نستخدم node_exporter.
مثال عملي: مراقبة سيرفر لينكس باستخدام node_exporter
أولاً، قم بتشغيل node_exporter على السيرفر الذي تريد مراقبته (يمكن تشغيله مباشرة أو عبر Docker):
docker run -d --net="host" --pid="host" quay.io/prometheus/node-exporter
سيعمل الـ exporter على المنفذ 9100 ويعرض مقاييس النظام.
ثانياً، قم بتحديث ملف prometheus.yml لإضافة هذا الهدف الجديد:
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# مهمة جديدة لمراقبة سيرفرات لينكس
- job_name: 'node_exporter'
static_configs:
# استبدل الـ IP بـ IP السيرفر الذي شغلت عليه الـ exporter
- targets: ['192.168.1.100:9100']
أعد تشغيل حاوية بروميثيوس ليعتمد الإعدادات الجديدة. الآن، بروميثيوس يقوم بسحب مقاييس مفصلة عن حالة السيرفر الخاص بك. تذكر مشكلة القرص الممتلئ التي حكيت لكم عنها في البداية؟ الآن يمكنك إنشاء تنبيه يخبرك عندما يتجاوز استخدام القرص 80%، قبل أن يصبح كارثة!
من الأرقام إلى الرؤى: جرافانا (Grafana) بترسملنا الصورة كاملة
بروميثيوس قوي جداً في جمع البيانات والاستعلام عنها (باستخدام لغة PromQL)، لكن واجهته ليست الأجمل لعرض البيانات. هنا يأتي دور صديقه المفضل: Grafana.
Grafana هي أداة تصور بيانات (Visualization) مفتوحة المصدر تتيح لك إنشاء لوحات معلومات (Dashboards) تفاعلية وجميلة. يمكنك ربط Grafana ببروميثيوس كمصدر للبيانات، ثم بناء رسوم بيانية تعرض لك كل شيء بطريقة مرئية وسهلة الفهم.
الجميل في الأمر أن هناك آلاف لوحات المعلومات الجاهزة التي يمكنك استيرادها. على سبيل المثال، هناك لوحة معلومات شهيرة جداً لـ node_exporter (رقمها 1860 في مكتبة Grafana) تعطيك عرضاً شاملاً لكل ما يتعلق بسيرفرك بنقرة زر.
بدمج Prometheus (لجمع البيانات) مع Grafana (لعرضها)، تحصل على نظام مراقبة من الطراز العالمي.
نصائح من قلب الميدان
بعد سنوات من العمل مع هذه الأدوات، اسمحوا لي أن أقدم لكم بعض النصائح العملية:
- ابدأ بسيطًا ثم توسع: لا تحاول مراقبة كل شيء في اليوم الأول. ابدأ بالأساسيات: صحة السيرفرات (CPU, Memory, Disk)، وصحة خدماتك الرئيسية. ثم أضف المزيد تدريجياً.
- التنبيهات فن وليست علمًا: لا تنشئ تنبيهًا لكل مقياس. هذا سيؤدي إلى “إرهاق التنبيهات” (Alert Fatigue) حيث يتجاهل الفريق كل التنبيهات لكثرتها. أنشئ تنبيهات فقط للأشياء التي تتطلب تدخلاً بشريًا فوريًا.
- استخدم الـ Labels بذكاء: الـ Labels (العلامات) هي سر قوة بروميثيوس. استخدمها لتمييز بيئاتك (production, staging)، أنواع الخدمات، والمناطق الجغرافية. هذا سيسمح لك بإنشاء استعلامات ورسوم بيانية قوية جدًا.
- لا تنس مراقبة بروميثيوس نفسه: تأكد من أن لديك تنبيهات تخبرك إذا توقف بروميثيوس عن العمل أو إذا كان يستهلك الكثير من الموارد.
الخلاصة: من مطفئ حرائق إلى مهندس وقائي 💪
رحلتنا مع بروميثيوس حولتنا من فريق يقضي لياليه في إطفاء الحرائق، إلى فريق يبني أنظمة وقائية تمنع حدوث الحرائق من الأساس. لم نعد ننتظر اتصال الساعة 3 فجراً، بل أصبحنا نتلقى تنبيهًا على Slack يقول “تحذير: استهلاك الذاكرة في السيرفر X وصل إلى 85% وسيصل إلى 100% خلال 4 ساعات”. هذا الفارق في الوقت والمعلومة هو ما يفصل بين الفوضى والاحترافية.
إذا كنت لا تزال تعاني من المراقبة التفاعلية، فأنصحك بشدة أن تبدأ اليوم رحلتك مع Prometheus. قد تبدو الخطوات الأولى صعبة، لكن العائد على استثمارك في الوقت والجهد سيكون راحة بال لا تقدر بثمن. بالتوفيق يا جماعة!