المراقبة: السجلات والمقاييس والتتبع
درس 4 من 4
4المراقبة: السجلات والمقاييس والتتبع
الصورة الكبيرةفي جهازك ترى الخطأ في الطرفية. في الإنتاج آلاف الطلبات على خوادم كثيرة. المراقبة تعطيك ثلاث عدسات: السجلات تقول ماذا حدث، والمقاييس تقول كم، والتتبع يقول أين ضاع الوقت.
ماذا تشاهد في الرسم: الركائز الثلاث للمراقبة. التنبيه يأتي من المقاييس، والتشخيص من السجلات والتتبع.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
مثل لوحة سيارة: عداد السرعة والحرارة والوقود (مقاييس) تخبرك بنظرة أن شيئًا غير طبيعي. ودفتر الصيانة (سجلات) يخبرك ماذا حدث بالتفصيل. وتشخيص الكمبيوتر في الورشة (تتبع) يحدد أي قطعة بالضبط.
السجلات المنظمة (JSON) بحقول ثابتة: الوقت، المستوى، الرسالة، request_id، المستخدم، المدة، لتُبحث وتُجمع، ولا تسجل أسرارًا أو بيانات شخصية. المقاييس: الإشارات الذهبية الأربع (Google SRE): الزمن (p95)، الحركة (طلبات/ث)، الأخطاء (نسبة 5xx)، التشبّع (معالج، ذاكرة، اتصالات). أو RED للخدمات وUSE للموارد. Prometheus يجمع وGrafana يعرض. التتبع الموزع: كل طلب له trace_id يمر عبر الخدمات، وكل خطوة span بزمنها، ومعيار OpenTelemetry يوحّد الثلاثة. SLO مثل «99.9% من الطلبات تنجح خلال 300ms في 30 يومًا» يعطي ميزانية أخطاء. التنبيه على الأعراض (SLO يحترق) لا على الأسباب (المعالج 80%)، وكل تنبيه يجب أن يتطلب فعلًا.
قبل أن تبدأ
🚢النشر
تطبيق يعمل على خادم.
🏎️الأداء
درس المئينات p95.
الفكرة الجوهرية
1سجلات منظمة بمعرّف طلب
كل سطر JSON بنفس الحقول، وكل سطر من نفس الطلب يحمل نفس request_id، فتبحث عنه وترى قصة الطلب كاملة:
import json
def log(level, message, **fields):
record = {"level": level, "msg": message, **fields}
print(json.dumps(record, ensure_ascii=False))
request_id = "req-8f2a"
log("info", "order received", request_id=request_id, user_id=42, items=2)
log("warning", "payment slow", request_id=request_id, provider="pay", ms=2400)
log("error", "payment failed", request_id=request_id, status=502)2المقاييس الذهبية من السجلات
من نفس بيانات الطلبات تحسب الإشارات الأربع لدقيقة واحدة، وتقرر إن كان يجب التنبيه:
requests = [
{"ms": 120, "status": 200}, {"ms": 95, "status": 200}, {"ms": 2300, "status": 502},
{"ms": 110, "status": 200}, {"ms": 130, "status": 201}, {"ms": 2500, "status": 504},
{"ms": 105, "status": 200}, {"ms": 140, "status": 200}, {"ms": 98, "status": 200},
{"ms": 115, "status": 200},
]
cpu_percent = 64
latencies = sorted(r["ms"] for r in requests)
p95 = latencies[max(0, round(0.95 * len(latencies)) - 1)]
error_rate = sum(r["status"] >= 500 for r in requests) / len(requests)
print(f"latency p95 : {p95} ms")
print(f"traffic : {len(requests)} req/min")
print(f"errors : {error_rate:.0%}")
print(f"saturation : {cpu_percent}% cpu")
SLO_ERROR_RATE = 0.01
if error_rate > SLO_ERROR_RATE:
print("ALERT: error rate above SLO, users are affected")3التتبع الموزع وOpenTelemetry
الطلب يمر عبر الواجهة ثم خدمة الطلبات ثم الدفع ثم القاعدة. التتبع يرسم كل خطوة بزمنها، فترى أن 2 من 2.4 ثانية كانت في مزود الدفع. OpenTelemetry يضيف هذا آليًا لأغلب الأطر:
pip install opentelemetry-distro opentelemetry-exporter-otlp opentelemetry-bootstrap -a install OTEL_SERVICE_NAME=cafe-api \ OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317 \ opentelemetry-instrument uvicorn main:app
request_id في ترويسة الرد. حين يرسل لك المستخدم لقطة خطأ فيها المعرّف، تجد سجلاته فورًا.مثال محلول
المسألة: مستخدمون يشتكون «الدفع يعلق أحيانًا»، والمعالج 30% ولا تنبيه. المقاييس: p95 للدفع 2.4 ثانية، ونسبة 5xx 4% منذ أمس. التتبع: 85% من الزمن في استدعاء مزود الدفع. السجلات (بحث بـ request_id): أخطاء مهلة من المزود بعد تحديث شهادته. الإصلاح: مهلة 3 ثوانٍ مع إعادة محاولة واحدة، وتنبيه جديد على نسبة أخطاء الدفع لا على المعالج.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| سجلات أكثر = مراقبة أفضل. | سجلات بلا بنية ولا معرّف ضجيج مكلف. البنية والسياق أهم من الكمية. |
| نبّه على كل شيء حتى لا يفوتك شيء. | كثرة التنبيهات تجعل الفريق يتجاهلها كلها. نبّه على ما يشعر به المستخدم. |
أين تقابله في العمل
🚨المناوبة
تنبيه واضح يوقظ الشخص الصحيح بمعلومات كافية.
📉ما بعد الحادثة
السجلات والتتبع تعيد بناء ما حدث بدقة.
اختبر فهمك
ما الإشارات الذهبية الأربع؟
من كتاب Google SRE، وتغطي ما يشعر به المستخدم.
لماذا request_id في كل سطر سجل؟
آلاف الطلبات متداخلة، والمعرّف يفصلها.
على أي شيء تنبّه أولًا؟
الأعراض التي يشعر بها المستخدم أهم من الأسباب المحتملة.
بطاقات مراجعة سريعة
تحقق من فهمك
ما الفرق بين السجلات والمقاييس؟
السجلات أحداث مفصلة لكل طلب، والمقاييس أرقام مجمعة عبر الزمن رخيصة التخزين.
ماذا لا تسجل أبدًا؟
كلمات المرور، الرموز، أرقام البطاقات، والبيانات الشخصية الحساسة.
ما فائدة SLO؟
يحوّل «الموقع بطيء» إلى رقم متفق عليه، ويقرر متى تتوقف الميزات لصالح الاستقرار.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
توثيق رسمي2
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.