تمتلك Grafana القدرة على
إظهار الحالة ، Grafana لديها القدرة على إظهار
البيانات في الوقت المناسب . ومع ذلك ، من المفارقات ، أن Grafana لم يكن لديها حتى الآن طريقة ملائمة لعرض
الحالة بمرور الوقت !
نقدم البرنامج المساعد -
لوحة Statusmap . يسمح لك بعرض حالة مجموعة من الكائنات بشكل مرئي لفترة زمنية محددة. كمثال يوضح تشغيل البرنامج المساعد ، تخيل العديد من المواقع التي يتم فيها تحضير القهوة لشخص ما:
يمكنك أن ترى كيف توفر نيكي الطاقة ، وتقوم جيري بتجديد مواردها المائية بسرعة ، وآلة قهوة فاليرا غالبًا ما تكون غير المرغوب فيها ، ومن الواضح أن شبكة Wi-Fi أفضل في Bifrost من المحطة القمرية ، حيث يبدو أنها ضيقة جدًا بالماء.تبدو مثيرة للاهتمام؟ ولكن لنبدأ بكيفية وصولنا جميعًا إلى هذا.
لماذا؟
من أجل تصور أفضل للبيانات ، قمنا بتعيين مهمة بسيطة لأنفسنا: لعرض حالات مجموعة من المواعيد الزمنية على مدار فترة زمنية. مجموعة من الكائنات تعني سلاسل زمنية مختلفة: يمكن أن تختلف في مجموعة من التسميات والاسم. علاوة على ذلك ، يجب أن تكون القيم الزمنية ملائمة ، أي بدون عكازات ، معروضة في النص واللون.
الأمثلة الفعلية لاستخدام هذا التصور لأعمالنا هي صحة خوادم أو قرون Kubernetes ، نتائج فحص خدمات HTTP. لذلك في Flant ، ولد مكون إضافي لـ Grafana يسمى Statusmap. بالتفكير في الاحتمالات العديدة العديدة لتطبيقه لمهام أخرى ، سرعان ما التزمنا بمشاركة الرمز مع المجتمع العالمي. ولكن حقا ، لم يحل أحد هذه المشكلة أمامنا؟
لماذا لست مستعدا؟
المهمة شائعة حقًا ، لذلك لم نصبح روادًا فيها. بدأ كل شيء بحقيقة أنه كان لدينا العديد من لوحات المعلومات مع الإضافات الرائعة
لوحة الحالة و
Status Dot . تتيح لك هذه المكونات الإضافية عرض الحالة الحالية لمجموعة من الأشياء ، على سبيل المثال ، المضيفين أو المداخن ... أو آلات القهوة في أجزاء مختلفة من العالم.


كل شيء سار على ما يرام حتى أردنا أن نرى حالات هذه الأشياء في الوقت المناسب. كان الحل الأول والأسهل هو إضافة رسم بياني منتظم مع علامة اختيار
مكدسة .

