يا جماعة الخير، السلام عليكم ورحمة الله. معكم أخوكم أبو عمر.
بتذكر منيح، كانت ليلة خميس، وكنا على وشك إطلاق ميزة جديدة ومهمة في تطبيقنا. الأجواء كانت مشحونة، قهوة ورا قهوة، والكل حاطط إيده على قلبه. أطلقنا الميزة الساعة 11 بالليل، والأمور بدت تمام. تنهدنا الصعداء وحكينا “الحمد لله، فرجت”. كل واحد فينا روّح على بيته وهو بحلم بنومة هادية ونهاية أسبوع مريحة.
لكن الفرحة ما كملت. الساعة 2 الفجر، بلش جوالي يرن. أرقام من فريق الدعم، رسائل على Slack، والدنيا قايمة قاعدة. المستخدمون يشتكون من بطء شديد في التطبيق، والبعض الآخر مش قادر يفوت أصلاً. رجعنا كلنا على المكتب “أونلاين”، عيوننا نص مفتوحة، وبدأنا رحلة العذاب: البحث عن الإبرة في كومة القش. وين المشكلة؟ هل هي قاعدة البيانات؟ هل هو السيرفر؟ هل هو الكود الجديد؟
قضينا ساعات طويلة ونحنا بنقلّب في السجلات (Logs)، وبنحاول نعيد تمثيل المشكلة، لكن بدون فايدة. المشكلة كانت بتظهر وبتختفي، زي كأنها بتلعب معنا “الغميضة” (أو الخُبّاية، زي ما بنحكيها ببلادنا). في النهاية، بعد ما طلع الصبح، اكتشفنا بالصدفة إن المشكلة كانت بسبب استعلام (query) معين بصير بطيء جداً تحت ضغط عالي. حلّيناها بشكل مؤقت، بس كلنا كنا مرهقين ومحبطين. وقتها، مسكت فنجان القهوة الصباحي، وطلعت في الشباب وحكيتلهم: “يا جماعة، إحنا بنشتغل غلط. لازم نوقف لعب الغميضة مع أخطائنا ونبدأ نشوفها قبل ما هي تشوفنا”.
هذيك الليلة كانت نقطة التحول. كانت بداية رحلتنا من عالم “إطفاء الحرائق” التفاعلي إلى عالم “الوقاية الاستباقية” الهادئ والمنظم.
من إطفاء الحرائق إلى الوقاية منها: تغيير في العقلية
المشكلة اللي واجهناها مش فريدة من نوعها. معظم فرق التطوير والعمليات (DevOps) بيمروا بمرحلة “إطفاء الحرائق” (Firefighting Mode). في هذا الوضع، أنت دائماً في حالة رد فعل:
- المستخدم يبلغ عن مشكلة، فتبدأ بالتحقيق.
- السيرفر يقع، فتسرع لإعادة تشغيله.
- قاعدة البيانات تمتلئ، فتبدأ بحذف البيانات القديمة على عجل.
هذا الأسلوب مرهق، مكلف، ويقتل الابتكار. فريقك يقضي وقته في حل المشاكل بدلاً من بناء ميزات جديدة. أما النهج الاستباقي، فهو العكس تماماً. الفكرة هي أن تبني “برج مراقبة” يمنحك رؤية شاملة وواضحة على كل أجزاء نظامك، مما يسمح لك بتوقع المشاكل قبل حدوثها. أنت لا تنتظر الدخان لتعرف أن هناك حريقاً؛ بل تبحث عن أي ارتفاع غير طبيعي في درجة الحرارة.
ما هي المراقبة الاستباقية (Proactive Monitoring) بالضبط؟
ببساطة، هي الممارسة التي تتجاوز مجرد مراقبة صحة النظام (System Health) مثل “هل السيرفر يعمل؟”. إنها تتعمق أكثر لتراقب “سلوك النظام” (System Behavior). هل أداء النظام يتدهور ببطء؟ هل هناك زيادة غير طبيعية في عدد الأخطاء لنوع معين من الطلبات؟ هل استهلاك الذاكرة يزداد بشكل خطي مع مرور الوقت (تسريب ذاكرة)؟
هنا يأتي مصطلح مهم جداً وهو الـ Observability (القابلية للملاحظة). لا يكفي أن تعرف أن شيئاً ما خطأ، بل يجب أن يكون لديك الأدوات التي تساعدك على فهم “لماذا” هو خطأ. وتستند الـ Observability على ثلاثة أعمدة رئيسية.
الأعمدة الثلاثة للـ Observability
- المقاييس (Metrics): هي بيانات رقمية يتم جمعها على فترات زمنية منتظمة. فكر فيها كنبضات قلب نظامك. أمثلة: استخدام المعالج (CPU)، استهلاك الذاكرة (Memory)، زمن استجابة الطلبات (Latency)، عدد الطلبات في الثانية (RPS)، معدل الأخطاء (Error Rate).
- السجلات (Logs): هي سجلات نصية لأحداث معينة حدثت في وقت معين. هي القصة التفصيلية لما حدث. مثال: “User ‘omar123’ failed to login at 2023-10-27T10:00:00Z with error: Invalid Password”.
- التتبعات (Traces): هي الأداة الأقوى في عالم الخدمات المصغرة (Microservices). التتبع يريك رحلة طلب واحد عبر جميع الخدمات التي مر بها، وكم من الوقت قضى في كل خدمة. هذا يساعدك على تحديد عنق الزجاجة (bottleneck) بدقة مذهلة.
نصيحة من أبو عمر: لا تغرق في بحر السجلات (Logs)! المقاييس (Metrics) هي خط دفاعك الأول. يجب أن تخبرك المقاييس بوجود مشكلة، ثم تستخدم السجلات والتتبعات للغوص في التفاصيل ومعرفة السبب.
بناء “برج المراقبة” الخاص بنا: الأدوات والتقنيات
الكلام النظري جميل، لكن كيف نطبق هذا على أرض الواقع؟ بعد بحث وتقييم، استقر فريقنا على مجموعة أدوات أصبحت المعيار في الصناعة: Prometheus و Grafana.
Prometheus: جامع المقاييس العنيد
Prometheus هو نظام مراقبة مفتوح المصدر وقاعدة بيانات للسلاسل الزمنية (Time-Series Database). أجمل ما فيه هو بساطة مفهومه وقوته. يعمل Prometheus بنموذج “السحب” (Pull model)، حيث يقوم هو نفسه بالمرور على خدماتك وتطبيقاتك بشكل دوري و”سحب” المقاييس منها.
لتجعل تطبيقك متوافقاً مع Prometheus، كل ما عليك هو استخدام مكتبة عميل (client library) تقوم بعرض المقاييس على مسار معين (عادة /metrics).
مثال عملي: عرض مقياس مخصص في تطبيق Node.js
لنفترض أن لدينا تطبيق Node.js بسيط ونريد تتبع عدد الطلبات التي يستقبلها.
- أولاً، نقوم بتثبيت مكتبة العميل:
npm install prom-client - ثم، في كود التطبيق، نقوم بالتالي:
const express = require('express');
const client = require('prom-client');
const app = express();
// تفعيل جمع المقاييس الافتراضية (CPU, Memory, etc.)
const collectDefaultMetrics = client.collectDefaultMetrics;
collectDefaultMetrics({ timeout: 5000 });
// إنشاء مقياس جديد من نوع Counter
const requestCounter = new client.Counter({
name: 'http_requests_total',
help: 'Total number of HTTP requests',
labelNames: ['method', 'route', 'status_code'],
});
// Middleware لزيادة العداد مع كل طلب
app.use((req, res, next) => {
res.on('finish', () => {
// زيادة العداد مع تحديد الـ labels المناسبة
requestCounter.inc({
method: req.method,
route: req.path,
status_code: res.statusCode
});
});
next();
});
// المسار الرئيسي لتطبيقك
app.get('/', (req, res) => {
res.send('Hello, Abu Omar!');
});
// مسار خاص لعرض المقاييس لـ Prometheus
app.get('/metrics', async (req, res) => {
res.set('Content-Type', client.register.contentType);
res.end(await client.register.metrics());
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
الآن، إذا قمت بتشغيل هذا التطبيق وزرت الرابط http://localhost:3000/metrics، سترى مخرجات نصية يفهمها Prometheus. الشغلة صارت سهلة!
Grafana: لوحة التحكم الفنية
Prometheus يجمع البيانات، لكنه ليس الأفضل في عرضها. هنا يأتي دور Grafana، وهي أداة تصور (visualization) رائعة تسمح لك بإنشاء لوحات تحكم (dashboards) تفاعلية وجميلة.
ببساطة، تقوم بربط Grafana بـ Prometheus كمصدر للبيانات (Data Source)، ثم تبدأ في بناء الرسوم البيانية. في غضون دقائق، يمكنك إنشاء لوحة تحكم تعرض لك:
- استخدام المعالج والذاكرة لكل سيرفراتك.
- معدل الطلبات في الثانية (RPS).
- معدل الأخطاء (5xx, 4xx).
- زمن الاستجابة (Latency) للخدمات الهامة (P95, P99).
الجميل في Grafana هو أنها تحول الأرقام الصماء إلى قصة مرئية. بنظرة واحدة على لوحة التحكم، يمكنك معرفة “نبض” نظامك بالكامل.
Alertmanager: الصديق الذي يوقظك قبل الكارثة
جمع البيانات وتصويرها رائع، لكنك لا تستطيع أن تظل تحدق في لوحة التحكم طوال اليوم. تحتاج إلى نظام تنبيهات ذكي. هنا يأتي دور Alertmanager، وهو جزء من منظومة Prometheus.
ما يميز التنبيهات الاستباقية هو أنها لا تعتمد فقط على عتبات ثابتة (e.g., CPU > 90%). التنبيهات الذكية تكون مبنية على التنبؤ والاتجاهات.
مثال على قاعدة تنبيه استباقية (Prometheus Alerting Rule):
بدلاً من التنبيه عند امتلاء القرص بنسبة 95%، يمكننا إنشاء تنبيه يتنبأ بأن القرص سيمتلئ خلال الـ 24 ساعة القادمة بناءً على معدل النمو الحالي.
- alert: HostDiskWillFillIn24Hours
expr: predict_linear(node_filesystem_free_bytes{job="node"}[1h], 24 * 3600) < 0
for: 10m
labels:
severity: warning
annotations:
summary: "Host disk is predicted to fill in 24 hours (instance {{ $labels.instance }})"
description: "Filesystem {{ $labels.mountpoint }} on host {{ $labels.instance }} is projected to run out of space in the next 24 hours."
هذا التنبيه يمنحك يوماً كاملاً لاتخاذ إجراء، بدلاً من إيقاظك في منتصف الليل لأن القرص امتلأ فجأة.
أبعد من الأدوات: المراقبة كثقافة في الفريق
وهذه هي النقطة الأهم يا جماعة. الأدوات وحدها لا تكفي. التحول الحقيقي يحدث عندما تصبح المراقبة جزءاً من ثقافة الفريق بأكمله، وليست مسؤولية شخص واحد أو فريق DevOps فقط.
لقد تبنينا قاعدة بسيطة: “You build it, you run it, you monitor it” (أنت تبنيه، أنت تشغله، أنت تراقبه). عندما يكتب المطور ميزة جديدة، يجب أن يفكر أيضاً في: “ما هي المقاييس التي أحتاجها لأعرف أن هذه الميزة تعمل بشكل جيد؟”.
أصبح جزءاً من عملية مراجعة الكود (Code Review) أن نسأل: “أين هي المقاييس الخاصة بهذه الميزة؟ هل أضفتها إلى لوحة التحكم؟ هل هناك تنبيهات مهمة يجب إضافتها؟”. هذا التغيير الثقافي هو الذي ضمن لنا النجاح على المدى الطويل.
الخلاصة: من الغميضة إلى الوضوح التام 🙏
الرحلة من “إطفاء الحرائق” إلى “المراقبة الاستباقية” لم تكن سهلة، لكنها كانت الاستثمار الأفضل الذي قمنا به على الإطلاق. انتقلنا من فريق مرهق يعيش في خوف دائم من الرنة التالية للهاتف، إلى فريق واثق يتحكم في نظامه بالكامل.
اليوم، عندما نطلق ميزة جديدة، لا نذهب إلى النوم ونحن قلقون. نذهب ونحن نراقب لوحات التحكم التي بنيناها بثقة، عالمين أن أي سلوك غريب سيتم اكتشافه مبكراً، مما يمنحنا الوقت الكافي للتحرك بهدوء وروية.
نصيحتي الأخيرة لك: لا تنتظر الحريق القادم. ابدأ اليوم في بناء برج المراقبة الخاص بك. ابدأ صغيراً، بمقياس واحد أو لوحة تحكم واحدة. الأهم هو أن تبدأ. صدقني، نومك ليلاً سيكون أكثر هدوءاً، وقهوتك الصباحية ستكون ألذ. بالتوفيق يا أبطال.