Sentinela เป็นหน่วยงานเฝ้าระวังระบบปฏิบัติการที่สามารถกำหนดค่าได้สูง ซึ่งสามารถดำเนินการตามกฎที่กำหนดไว้ล่วงหน้าได้
แรงจูงใจเริ่มแรกคือการสร้าง daemon ที่จะตรวจสอบชุดของไฟล์บันทึก และหากไม่มีกิจกรรมใด ๆ อยู่ จะปิดระบบปฏิบัติการ สิ่งนี้มีประโยชน์อย่างมากในการทำให้แน่ใจว่าอินสแตนซ์ ec2 ของฉันถูกปิดหลังจากเวลาว่างที่ระบุ
ด้วยลักษณะโมดูลาร์ของ Sentinela คุณยังสามารถขยายเพื่อตรวจสอบการรับส่งข้อมูลเครือข่าย กระบวนการ การใช้ดิสก์ ฯลฯ และดำเนินการใดๆ เช่น การส่งอีเมล ส่งการแจ้งเตือน SNMP เป็นต้น
Sentinela กำหนดค่าโดยใช้ไฟล์ config/sentinela.cfg
ซึ่งช่วยให้คุณสามารถเปิดใช้งานกฎที่จะเรียกใช้ได้
กฎถูกกำหนดไว้ในโค้ด Python และพบได้ในไดเร็กทอรี rules/
ในกรณีส่วนใหญ่ กฎจะใช้โมดูลสองประเภทที่แตกต่างกัน: * modules/monitors/
: ทุกๆ นาทีอ่านจากทรัพยากรและจัดเก็บสถานะ เมื่อจำเป็นต้องคืนค่า True
เพื่อทริกเกอร์การดำเนินการ * modules/actions/
: Actions จะเรียกใช้คำสั่ง ส่งอีเมล หรือโค้ดที่กำหนดโดย Python อื่น ๆ ที่คุณสามารถจินตนาการได้
ในการเริ่ม Sentinela คุณต้องเรียกใช้: text sudo python sentinela.py
คุณสามารถตรวจสอบการกระทำของ Sentinela ทั้งหมดได้โดยการอ่านไฟล์ /var/log/sentinela.log
ไฟล์บันทึก Sentinela ปกติจะมีลักษณะดังนี้:
[2013-03-29 11:41:20,440][INFO] เริ่มสำเร็จแล้ว [2013-03-29 11:41:20,441][DEBUG] นำเข้ากฎ apache_shutdown [2013-03-29 12:51:50,480][DEBUG] Sentinela ยังมีชีวิตอยู่ - [2013-03-29 12:58:34,009][DEBUG] กำลังดำเนินการคำสั่ง "ปิดเครื่องทันที -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: def call_ทุกนาที(): 9: ถ้า apache_log.call_every_minute(): 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 เรายินดีเป็นอย่างยิ่งที่จะแก้ไขปัญหาเหล่านั้น