كما هو مخطط ، ستسمح لنا لوحة الحالة + الرسم البياني المكدس برؤية حالة الكائنات "في الوقت الحالي" وتطور الوضع في الوقت المناسب. ومع ذلك ، فإن الرسم البياني المكدس ليس واضحًا جدًا:
- يشير اللون إلى سلاسل زمنية مختلفة ، وليس القيم المعروضة بالألوان لنقطة الحالة أو لوحة الحالة. أي أن ألوان الرسمين البيانيين ليست متشابهة وهذا مربك ؛
- إذا ظهر
null
بين القيم ، فستفشل الرسوم البيانية.
لقد حاولوا تكييف
خريطة التمثيل الحراري القياسية - لكنها لم تنجح: يعمل المكون الإضافي مع المحور Y على مستوى القيم فقط ولا يعرف كيفية عرض التسميات هناك. ثم جربنا الإضافات التالية لـ Grafana:
- مؤامرة السجاد - تجميع القيم حسب اليوم والجزء المحدد من اليوم ؛
- لوحة منفصلة هي مكون إضافي جيد ، ولكننا بحاجة إلى إظهار الحالات بشكل منفصل مع مرور الوقت ؛
- تعد لوحة Status By Group تحسينًا جيدًا للوحة Status ، مما يسمح لك بعرض العديد من الحالات ، ولكن لا يزال بدون الإمكانيات التي نحتاجها.
بناءً على نتائج جميع الدراسات ، قمنا بصياغة المتطلبات التالية للمكون الإضافي:
- تحديد خط واضح للرسم البياني لكل كائن ؛
- يتم عرض اسم الكائن على طول المحور Y ويتم تعيينه في حقل وسيلة الإيضاح ؛
- يمكن أن يحتوي كائن واحد على عدة حالات - في مثل هذه الحالات ، سيتم عرض أهمها بالألوان ، وسيتم عرض الباقي في تلميح الأدوات ؛
- يجب عرض الدلاء بعرض لا يقل عن (5 بكسل) ، لأن في بكسل واحد غير مريح لتوجيه الماوس ؛
- إدارة الألوان اليدوية - القدرة على تعيين اللون لكل قيمة عددية من مجموعة منفصلة.
اسمحوا لي الآن بعمل بحث صغير حول Heatmap ورسومات Prometheus والحالات المنفصلة ...
جزء من النظرية
الخريطة الحرارية الكلاسيكية عبارة عن رسم بياني ثلاثي الأبعاد:
- يمثل المحور س الوقت
- على طول المحور ص هي القيم المحتملة لكمية معينة ،
- على طول المحور Z هو عدد القيم المرصودة في وقت معين.
يعرض المكون الإضافي Heatmap القياسي المحور Z بالألوان - على سبيل المثال ، من الأبيض إلى الأحمر أو من خلال التدرج الأخضر والأصفر والأحمر. يعمل هذا بشكل جيد جدًا للقيم المستمرة: وقت الاستجابة ، وطول قائمة الانتظار ، وعدد الطلبات إلى الخادم ... في حالة الحالات المنفصلة لمجموعة من الكائنات ، تحتاج إلى ما يلي: على المحور ص عرض أسماء الكائنات التي نراقبها ، وفي المحور Z إظهار الملاحظات لكل كائن الحالات في وقت معين ... ولكن انتظر! ماذا تعني مجموعة حالات كائن في المرة الواحدة؟ سأحاول أن أصف.
أولئك الذين يستخدمون Prometheus مع Grafana يعرفون عن
step
أو
interval
- الإعداد في علامة التبويب
Query . إذا حددت
1m
، والبيانات التي تجمعها بفاصل زمني
5s
، فعندما تقوم بإجراء طلب
coffee_maker_status
بسيط ، ستعرض
coffee_maker_status
Prometheus كل قيمة 12 ، ولا يمكن رؤية 11 قيمة على الرسم البياني. كيف تحسن الوضع؟
أول ما يتبادر إلى الذهن هو استخدام وظائف التجميع - على سبيل المثال ،
*_over_time(coffee_maker_status[1m])
. ما الوظيفة التي يجب عليّ أن آخذها؟ حان الوقت لمعرفة كيفية ظهور الحالة في مقاييس بروميثيوس. في معظم الحالات ، تتم الإشارة إلى الحالة من خلال مجموعة معينة من القيم. على سبيل المثال ، بالنسبة إلى
coffee_maker_status
قد تكون
coffee_maker_status
قيم الحالة هذه:
- 0 - حسنًا
- 1 - إيقاف
- 2 - لا حبوب ،
- 3 - لا ماء ،
- 4 - تفشل.
علاوة على ذلك ، قد يبدو الأمر بسيطًا: خذ عدد الأصفار ، والأصفار ، والثنائيات ، وما إلى ذلك. في دقيقة واحدة ... ولدينا بيانات ممتازة لعرضها على الرسم البياني! لكن Prometheus له وجهة نظره الخاصة حول هذا:
coffee_maker_status[1m]
هو ناقل نطاق ، وبالتالي فإن التعبيرات مثل
max_over_time(coffee_maker_status[1m]==2)
أو
count_values_over_time(coffee_maker_status[1m], 3)
، والتي ستكون مناسبة جدًا ، مستحيلة جدًا.
يعمل كل شيء بشكل جيد إذا كانت هناك قيمتان في المقياس:
0
(لم تتم ملاحظة أي حالة) و
1
(تمت ملاحظة الحالة) ، ويتم تخزين الحالة نفسها في الملصق. ثم يمكنك تقديم مثل هذه الطلبات:
(max_over_time(coffee_maker_status{status="3"}[1m]) == 1) *3
ماذا تفعل بمقياس له قيم متعددة؟ أعطت
الملاحظة "
تكوين دالات متجه النطاق في PromQL " فكرة تحويل مقياس بقيم منفصلة إلى مقاييس مع تصنيفات. يمكن القيام بذلك باستخدام قاعدة التسجيل التالية:
- record: coffee_maker_status:discrete expr: | count_values("status", coffee_maker_status)
تعمل هذه القاعدة على تحويل مقياس
coffee_maker_status
النحو التالي: إذا ظهرت قيمة
3
، فإن Prometheus ينشئ مقياسًا
coffee_maker_status:discrete{status="3"}
بقيمة 1. وهكذا ، لكل قيمة تمت ملاحظتها.
عادة يتم تحديد الحالات مقدمًا ، بحيث يمكنك إنشاء مجموعة من الاستعلامات حتى لا تفوتك القيم اللازمة. يجب أن تتطابق وسيلة الإيضاح لجميع الاستعلامات من أجل تجميع القيم:

