🚀 أصبحت CloudSek أول شركة للأمن السيبراني من أصل هندي تتلقى استثمارات منها ولاية أمريكية صندوق
اقرأ المزيد

Prometheus هو برنامج مراقبة مفتوح المصدر مصمم لمراقبة التطبيقات الحاوية في بنية الخدمات المصغرة. نظرًا للتعقيد المتزايد للبنية التحتية الحديثة، ليس من السهل تتبع حالة التطبيق وصحته وأدائه. قد يؤثر فشل أحد التطبيقات على قدرة التطبيقات الأخرى على العمل بشكل صحيح. يساعد Prometheus على تتبع الحالة أو الأداء أو أي مقاييس مخصصة للتطبيق بمرور الوقت، مما يسمح للمهندس بتجنب المواقف غير المتوقعة وتحسين الوظائف العامة للبنية التحتية للخدمات المصغرة. ومع ذلك، يمكن للمهندسين أيضًا استخدام بروميثيوس لمراقبة البنية التحتية المتجانسة.
قبل الخوض في التفاصيل الدقيقة لبروميثيوس، يجب أن نناقش بعض المصطلحات المهمة:
يحتوي بروميثيوس على ثلاثة مكونات رئيسية:

يوفر بروميثيوس مقاييس مختلفة. من بينها، يعمل العداد والقياس والملخص والمخطط التكراري في معظم المواقف. تتمثل مهمة التطبيق في توفير المقاييس بتنسيق محدد مسبقًا يفهمه بروميثيوس. من السهل نشر هذه المقاييس من التطبيق الخاص بك باستخدام مكتبات العملاء المتوفرة. حاليًا، توجد مكتبات للغات الشائعة مثل GO و Python و Java و Ruby وما إلى ذلك.
في هذه المدونة، سنتناول إصدار python. ومع ذلك، فمن السهل ترجمة هذه المفاهيم إلى لغات أخرى.
يمكن لأي قيمة تزداد بمرور الوقت، مثل عدد طلبات HTTP وعدد استجابة خطأ HTTP وما إلى ذلك، استخدام مقاييس العداد. لا يمكن أبدًا للمقياس الذي يمكن تقليله استخدام المقاييس المضادة. يتمتع Counter بميزة الاستعلام عن المعدل الذي تزداد به القيمة باستخدام الدالة rate ().
في المثال أدناه، نحسب عدد استدعاءات الوظائف إلى python def:
من بروميثيوس_client استيراد start_http_server، العداد
استيراد عشوائي
وقت الاستيراد
COUNTER = عداد ('function_calls'، 'عدد المرات التي يتم فيها استدعاء الدالة '، [' module '])
طلب العملية (t) المعرّف:
«" «دالة وهمية تستغرق بعض الوقت."»
Counter.labels ('counter_demo') .inc ()
وقت النوم (t)
إذا كان __name__ == '__main__':
بدء تشغيل خادم http (8001)
بينما صحيح:
طلب المعالجة (random.random ())
يقوم هذا الرمز بإنشاء مقياس عداد يسمى إجمالي المكالمات الوظيفية. نحن نزيد إجمالي المكالمات الوظيفية في كل مرة نسمي فيها الوظيفة طلب معالجة. تحتوي مقاييس بروميثيوس على تصنيفات لتحديد المقاييس المماثلة التي تم إنشاؤها من تطبيقات مختلفة. في الكود أعلاه، إجمالي المكالمات الوظيفية يحتوي على تسمية تسمى الوحدة النمطية بقيمة تساوي كاونتر ديمو
الإخراج من
كيرل http://localhost:8001/metricsسيكون:
# HELP function_calls_إجمالي عدد المرات التي يتم فيها استدعاء الوظيفة
# وظيفة TYPE - المكالمات - العداد الإجمالي
إجمالي عدد المكالمات الوظيفية {module= «counter_demo"} 22.0
# تم إنشاء وظيفة HELP_calls_عدد المرات التي تم فيها استدعاء الوظيفة
# وظيفة النوع - المكالمات - المقياس الذي تم إنشاؤه
تم إنشاء الدالة_المكالمات {module= «counter_demo"} 1.6061945420716858e+09
تستخدم أي قيمة تزيد أو تنقص بمرور الوقت مقاييس القياس مثل استخدام وحدة المعالجة المركزية واستخدام الذاكرة ووقت المعالجة.
في المثال أدناه، نحسب الوقت المستغرق لأحدث استدعاء وظيفي لـ طلب عملية بيثون ديف:
من prometheus_client استيراد start_http_server، المقياس
استيراد عشوائي
وقت الاستيراد
الوقت = المقياس ('process_time'، 'الوقت المستغرق لكل استدعاء للدالة'، ['module'])
طلب العملية (t) المعرّف:
«" «دالة وهمية تستغرق بعض الوقت."»
ملصقات الوقت ('gauge_demo') .set (t)
وقت النوم (t)
إذا كان __name__ == '__main__':
بدء تشغيل خادم http (8002)
بينما صحيح:
طلب المعالجة (random.random ())
دعامات قياس القياس مجموعة (x)، بوصة (x)، ديسمبر (x) طرق لتعيين المقياس وزيادة المقياس وتقليل المقياس بمقدار x على التوالي.
الإخراج من http://localhost:8002/metrics سيكون:
# مساعدة python_info معلومات منصة بايثون
# اكتب مقياس معلومات python_
python_info {التنفيذ = «CPython»، major="3"، minor= «9"، مستوى التصحيح = «0"، الإصدار = «3.9.0"} 1.0
# HELP process_time عدد المرات التي يتم فيها استدعاء الوظيفة
# اكتب مقياس وقت العملية
وقت المعالجة {الوحدة = «مقياس_العرض التوضيحي"} 0.4709189918033123
يحتوي الرسم البياني على مجموعات محددة مسبقًا بأحجام مختلفة من 0.005 إلى 10. على سبيل المثال، إذا كنت ترغب في قياس/مراقبة مدة كل طلب HTTP يأتي إلى التطبيق الخاص بك، فقد تندرج كل مدة طلب ضمن أي مجموعة محددة مسبقًا. إذا كانت مدة الطلب عشرة، فإن قيمة المجموعة ذات الحجم العاشر تزداد بمقدار واحد. يحتوي الرسم البياني أيضًا على مجموع مدة جميع الطلبات وعدد الطلبات.
في المثال أدناه، نلاحظ مدة استدعاء الدالة لـ بيثون ديف: طلب المعالجة:
h = الرسم البياني ('request_duration'، 'وصف الرسم البياني'، ['الوحدة'])
HIST = h.labels ('histogram_demo')
طلب العملية (t) def:
«" «دالة وهمية تستغرق بعض الوقت."»
Hist.Observe (t)
وقت النوم (t)
الإخراج من كيرل http://localhost:8003/metrics سيكون:
# HELP request_duration وصف الرسم البياني
# رسم بياني لنوع الطلب_المدة
دلو مدة الطلب {le="0.005"، الوحدة = «الرسم البياني التجريبي"} 0.0
دلو مدة الطلب {le="0.01"، الوحدة = «الرسم البياني التجريبي"} 0.0
دلو مدة الطلب {le="0.025"، الوحدة = «الرسم البياني التجريبي"} 0.0
دلو مدة الطلب {le= «0.05"، الوحدة = «الرسم البياني التجريبي"} 2.0
دلو مدة الطلب {le="0.075"، الوحدة = «الرسم البياني التجريبي"} 3.0
دلو request_duration_{ le="0.1"، الوحدة = «الرسم البياني التجريبي"} 3.0
دلو request_duration_{ le="0.25"، الوحدة = «الرسم البياني التجريبي"} 5.0
دلو request_duration_{ le="0.5"، الوحدة = «الرسم البياني التجريبي"} 9.0
دلو مدة الطلب {le="0.75"، الوحدة = «الرسم البياني التجريبي"} 11.0
دلو مدة الطلب {le="1.0"، الوحدة = «الرسم البياني التجريبي"} 16.0
دلو request_duration_{ le="2.5 بوصة، الوحدة = «الرسم البياني التجريبي"} 16.0
دلو مدة الطلب {le="5.0"، الوحدة = «الرسم البياني التجريبي"} 16.0
دلو مدة الطلب {le="7.5"، الوحدة = «الرسم البياني التجريبي"} 16.0
دلو مدة الطلب {le="10.0"، الوحدة = «الرسم البياني التجريبي"} 16.0
دلو request_duration_{ le= «+inf»، الوحدة = «الرسم البياني التجريبي"} 16.0
عدد مدة_الطلب {module= «الرسم البياني التجريبي"} 16.0
مجموع مدة الطلب {module= «الرسم البياني التجريبي"} 7.188765686771258
# طلب المساعدة _المدة_التي تم إنشاؤها وصف الرسم البياني
# اكتب الطلب_المدة_المقياس الذي تم إنشاؤه
مدة الطلب الذي تم إنشاؤه {module= «الرسم البياني التوضيحي"} 1.60620555290144e+09
الملخص مشابه جدًا للرسم البياني، إلا أنه لا يخزن معلومات المجموعة ولكنه يحتوي فقط على مجموع الملاحظات وعدد الملاحظات الإجمالية.
في المثال أدناه، نلاحظ مدة استدعاء دالة لـ python def:
s = الملخص ('request_processing_seconds'، 'الوقت المنقضي\
طلب المعالجة '، [' الوحدة '])
SUMM = s.labels ('pymo')
@SUMM .time ()
طلب العملية (t) المعرّف:
«" «دالة وهمية تستغرق بعض الوقت."»
وقت النوم (t)
الإخراج من كيرل http://localhost:8004/metrics سيكون:
# طلب المساعدة - المعالجة - الثواني - الوقت المستغرق في معالجة الطلب
# اكتب ملخص الطلب_المعالجة_والثواني
عدد ثوان معالجة الطلبات {module= «pymo"} 20.0
مجموع ثوان المعالجة {module= «pymo"} 8.590708531
# طلب المساعدة _معالجة_الثوان_التي تم إنشاؤها | الوقت المستغرق في معالجة الطلب
# اكتب الطلب_المعالجة_الثانية_المقياس الذي تم إنشاؤه
عدد ثوان المعالجة التي تم إنشاؤها {module= «pymo"} 1.606206054827252e+09
لقد رأينا حتى الآن الأنواع المختلفة من المقاييس وكيفية إنشائها. الآن دعونا نرى كيفية تكوين بروميثيوس لمراقبة المقاييس التي قمنا بتطويرها. يستخدم بروميثيوس ملف YAML لتعريف التكوين.
بروميثيوس.yaml
عالمي:
الفاصل الزمني للخردة: 15 ثانية
فترة التقييم: 15 ثانية
مهلة الخردة: 10 ثوانٍ
تكوينات scrape_:
- اسم الوظيفة: 'بروميثيوس_ديمو'
التكوينات الثابتة:
- الأهداف: ['المضيف المحلي: 8001'، 'المضيف المحلي: 8002'، 'المضيف المحلي: 8003'، 'المضيف المحلي: 8004']
أقسام التكوين الأساسية الأربعة المستخدمة في معظم الحالات هي:
ستار xvfz بروميثيوس-*.tar.gz
. /بروميثيوس --config.file=proemtheus.yaml
عامل ميناء
دوكر ران\
-ص 9090:9090\
-v /path/to/prometheus.yml:/etc/بروميثيوس/بروميثيوس.yml\
بروم/بروميثيوس
الوصول إلى واجهة المستخدم
http://localhost:9090/graphيمكنك مشاهدة بيانات السلاسل الزمنية كرسومات بيانية أيضًا.
إذا كنت بحاجة إلى تنبيه على function_calls_total > 100، فأنت بحاجة إلى إعداد قواعد التنبيه ومديري التنبيهات. يستخدم بروميثيوس ملف YAML آخر لتعريف قواعد التنبيه.
قواعد التنبيه. yaml
المجموعات:
- الاسم: مثال
القواعد:
- تنبيه: مثال لاسم التنبيه
expr: عدد المكالمات الوظيفية_المجموع {module= «counter_demo"} > 100
لمدة: 10 ثوانٍ
ملصقات:
الخطورة: منخفضة
التعليقات التوضيحية:
ملخص: ملخص المثال
بروميثيوس.yaml
عالمي:
الفاصل الزمني للخردة: 15 ثانية
فترة التقييم: 15 ثانية
مهلة الخردة: 10 ثوانٍ
ملفات_القواعد:
- قواعد التنبيه. yml
تكوينات scrape_:
- اسم الوظيفة: 'بروميثيوس_ديمو'
التكوينات الثابتة:
- الأهداف: ['المضيف المحلي: 8001'، 'المضيف المحلي: 8002'، 'المضيف المحلي: 8003'، 'المضيف المحلي: 8004']
بمجرد إعادة تشغيل Prometheus بالتكوين الجديد، يمكنك رؤية التنبيهات المدرجة في قسم التنبيه بواجهة مستخدم Prometheus. لكن هذه التنبيهات تصل إلى قناة Slack أو البريد الإلكتروني الخاص بك فقط في حالة إعداد وتكوين مدير التنبيه.