المستوى: محترف (Professional) — يفترض إن عندك Prometheus شغّال في الإنتاج وتعرف أساسيات الـ labels والـ scraping.
لو Prometheus بتاعك اتقتل فجأة بـ OOMKilled والرام قفزت من 4 جيجا لـ 40 جيجا من غير أي زيادة في الترافيك، المشكلة في 90% من الحالات مش السيرفر ولا الاستعلامات. المشكلة ليبل واحد غير محدود دخّلته على مقياس، وفجّر عدد السلاسل الزمنية. هنا هتعرف تكتشفه بأمر واحد وتقفله قبل ما يوقّع الـ node كله.
الكارديناليتي: العدّاد الخفي اللي بيحدد استهلاك رامك
المشكلة باختصار
Prometheus بيخزّن كل توليفة فريدة من (اسم المقياس + مجموعة الليبلات) كسلسلة زمنية منفصلة ومستقلة في الذاكرة. كل سلسلة نشطة (active series) بتاكل تقريبًا من 1 لـ 3 كيلوبايت في الـ head block. الرقم ده يبان صغير، لكنه بيتضرب في عدد السلاسل. ولو عدد السلاسل بقى ملايين، الحسبة بتتحول من ميجابايت لعشرات الجيجابايت في دقائق.
خليها بمثال قبل التعريف العلمي
تخيل مكتبة عندها فهرس. الفهرس ده كل صف فيه بيمثّل كتاب. لو صنّفت الكتب حسب "النوع" (روايات، علوم، تاريخ) هتطلع عندك 3 صفوف. لو صنّفتها حسب "النوع × دار النشر × سنة الطبع" هتطلع مئات الصفوف. لكن لو قررت تعمل صف في الفهرس لكل "رقم عضوية قارئ استعار الكتاب"، الفهرس هيكبر بعدد القرّاء، وممكن يوصل ملايين الصفوف. الفهرس نفسه بقى أكبر من المكتبة.
ده بالظبط اللي بيحصل في Prometheus. الليبل زي method أو status عنده عدد قيم محدود (bounded)، فالسلاسل قليلة. لكن الليبل زي user_id أو email أو request_id أو الـ URL الكامل بقيمه، عدد قيمه غير محدود (unbounded)، وده اللي بيفجّر العدّاد.
التعريف العلمي الدقيق
عدد السلاسل لمقياس = حاصل ضرب عدد القيم المميزة لكل ليبل فيه. الصيغة: series = ∏ (distinct values per label). الجدول ده بيوضّح الفرق بين مقياس آمن ومقياس قنبلة:
| المقياس | الليبلات وعدد قيمها | عدد السلاسل | الذاكرة التقريبية |
|---|---|---|---|
| آمن (bounded) | method=4 × status=3 × handler=12 | 144 | ≈ 0.5 ميجابايت |
| قنبلة (unbounded) | method=4 × status=3 × user_id=200,000 | 2,400,000 | ≈ 7 جيجابايت (بحساب 3KB/سلسلة) |
لاحظ إن نفس المقياس، بمجرد إضافة ليبل واحد غير محدود، قفز من 144 سلسلة لـ 2.4 مليون. ده اللي بنسمّيه "cardinality explosion" أو "cardinality bomb".
إزاي تكتشفها في دقيقة (مثال تنفيذي)
Prometheus بيوفّر endpoint جاهز بيرتّبلك أكبر مصادر السلاسل. افتحه على المتصفح أو بـ curl: