Sentinela adalah pengawas sistem operasi yang sangat mudah dikonfigurasi dan dapat mengambil tindakan berdasarkan aturan yang telah dikonfigurasi sebelumnya.
Motivasi awalnya adalah membuat daemon yang akan memantau sekumpulan file log dan jika tidak ada aktivitas, matikan sistem operasi. Ini sangat berguna untuk memastikan instance EC2 saya dimatikan setelah waktu idle yang ditentukan.
Mengingat sifat modular Sentinela, Anda juga dapat memperluasnya untuk memantau lalu lintas jaringan, proses, penggunaan disk, dll. dan menjalankan tindakan apa pun seperti mengirim email, mengirim peringatan SNMP, dll.
Sentinela dikonfigurasi menggunakan file config/sentinela.cfg
, yang memungkinkan Anda mengaktifkan aturan yang akan dijalankan.
Aturan didefinisikan dalam kode python dan ditemukan di direktori rules/
. Dalam kebanyakan kasus, aturan menggunakan dua jenis modul yang berbeda: * modules/monitors/
: Membaca sumber daya setiap menit dan menyimpan statusnya. Jika diperlukan, kembalikan True
untuk memicu suatu tindakan. * modules/actions/
: Tindakan akan menjalankan perintah, mengirim email atau kode lain yang ditentukan python yang dapat Anda bayangkan.
Untuk memulai sentinela Anda perlu menjalankan: text sudo python sentinela.py
Anda dapat memantau semua tindakan sentinela dengan membaca file /var/log/sentinela.log
. File log sentinela biasa terlihat seperti ini:
[29-03-2013 11:41:20,440][INFO] Berhasil dimulai [29-03-2013 11:41:20,441][DEBUG] Aturan yang diimpor.apache_shutdown [29-03-2013 12:51:50,480][DEBUG] Sentinela masih hidup ... [29-03-2013 12:58:34,009][DEBUG] Akan menjalankan perintah "shutdown now -h".
Membuat aturan sendiri itu mudah, katakanlah kita ingin membuat aturan yang mencetak nama monitor ke file log sentinela ketika file log /var/log/apache2/access.log
tidak aktif selama 10 menit. Kodenya akan terlihat seperti ini:
1: dari modul.monitors.new_log_entries impor NewLogEntries 2: dari modul.actions.debug_print impor DebugPrint 3: 4: apache_log = NewLogEntries('/var/log/Apache2/access.log', 10) 5: debug_print = DebugPrint() 6: 7: 8: def panggilan_setiap_menit(): 9: jika apache_log.call_setiap_menit(): 10: debug_print.do(apache_log)
Aturan umum akan memiliki monitor dan tindakan, dalam hal ini NewLogEntries
dan DebugPrint
(baris 1 dan 2).
Keduanya perlu dipakai pada level modul (baris 4 dan 5) agar dapat mempertahankan status. Jika Anda membuat instance monitor atau tindakan di dalam call_every_minute
instance baru akan dibuat setiap kali dan tidak ada status yang akan disimpan.
Monitor dan tindakan dapat memiliki parameter, di baris 4 ini kita melihat bagaimana monitor NewLogEntries
mengambil dua parameter:
True
Fungsi call_every_minute
(baris 8) perlu didefinisikan agar aturan menjadi valid. Fungsi ini, sesuai dengan namanya, akan dipanggil setiap menit oleh sentinela. Anda dapat menentukan tindakan apa pun yang akan dijalankan dalam konteks ini, namun kami memutuskan untuk memanggil metode call_every_minute
monitor dan berdasarkan nilai kembaliannya, panggil tindakan dengan instance apache_log
sebagai parameter.
apache_log.call_every_minute()
akan mengembalikan True
hanya jika file yang diteruskan sebagai parameter tidak memiliki entri baru dalam 10 menit.
debug_print.do
akan mencetak nama monitor yang diteruskan sebagai parameter.
Setelah membuat aturan sendiri, Anda harus mengikuti langkah-langkah berikut untuk menjalankannya:
.py
Anda ke direktori rules/
di instalasi sentinelaconfig/sentinela.cfg
untuk menyertakan nama aturan Anda (tanpa ekstensi)Contoh aturan dapat ditemukan di direktori sentinela/rules di repositori ini.
Untuk menguji aturan baru sebelum menerapkannya, Anda dapat mengikuti langkah-langkah berikut.
Laporkan masalah dan permintaan fitur Anda di pelacak masalah Sentinela dan saya akan dengan senang hati memperbaikinya.