الـ Observability اللي تنقذك الساعة 3 الفجر: Logs وTraces وشو اللي فعلاً يهم
Observability للإنتاج أبعد من الداشبوردات. Structured Logging، Correlation IDs، لوقات خالية من PII، منع إرهاق التنبيهات، إدارة التكاليف، ونموذج نضج الـ Observability.
الأعمدة الثلاثة غلط
كل محاضرة عن Observability تبدأ بـ "الأعمدة الثلاثة: اللوقات، المقاييس، والتتبعات." هذا التأطير ناقص. يقلك شو تجمع لكن ما يقلك شو تسوي فيه. السؤال الحقيقي الساعة 3 الفجر مش "عندي لوقات؟" السؤال هو: "أقدر ألاقي سطر اللوق الواحد اللي يفسر ليش طلبية هالعميل فشلت، عبر 7 سيرفسات، بأقل من دقيقتين؟"
نشغّل أنظمة إنتاج فيها عدة سيرفسات، وBackground Workers، وMessage Queues، وخطوط أنابيب ذكاء اصطناعي. هالمقال يغطي شو اللي فعلاً يساعد لما الأمور تنكسر. لأنماط التطبيق الخاصة بـ OpenTelemetry، شوف دليل OpenTelemetry. لـ Observability خاصة بالذكاء الاصطناعي، شوف دليل مراقبة الذكاء الاصطناعي.
Structured Logging: الصيغة اللي تنقذك
اللوقات غير المنظمة ما تنفع على نطاق واسع. console.log('Processing order ' + orderId) يصير ضوضاء في نظام ينتج 10,000 سطر لوق بالدقيقة.
اللوقات المنظمة قابلة للاستعلام، والفلترة، والتنبيه:
// غير منظم (ما ينفع على نطاق واسع)
console.log('Processing order 12345 for customer sara@beispiel.de');
// منظم (قابل للاستعلام، خالي من PII)
logger.info('order_processing_started', {
order_id: 'ord_12345',
customer_id: 'cust_abc', // ID، مش إيميل
channel: 'web',
tenant_id: 'tenant_acme',
items_count: 3,
total_cents: 15900,
});
انضباط مستوى اللوق
| المستوى | متى تستخدمه | مثال |
|---|---|---|
error | شي انكسر ويحتاج انتباه بشري | اتصال قاعدة البيانات فشل، الدفعة رُفضت |
warn | شي غير متوقع لكن تمت معالجته | استُخدم نموذج احتياطي، Cache Miss، إعادة المحاولة نجحت |
info | أحداث تجارية مهمة للتدقيق | طلبية أُنشئت، مستخدم سجل دخول، استيراد اكتمل |
debug | تفاصيل تقنية للتطوير | استعلام SQL نُفذ، Cache Hit، إعدادات حُملت |
الإنتاج لازم يشتغل على مستوى info. الـ debug يولد حجم كبير جداً. error و warn لازم دايماً يفعّلوا مراجعة (إذا مش تنبيهات).
لا PII في اللوقات
مجمّع اللوقات (Datadog، CloudWatch، Loki، Elasticsearch) يفهرس كل شي. إذا اللوقات تحتوي على إيميلات أو أسماء أو أرقام تلفونات، بنية اللوقات عندك تصير خاضعة لـ GDPR.
// سيء: PII في اللوقات
logger.info('Email sent to sara.mustermann@beispiel.de about order 12345');
// جيد: IDs بس
logger.info('notification_sent', {
recipient_id: 'cust_abc',
notification_type: 'order_confirmation',
order_id: 'ord_12345',
channel: 'email',
});
لمعمارية حماية PII الكاملة، شوف دليل منع تسريب البيانات.
Correlation IDs: تتبع طلب عبر السيرفسات
طلب مستخدم واحد ممكن يمر على API Gateway، وسيرفس مصادقة، وسيرفس منتجات، وسيرفس دفع، وWorker إشعارات، ومفهرس بحث. بدون Correlation ID، إيجاد كل إدخالات اللوق لطلب واحد يحتاج تخمين Timestamps و grep.
// التوليد عند الحافة (API Gateway أو أول سيرفس)
const correlationId = crypto.randomUUID();
// التمرير عبر كل سيرفس من خلال الهيدرات
const response = await httpClient.post('/api/orders', body, {
headers: { 'X-Correlation-Id': correlationId },
});
// التضمين في كل إدخال لوق
logger.info('order_created', {
correlation_id: correlationId,
order_id: order.id,
tenant_id: ctx.tenantId,
});
// التضمين في كل رسالة تُرسل للـ Queues
await queue.add('send_confirmation', {
orderId: order.id,
correlationId,
});
عند التصحيح، استعلم بالـ Correlation ID:
correlation_id = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
كل إدخال لوق من كل سيرفس لهذا الطلب يظهر. السلسلة الكاملة مرئية. هذي أكثر أداة تصحيح مؤثرة في الأنظمة الموزعة.
إرهاق التنبيهات: تنبيهات أقل، تنبيهات أفضل
المقاربة الافتراضية: نبّه على كل شي. Error Rate > 0؟ تنبيه. الكمون > 500ms؟ تنبيه. Queue Depth > 10؟ تنبيه. النتيجة: 200 تنبيه باليوم، كلهم يتجاهلوهم.
مبادئ تصميم التنبيهات
| المبدأ | تنبيه سيء | تنبيه جيد |
|---|---|---|
| قابل للتنفيذ | "صار خطأ" | "Error Rate لسيرفس الدفع > 5% من 10 دقائق، يأثر على الـ Checkout" |
| عتبة مع مدة | "الكمون > 500ms" (يطلق عند كل Spike) | "p95 كمون > 2 ثانية لـ 5 دقائق متتالية" |
| تأثير تجاري | "CPU > 80%" | "معالجة الطلبيات متأخرة: Queue Depth يكبر من 15 دقيقة" |
| بدون تكرار | نفس التنبيه يطلق 50 مرة | التنبيه يطلق مرة واحدة، يتضمن عدد الحدوثات |
مستويات التنبيهات
| المستوى | الاستجابة | القناة | مثال |
|---|---|---|---|
| P1 حرج | فوري (وعّي أحد) | PagerDuty/تلفون | معالجة الدفعات واقفة، خطر فقدان بيانات |
| P2 عالي | خلال ساعة (أوقات العمل) | Slack + إيميل | Error Rate مرتفع، أداء متدهور |
| P3 متوسط | يوم العمل التالي | Slack | Dead Letter Queue يكبر، وظيفة غير حرجة فاشلة |
| P4 منخفض | مراجعة أسبوعية | داشبورد | استخدام القرص يرتفع، الشهادة تنتهي خلال 30 يوم |
الهدف: تنبيهات P1 تطلق أقل من مرة بالأسبوع. إذا تطلق يومياً، إما إعداداتها غلط أو النظام عنده مشاكل موثوقية جوهرية.
إدارة التكاليف
الـ Observability غالية. استيعاب اللوقات، تخزين المقاييس، حفظ الـ Traces، واستضافة الداشبوردات تتجمع بسرعة.
| المكوّن | محرك التكلفة | التحسين |
|---|---|---|
| استيعاب اللوقات | الحجم (GB/يوم) | فلتر لوقات debug بالإنتاج، عيّنات من اللوقات المفصلة |
| حفظ اللوقات | المدة | 30 يوم hot، 90 يوم warm، أرشفة cold |
| المقاييس | الكاردينالية (تركيبات Labels الفريدة) | تجنب Labels عالية الكاردينالية (User IDs، Request IDs) |
| الـ Traces | الحجم + الحفظ | Tail-based Sampling (احفظ الأخطاء، ارمِ الروتيني) |
| الداشبوردات | مقاعد المستخدمين + الاستعلامات | ادمج الداشبوردات، احذف اللي ما تُستخدم |
تقليل حجم اللوقات بدون خسارة الإشارة
// لا تسجل كل Health Check
if (req.path === '/health' || req.path === '/ready') {
return next(); // تخطي التسجيل
}
// عيّنات من العمليات المفصلة
if (req.path.startsWith('/api/search') && Math.random() > 0.1) {
ctx.skipLogging = true; // سجل بس 10% من طلبات البحث
}
// دائماً سجل الأخطاء، أحداث الأعمال، والطلبات البطيئة
logger.info('request_completed', {
path: req.path,
status: res.statusCode,
duration_ms: duration,
// حقول مفصلة بس للطلبات البطيئة أو اللي فيها أخطاء
...(duration > 1000 || res.statusCode >= 400 ? {
query_params: sanitize(req.query),
response_size: res.contentLength,
} : {}),
});
نموذج نضج الـ Observability
| المستوى | القدرة | شو تقدر تجاوب عليه |
|---|---|---|
| L0: لا شي | console.log بالإنتاج | "شي مكسور" (يمكن) |
| L1: لوقات | Structured Logging، مركزي | "شو صار؟" (بـ grep) |
| L2: مقاييس | مقاييس رئيسية، داشبوردات بسيطة | "هل النظام سليم هلق؟" |
| L3: ارتباط | Correlation IDs، Distributed Tracing | "شو صار بهالطلب تحديداً؟" |
| L4: تنبيهات | تنبيهات متدرجة، Runbooks | "شي عم ينكسر ونعرف عنه فوراً" |
| L5: استباقي | كشف الشذوذ، تنبيهات مبنية على SLO، تتبع التكاليف | "شي على وشك ينكسر" |
أغلب الفرق عند L1-L2. الـ L3 (Correlation IDs) هي أكبر تحسين فردي. الـ L4 (تنبيهات جيدة) تمنع الاحتراق الوظيفي. الـ L5 طموح لكن قابل للتحقيق.
الأخطاء الشائعة
-
لوقات غير منظمة.
console.logمع دمج النصوص هو ضوضاء على نطاق واسع. استخدم JSON منظم مع حقول مصنفة. -
PII في اللوقات. مجمّع اللوقات يصير خاضع لـ GDPR. سجّل IDs، مش قيم.
-
التنبيه على كل شي. 200 تنبيه باليوم يعني صفر تنبيهات تُقرأ. درّج التنبيهات حسب الخطورة والتأثير التجاري.
-
Labels مقاييس عالية الكاردينالية. استخدام User IDs أو Request IDs كـ Labels للمقاييس ينشئ ملايين السلاسل الزمنية. استخدم Labels محدودة (Status Code، Endpoint، Tenant).
-
بدون Correlation IDs. بدونها، تصحيح طلب عبر 7 سيرفسات يحتاج تخمين Timestamps ودعاء.
-
بدون Log Sampling. تسجيل كل Health Check وطلب بحث بالتفصيل الكامل يضاعف فاتورة اللوقات. عيّن من العمليات المفصلة، سجّل الأخطاء دائماً.
-
بدون ميزانية تكلفة للـ Observability. إنفاق الـ Observability لازم يكون 5-15% من إنفاق البنية التحتية. تتبعه. حسّنه.
-
داشبوردات محد يشوفها. إذا داشبورد ما انشاف من 30 يوم، احذفه. انتشار الداشبوردات يزيد التكاليف والارتباك.
النقاط الرئيسية
-
Structured Logging مش قابل للتفاوض. JSON مع حقول مصنفة. قابل للاستعلام، للفلترة، للتنبيه. أبداً دمج نصوص.
-
Correlation IDs أكثر أداة تصحيح مؤثرة. ولّدها عند الحافة، مررها عبر كل سيرفس وكل Queue. استعلم بالـ Correlation ID عشان تشوف سلسلة الطلب الكاملة.
-
لا PII في اللوقات. أبداً. سجّل IDs العملاء، مش إيميلات العملاء. سجّل IDs الطلبيات، مش محتويات الطلبيات. بنية اللوقات لازم ما تصير مسؤولية حماية بيانات.
-
تنبيهات أقل، تنبيهات أفضل. تنبيهات P1 لازم تطلق أقل من مرة بالأسبوع. كل تنبيه لازم يكون قابل للتنفيذ. ضمّن التأثير التجاري في رسالة التنبيه.
-
حط ميزانية للـ Observability. حجم اللوقات، كاردينالية المقاييس، Trace Sampling، وسياسات الحفظ كلها تأثر على التكلفة. تتبع إنفاق الـ Observability كنسبة من إنفاق البنية التحتية.
نبني Observability بكل نظام ننشره سواء خدمات ذكاء اصطناعي، أو بنية تحتية سحابية، أو برمجيات مخصصة. إذا تحتاج مساعدة بـ Observability للإنتاج، تواصل مع فريقنا أو اطلب عرض سعر.
المواضيع المغطاة
أدلة ذات صلة
الدليل الشامل لأنظمة الذكاء الاصطناعي الوكيلي
دليل تقني لأنظمة الذكاء الاصطناعي الوكيلي في بيئات الأعمال. تعرف على البنية والقدرات والتطبيقات العملية للوكلاء المستقلين.
اقرأ الدليلالتجارة الوكيلية: كيف تخلي وكلاء الذكاء الاصطناعي يشترون بأمان
كيف تصمم تجارة وكيلية محكومة. محركات السياسات، بوابات الموافقة البشرية، إيصالات HMAC، الـ idempotency، عزل المستأجرين، وبروتوكول الدفع الوكيلي الكامل.
اقرأ الدليلالـ 9 أماكن اللي نظام AI تبعك بيسرّب بيانات منها (وكيف تسد كل وحدة)
خارطة منهجية لكل مكان البيانات بتتسرب منه بأنظمة AI. البرومبتات، الـ embeddings، السجلات، استدعاءات الأدوات، ذاكرة الـ agent، رسائل الأخطاء، الكاش، بيانات التدريب، وتسليمات الـ agents.
اقرأ الدليلجاهز لبناء أنظمة ذكاء اصطناعي جاهزة للإنتاج؟
فريقنا متخصص في بناء أنظمة ذكاء اصطناعي جاهزة للإنتاج. خلينا نحكي كيف نقدر نساعد.
ابدأ محادثة