تكلفة المراقبة وإدارة البيانات
تكلفة المراقبة وإدارة البيانات
على نطاق Google، تكلّف البنية التحتية للمراقبة أكثر من الميزانية الهندسية الكاملة لكثير من الشركات. حتى في الشركات المتوسطة التي تستخدم منصات مراقبة مُدارة — Datadog وNew Relic وHoneycomb — تتلقى الفرق بانتظام فواتير تتراوح بين 500 ألف دولار و2 مليون دولار سنوياً، ولا تكتشف الأرقام إلا بعد أن تنفجر. إن فهم سبب تكلفة بيانات القياس عالياً والأدوات التي يمكنك استخدامها للسيطرة على التكاليف دون التضحية بجودة الإشارة هو انضباط هندسي بالدرجة الأولى، لا مجرد شأن مالي.
يتناول هذا الدرس الآليات الثلاث التي تهيمن على تكاليف المراقبة: البعد الأساسي (عدد سلاسل المقاييس الزمنية الفريدة)، والأخذ بالعينات (الاحتفاظ بنسبة مفيدة إحصائياً من التتبعات والسجلات)، ومستويات الاستبقاء (تخزين البيانات بمفاضلات مختلفة بين التكلفة والدقة بمرور الوقت). أتقن هذه المحاور الثلاثة وستتمكن من تخفيض الفواتير بنسبة 60–80% مع إبقاء كل التنبيهات ولوحات المعلومات وتحقيقات الحوادث تعمل بشكل طبيعي.
انفجارات البعد الأساسي
يُعرَّف كل مقياس في Prometheus باسمه مع مجموعة من أزواج مفتاح-قيمة للتسميات. إجمالي تركيبات التسميات المتميزة هو البعد الأساسي للمقياس. يخزّن Prometheus كل تركيبة فريدة كسلسلة زمنية منفصلة، تتطلب كل منها أجزاء رأس في الذاكرة وكتل على القرص. البعد الأساسي هو المحرك الأكبر للتكلفة في أنظمة المقاييس.
قرار بسيط للتسمية يتضاعف بسرعة. مقياس بتسميات region (5) وhttp_method (6) وstatus_code (12) وroute (200 مسار موحّد) ينتج 5 × 6 × 12 × 200 = 72,000 سلسلة. أضف تسمية بـ 50 قيمة وستصل إلى 3.6 مليون سلسلة. أضف user_id بـ 10 ملايين قيمة وسيستنفد Prometheus ذاكرة الوصول العشوائي وينهار — محتجباً نظام التنبيه في اللحظة التي تحتاجه فيها أكثر ما يكون.
user_id أو order_id أو request_id أو email أو عنوان IP أو أي UUID. كل كيان جديد يُنشئ سلسلة زمنية جديدة. بعد ارتفاع حركة المرور أو حملة تسجيل، يُوقف Prometheus نفسه بسبب نفاد الذاكرة خلال دقائق. الحل ثقافي وقائم على الأدوات: يجب أن تأتي قيم التسميات من مجموعة محدودة ومعروفة الحجم. القيم عالية البعد تنتمي إلى سمات امتدادات التتبع وحقول السجلات المنظمة — ليس في تسميات المقاييس أبداً.
يتطلب اكتشاف مشاكل البعد الأساسي قبل وصولها إلى الإنتاج مراقبة نشطة لخط أنابيب المقاييس نفسه. يكشف Prometheus عن prometheus_tsdb_head_series (عدد السلاسل النشطة الحالية) وprometheus_tsdb_head_series_created_total (معدل الإنشاء). نبّه عند نمو هذه الأرقام بشكل أسرع مما تبرره عدد خدماتك.
الحل لمشاكل البعد الأساسي الموجودة هو إعادة التسمية في طبقة السحب قبل دخول البيانات إلى TSDB، باستخدام metric_relabel_configs في Prometheus. يمكنك حذف مقاييس بأكملها أو تسميات محددة أو استبدال قيم التسميات بمجموعات موحّدة — كل ذلك دون لمس كود التطبيق.
الأخذ بالعينات: الاحتفاظ بما يهم
التتبعات الموزعة والسجلات مطوّلة بطبيعتها. خدمة تستقبل 1000 طلب في الثانية تنتج 86.4 مليون امتداد تتبع يومياً. تخزين كلها يكلّف مبالغ ضخمة مع عوائد متناقصة — الـ 999 استدعاء ناجحاً لـ GET /healthz لا تخبرك بشيء لم تخبرك به الأولى. الأخذ بالعينات هو الاحتفاظ بنسبة مفيدة إحصائياً مع التخلص من الأغلبية الزائدة.
ثمة ثلاث استراتيجيات للأخذ بالعينات، كل منها مناسبة عند نقطة مختلفة في الخط:
- الأخذ بالعينات عند الرأس (Head-based) — يُتخذ القرار عند بداية الطلب قبل إنشاء أي امتدادات. بسيط، صفري التكلفة، لكنه أعمى: لا تعرف بعد إذا كان هذا التتبع سيكون مثيراً للاهتمام. مناسب للحركة عالية الحجم منخفضة القيمة (فحوص الصحة، سحب المقاييس).
- الأخذ بالعينات عند الذيل (Tail-based) — يُؤجَّل القرار حتى اكتمال التتبع بأكمله. يُعازل المجمع الامتدادات ويُقيّم القواعد: احتفظ إذا كان أي امتداد يحمل خطأ، احتفظ إذا تجاوزت الزمن الكلي ثانيتين، احتفظ بـ 1% من الباقي. هذه هي الاستراتيجية الصحيحة لخدمات الإنتاج لأنها تضمن الاحتفاظ بـ 100% من الأخطاء والتتبعات البطيئة. التكلفة هي مخزن مؤقت (عادة 30–60 ثانية من الامتدادات في الذاكرة).
- الأخذ بالعينات التكيفي (Adaptive) — يتعدّل معدل العينات تلقائياً بناءً على معدلات الأخطاء وتوزيعات زمن الاستجابة وحجم الحركة. هذا هو الحل الأمثل للخدمات الكبيرة لكنه يتطلب إعداداً أكثر.
error=true أو بحالة HTTP 5xx غير قابل للتفاوض — معدل استبقاء 100% لذلك التتبع بصرف النظر عن نسبة العينات الإجمالية.
في OTel Collector، يُنفَّذ الأخذ بالعينات عند الذيل بمعالج tailsampling. يحتفظ هذا الإعداد بجميع الأخطاء وجميع التتبعات البطيئة و5% من الحركة العادية:
مستويات الاستبقاء: منحنى التكلفة والدقة
لا تتمتع جميع بيانات القياس بالقيمة ذاتها مع مرور الوقت. ارتفاع معدل الأخطاء قابل للتنفيذ خلال 72 ساعة الأولى من الحادثة. تلك البيانات ذاتها مفيدة لتحليل الاتجاهات لمدة 30 يوماً. بعد 90 يوماً، نادراً ما تحتاج البيانات الخام — تحتاج ملخصات مُجمَّعة: متوسط الاستجابة اليومي عند الشريحة 99، ومعدل الأخطاء الأسبوعي لكل خدمة. بعد عام، تبقى فقط البيانات التي يُلزم بها الامتثال.
تُنفذ فرق المراقبة في كبرى شركات التقنية استبقاءً متعدد المستويات يُقايض الدقة بالتكلفة في كل مرحلة:
- المستوى الساخن (0–72 ساعة) — دقة كاملة، بعد كامل، استعلامات سريعة. التكلفة: الأعلى. الغرض: لوحات المعلومات الفورية وتحقيقات المناوبة.
- المستوى الدافئ (72 ساعة – 30 يوماً) — مقاييس بدقة كاملة مضغوطة في تخزين الكائنات (S3/GCS). سرعة الاستعلام أبطأ 2–5 أضعاف لكن التكلفة تنخفض 10 أضعاف. الغرض: مراجعات ما بعد الحوادث وحسابات معدل استهلاك SLO.
- المستوى البارد (30 يوماً – سنة) — بيانات مُخفَّضة الدقة فقط. يُشغّل Thanos Compactor تخفيض دقة بمعدل
5mو1h، مما يُقلل التخزين 100–1000 ضعف مقارنة بالبيانات الخام. الغرض: تخطيط السعة ومقاييس المراجعات الفصلية. - الأرشيف / التخزين الجليدي (سنة+) — تبقى فقط المجاميع المُحسوبة مسبقاً. تُحذف الامتدادات والسجلات الخام؛ تستمر جداول الملخصات في مستودع البيانات لفترات الحفظ القانوني.
sum(rate(http_requests_total[5m])) by (service) عبر ملايين السلاسل عند كل تحميل للوحة معلومات، شغّله مرة واحدة كل 30 ثانية عبر قاعدة تسجيل واستعلم عن السلسلة المُحسوبة الرخيصة. هذا يُقلل تكلفة الاستعلام 100 ضعف على مجموعات Prometheus المشغولة وهو النمط الصحيح لكل مقياس SLO ولوحة معلومات يُشغَّل أكثر من مرة في الدقيقة.
تحديد التكاليف والحوكمة
في المنظمات متعددة الفرق، يمنع تحديد تكاليف القياس الإنفاق غير المحدود. يجب أن تمتلك الفرق مراكز تكلفة خاصة بها. في Datadog، يظهر تكلفة كل فريق عبر ميزة Usage Attribution. في الحلول الذاتية الاستضافة، يمكن قياس التكلفة بعدد السلاسل لكل فريق: صنّف المقاييس بـ team="payments" واستعلم عن count by (team) ({__name__=~".+"}) لإنتاج فاتورة عدد السلاسل لكل فريق. ضع ميزانيات سلاسل لكل فريق ونبّه في CI عندما يتسبب PR في تجاوز الخدمة ميزانيتها.
إدارة بيانات المراقبة هي في نهاية المطاف مسألة اقتصاديات هندسية. الهدف ليس صفراً من القياس — بل الحد الأدنى من القياس اللازم لتلبية متطلبات التحقيق في SLO والتنبيه. خطة مراقبة تكلّف 2 مليون دولار سنوياً لكنها تكتشف كل حادثة في أقل من 5 دقائق قد تستحق كل دولار. خطة تكلّف 500 ألف دولار لكنها تترك فريقك في عمى أثناء الحوادث لا قيمة لها. اضبط الأدوار — البعد الأساسي ومعدلات العينات ونوافذ الاستبقاء — على مخاطر نظامك وأهداف وقت التعافي الفعلية، لا على أهداف تكلفة تعسفية.