إلى الخلف
مدينة الحندية
جدول المحتوى

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

قبل الخوض في التفاصيل الدقيقة لبروميثيوس، يجب أن نناقش بعض المصطلحات المهمة:

  • متري: رقم يحمل اسمًا وقياسه له معنى. على سبيل المثال: «استخدام وحدة المعالجة المركزية = 1000 ميكرون» هو مقياس.
  • الهدف: أي تطبيق في حاويات يقوم بتصدير المقاييس عند نقطة نهاية HTTP «/metrics» بتنسيق بروميثيوس.
  • المصدّر: مكتبة/كود يحول المقاييس الحالية إلى صيغة بروميثيوس.
  • كشط: سحب المقاييس من الهدف عن طريق تقديم طلب HTTP.

عمارة بروميثيوس

يحتوي بروميثيوس على ثلاثة مكونات رئيسية:

  • الاسترجاع: هذا المكون مسؤول عن استخراج المقاييس من جميع الأهداف في فترات زمنية مكونة.
  • سلسلة زمنية DB: يخزن المقاييس المسحوبة على فترات زمنية منتظمة كبيانات متسلسلة زمنية أو كمتجه.
  • خادم HTTP: يقبل الاستعلام عبر بيانات السلاسل الزمنية كطلب HTTP ويعيد النتيجة كاستجابة HTTP. لغة الاستعلام المستخدمة هنا هي PromQL.

 

Prometheus Architecture
عمارة بروميثيوس

أنواع بروميثيوس المترية

يوفر بروميثيوس مقاييس مختلفة. من بينها، يعمل العداد والقياس والملخص والمخطط التكراري في معظم المواقف. تتمثل مهمة التطبيق في توفير المقاييس بتنسيق محدد مسبقًا يفهمه بروميثيوس. من السهل نشر هذه المقاييس من التطبيق الخاص بك باستخدام مكتبات العملاء المتوفرة. حاليًا، توجد مكتبات للغات الشائعة مثل 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
  • request_duration_bucket هي مجموعات ذات أحجام تتراوح من 0.005 إلى 10.
  • request_duration_sum هو مجموع فترات كل استدعاء دالة.
  • request_duration_count هو العدد الإجمالي لاستدعاءات الوظائف.

 

ملخص

الملخص مشابه جدًا للرسم البياني، إلا أنه لا يخزن معلومات المجموعة ولكنه يحتوي فقط على مجموع الملاحظات وعدد الملاحظات الإجمالية.

في المثال أدناه، نلاحظ مدة استدعاء دالة لـ 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']

أقسام التكوين الأساسية الأربعة المستخدمة في معظم الحالات هي:

  1. الفاصل الزمني للخردة يحدد الفترة التي يقوم فيها بروميثيوس بكشط الأهداف
  2. الفاصل الزمني للتقييم يحدد مدى تكرار تقييم بروميثيوس للقواعد المحددة في ملف القواعد.
  3. اسم_الوظيفة سيتم إضافة التعريف كتسمية إلى أي سلسلة زمنية تم استخراجها من هذا التكوين.
  4. رأهداف تحديد قائمة نقاط نهاية HTTP للبحث عن المقاييس

بدء بروميثيوس

ستار 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 أو البريد الإلكتروني الخاص بك فقط في حالة إعداد وتكوين مدير التنبيه.

لم يتم العثور على أية عناصر.

مدونات ذات صلة