الآن ، إذا تم إيقاف تشغيل آلة القهوة لمدة دقيقة واحدة لمدة 30 ثانية (الحالة معطلة -
1
) ، وبقية الوقت يعمل (الحالة جيدة -
0
) ، فسيكون لدينا معلومات حول إيقاف التشغيل ، لأن سيتلقى المكون الإضافي قيمتين مع وسيلة إيضاح واحدة في كل مرة:
0
من الاستعلام A و
1
من الاستعلام B.
جيد: لقد توصلنا إلى كيفية تجميع البيانات حول حالات منفصلة وما زلنا لا نفقد المعلومات. يبقى معرفة كيفية دمج البيانات بناءً على وسيلة الإيضاح ورسمها على اللوحة.
البرنامج المساعد Statusmap
بالطبع ، لم نصل على الفور إلى ما تم وصفه أعلاه ، ولكن عندما اجتمع كل هذا ، أصبح من الواضح ، في جوهره ، أن آلية العرض لم تكن كافية. الآن هناك مثل هذه الآلية -
المكون الإضافي للوحة Statusmap ، والتي يمكنها القيام بما يلي:
- يتم تجميع القيم في كل نقطة زمنية في سلال بمصادفة نص الأساطير المحددة في الاستعلام ؛
- يحتوي كل نص وسيلة إيضاح على خط خاص به على الرسم البياني ويتم عرض النص كتسمية على المحور ص ، ويتم عرض القيم الفارغة كمسافة أو
0
:

- لأي قيمة ، يمكنك تحديد اللون الدقيق للسلة:

- إذا كان هناك العديد من القيم في السلة ، فسيتم أخذ اللون للقيمة المحددة أعلاه في علامة التبويب الألوان ، وعند التمرير فوق السلة ، يتم عرض جميع القيم التي تقع فيها:

- المكون الإضافي قادر على تشكيل
interval
لطلب إلى Prometheus بحيث لا تتحول السلال إلى خطوط بكسل.
والنتيجة هي تمثيل مناسب للغاية
لحالة العديد من الأشياء . علاوة على ذلك ، يمكنك رؤية كل من الحالة الحالية (هذه هي السلال الموجودة في أقصى اليمين) وحالة الكائن في الوقت المناسب.
من أين تحصل عليه
يتم توزيع الكود المصدري للمكون الإضافي Grafana Statusmap بموجب ترخيص MIT المجاني
(على غرار المكونات الإضافية الأخرى لـ Grafana) . وهو متاح حاليًا على
GitHub .
ونأمل مخلصين أن يدخل في المستقبل القريب مستودع Grafana plugin . تحديث (03/10/18): تم
قبول المكون الإضافي في كتالوج Grafana الرسمي.
وأخيرًا - توضيح لكيفية مساعدة Statusmap في تصور البيانات بحالات المداخن من مجموعة إنتاج Kubernetes:

ملاحظة
اقرأ أيضا في مدونتنا: