بروميثيوس هو نظام مراقبة وإنذار مفتوح المصدر، مصمم لجمع ومعالجة المقاييس من التطبيقات والبنية التحتية. يعمل بروميثيوس وفق نموذج السحب، حيث يرسل بشكل دوري طلبات HTTP لجمع البيانات من الأهداف المُعرفة. تُخزن البيانات التي تم جمعها محليًا في قاعدة بيانات مخصصة ويمكن الاستعلام عنها باستخدام لغة PromQL. بروميثيوس فعال للغاية في مراقبة الأنظمة الموزعة ومُحسّن للعمل مع التقنيات الحديثة مثل Docker و Kubernetes.
صورة ١: بنية بروميثيوس العامة، بما في ذلك المكونات الرئيسية مثل مكتبات العميل، المصدرين، اكتشاف الخدمة، الكشط، التخزين، لوحات المعلومات، قواعد التسجيل والتنبيهات، إدارة التنبيهات، والتخزين طويل الأمد.
عادةً، لا تُنتج التطبيقات المقاييس تلقائيًا، بل يحتاج المطورون إلى دمج أدوات القياس في التعليمات البرمجية لإنشائها. تُسهّل مكتبات العميل هذه العملية، فباستخدام بضعة أسطر من التعليمات البرمجية، يمكنك تعريف المقياس ودمج القياس مباشرةً في التعليمات البرمجية التي تتحكم بها. يُطلق على هذا القياس المباشر. يوفر بروميثيوس مكتبات عميل للغات شائعة مثل Go و Python و Java/JVM و Ruby و Rust. بالإضافة إلى ذلك، هناك العديد من مكتبات الجهات الخارجية للغات أخرى مثل C#/.Net و Node.js و Haskell و Erlang.
لا يمكنك دائمًا الوصول إلى التعليمات البرمجية للبرنامج لإضافة المزيد من التعليمات البرمجية، أي أنه لا يمكنك إجراء قياس مباشر. المصدر (Exporter) هو برنامج صغير مثبت مع التطبيق الذي تريد الحصول على مقاييس منه. يستقبل الطلبات من بروميثيوس، ويجمع البيانات من التطبيق، ويحولها إلى تنسيق يمكن لبروميثيوس فهمه، ويعيد النتائج. يمكنك تصور المصدر كمحول بيانات بين التطبيق وبروميثيوس. بخلاف التكامل المباشر باستخدام مكتبات العميل، تستخدم المصدرين نوعًا مختلفًا من القياس يسمى مجمعات مخصصة أو ConstMetrics.
بعد دمج بروميثيوس في التطبيقات وتكوين المصدرين، يحتاج بروميثيوس إلى معرفة موقع التطبيقات والمصدرين بدقة لمراقبتها. في بيئة ديناميكية مثل السحابة، يمكن أن تتغير الخدمة باستمرار (يتم إنشاؤها أو حذفها)، لذلك لا يمكنك توفير قائمة بالتطبيقات والمصدرين مرة واحدة فقط. ستصبح هذه القائمة قديمة بسرعة، وهذا هو سبب حاجتنا إلى اكتشاف الخدمة. يتكامل بروميثيوس مع آليات اكتشاف الخدمة الشائعة مثل Kubernetes و EC2 و Consul، مما يساعده على العثور تلقائيًا على التطبيقات التي تحتاج إلى المراقبة. إذا لم يستخدم نظامك هذه الخدمات، يوفر بروميثيوس أيضًا طريقة تكامل عامة للأنظمة الأخرى.
صورة ٢: يسمح اكتشاف الخدمة في بروميثيوس بالكشف التلقائي عن الخدمات ومراقبتها في بيئة ديناميكية، مما يضمن دقة جمع البيانات وفعاليتها دائمًا.
بعد أن يعثر بروميثيوس على قائمة الأهداف التي يجب مراقبتها من خلال اكتشاف الخدمة وإعادة التسمية، سيحتاج إلى الحصول على بيانات من تلك الأهداف. يقوم بروميثيوس بذلك عن طريق إرسال طلبات HTTP، تسمى الكشط، لجمع المقاييس. عند جمع البيانات، يسجل بروميثيوس أيضًا بعض المعلومات المفيدة مثل: هل كان الكشط ناجحًا؟ كم من الوقت استغرق إكمال الكشط؟ يتم تكوين الكشط ليتم بشكل منتظم، عادةً كل ١٠ إلى ٦٠ ثانية لكل هدف. يستخدم بروميثيوس نموذج السحب، حيث يقوم بجمع البيانات بنشاط من أهداف المراقبة (على عكس نموذج الدفع).
يخزن بروميثيوس البيانات مباشرة على خادمه، باستخدام قاعدة بيانات مخصصة. بدلاً من محاولة بناء نظام تخزين موزع معقد، اختار بروميثيوس التخزين المحلي لجعل النظام أسهل في التشغيل وأكثر موثوقية. يمكن لإصدار Prometheus 2.0 الحالي جمع ملايين عينات البيانات في الثانية، وهو قوي بما يكفي لتتبع آلاف الأجهزة بخادم Prometheus واحد فقط. يستخدم بروميثيوس خوارزمية ضغط قوية، بمعدل ضغط يصل إلى ١.٣ بايت لكل عينة بيانات فعلية. يوصى باستخدام SSD لزيادة السرعة، ولكن هذا ليس إلزاميًا. يخزن بروميثيوس البيانات فقط على الخادم المحلي، لذلك أنت مقيد بسعة محرك الأقراص في ذلك الجهاز. قد يكون هذا صعبًا إذا كنت ترغب في تخزين البيانات لفترة طويلة. لا يمتلك بروميثيوس حلًا لتخزين البيانات على أجهزة متعددة (تخزين عنقودي). ومع ذلك، فإنه يحتوي على واجهات برمجة تطبيقات للقراءة عن بُعد والكتابة عن بُعد تسمح بالاتصال بأنظمة التخزين الخارجية. بفضل ذلك، يمكنك الاستعلام عن البيانات من كل من البيانات المحلية والبيانات عن بُعد دون الحاجة إلى تغيير طريقة الاستعلام.