Sentinela عبارة عن هيئة مراقبة لنظام التشغيل قابلة للتكوين بدرجة كبيرة ويمكنها اتخاذ الإجراءات بناءً على القواعد التي تم تكوينها مسبقًا.
كان الدافع الأولي هو إنشاء برنامج خفي يراقب مجموعة من ملفات السجل وفي حالة عدم وجود أي نشاط، يتم إيقاف تشغيل نظام التشغيل. كان هذا مفيدًا للغاية للتأكد من إيقاف تشغيل مثيلات ec2 الخاصة بي بعد وقت خمول محدد.
نظرًا لطبيعة Sentinela المعيارية، يمكنك أيضًا توسيعها لمراقبة حركة مرور الشبكة والعمليات واستخدام القرص وما إلى ذلك وتشغيل أي إجراءات مثل إرسال بريد إلكتروني وإرسال تنبيه SNMP وما إلى ذلك.
تم تكوين Sentinela باستخدام ملف config/sentinela.cfg
، والذي يسمح لك بتمكين القواعد التي سيتم تشغيلها.
يتم تعريف القواعد في كود بايثون وتوجد في الدليل rules/
. في معظم الحالات، تستخدم القواعد نوعين مختلفين من الوحدات: * modules/monitors/
: القراءة من أحد الموارد مرة كل دقيقة وتخزين حالتها. عند الحاجة، قم بإرجاع True
لبدء الإجراء. * modules/actions/
: ستقوم الإجراءات بتشغيل أمر أو إرسال بريد إلكتروني أو أي كود آخر محدد في بايثون يمكنك تخيله.
لبدء Sentinela، تحتاج إلى تشغيل: text sudo python sentinela.py
يمكنك مراقبة جميع إجراءات الحارس من خلال قراءة الملف /var/log/sentinela.log
. يبدو ملف سجل الحارس العادي كما يلي:
[2013-03-29 11:41:20,440] [معلومة] تم البدء بنجاح [2013-03-29 11:41:20،441] [DEBUG] القواعد المستوردة.Apache_shutdown [2013-03-29 12:51:50,480] [DEBUG] سينتينيلا على قيد الحياة ... [2013-03-29 12:58:34,009] [DEBUG] ذاهب لتنفيذ الأمر "shutdown now -h".
يعد إنشاء القواعد الخاصة بك أمرًا سهلاً، فلنفترض أننا نريد إنشاء قاعدة تطبع اسم الشاشة إلى ملف سجل Sentinela عندما يكون ملف السجل /var/log/apache2/access.log
غير نشط خلال 10 دقائق. سيبدو الكود كالتالي:
1: من Modules.monitors.new_log_entries قم باستيراد NewLogEntries 2: من Modules.actions.debug_print قم باستيراد DebugPrint 3: 4: apache_log = NewLogEntries('/var/log/Apache2/access.log', 10) 5: debug_print = DebugPrint() 6: 7: 8: قم بإلغاء call_every_دقيقة(): 9: إذا كان apache_log.call_every_دقيقة (): 10: debug_print.do(Apache_log)
ستحتوي القواعد العامة على شاشة وإجراء، وفي هذه الحالة تكون NewLogEntries
و DebugPrint
(السطران 1 و2).
يجب إنشاء كلاهما على مستوى الوحدة (السطران 4 و 5) حتى يتمكنا من الحفاظ على الحالة. إذا قمت بإنشاء مثيلات الشاشة أو الإجراء الخاصة بك داخل call_every_minute
فسيتم إنشاء مثيل جديد في كل مرة ولن يتم الاحتفاظ بأي حالة.
يمكن أن تحتوي المراقبات والإجراءات على معلمات، في هذا السطر 4 نرى كيف تأخذ شاشة NewLogEntries
معلمتين:
True
يجب تعريف وظيفة call_every_minute
(السطر 8) حتى تكون القاعدة صالحة. هذه الوظيفة، كما يشير اسمها، سيتم استدعاؤها كل دقيقة بواسطة Sentinela. يمكنك تحديد أي إجراءات سيتم تشغيلها في هذا السياق، لكننا قررنا استدعاء طريقة call_every_minute
الخاصة بالشاشة واستنادًا إلى قيمتها المرجعة، استدعاء الإجراء باستخدام مثيل apache_log
كمعلمة.
سيعيد apache_log.call_every_minute()
True
فقط إذا كان الملف الذي تم تمريره كمعلمة لا يحتوي على أي إدخالات جديدة خلال 10 دقائق.
سيقوم debug_print.do
بطباعة اسم الشاشة التي تم تمريرها كمعلمة.
بمجرد إنشاء القاعدة الخاصة بك، سيتعين عليك اتباع الخطوات التالية لتشغيلها:
.py
الخاص بك إلى الدليل rules/
في تثبيت Sentinelaconfig/sentinela.cfg
ليشمل اسم القاعدة الخاصة بك (بدون الامتداد)يمكن العثور على القواعد النموذجية في دليل Sentinela/rules الموجود في هذا المستودع.
من أجل اختبار قواعدك الجديدة قبل نشرها، يمكنك اتباع الخطوات التالية.
قم بالإبلاغ عن مشكلاتك وطلبات الميزات الخاصة بك في أداة تعقب المشكلات في Sentinela وسأكون سعيدًا جدًا بإصلاحها.