Monit mengawasi agar layanan tetap berjalan dan mengangkatnya kembali ketika tumbang. Pertanyaan pertama yang wajar: untuk apa, kalau systemd melakukan hal yang sama hanya dengan satu baris Restart=always?
Jawabannya menentukan seluruh susunannya. systemd melihat prosesnya berakhir lalu menjalankannya lagi. Tetapi ia tidak tahu apakah layanannya menjawab permintaan. PHP-FPM yang sudah menabrak batas jumlah prosesnya masih hidup dan sehat di mata systemd, sementara situsnya mengembalikan 502. Dan MySQL yang kehabisan disk tetap berjalan sebagai proses dan tidak menjalankan satu kueri pun. Sementara Monit tidak memeriksa keberadaan prosesnya melainkan perilakunya: apakah portnya menjawab, apa yang dikembalikan permintaan HTTP, berapa memori yang dipakai.
Dari sini muncul aturan: biarkan systemd apa adanya dan tambahkan Monit untuk pemeriksaan fungsional. Tidak ada gunanya menduplikasi pekerjaan menyalakan ulang proses yang tumbang.
Susunannya
sudo apt install monit
Berkas utamanya adalah /etc/monit/monitrc; pemeriksaan Anda sendiri masuk ke /etc/monit/conf.d/ sebagai berkas terpisah. Pembukaan yang biasa:
set daemon 60
set logfile /var/log/monit.log
set mailserver localhost
set alert admin@example.com
Memeriksa sekali per menit adalah keseimbangan yang masuk akal. Lebih sering menambah beban dan menaikkan risiko penyalaan ulang yang keliru hanya karena keterlambatan satu detik.
Antarmuka web: hanya lokal
Monit punya halaman web bawaan, dan biasanya ia dinyalakan kira-kira seperti yang ditunjukkan panduan pertama yang ditemukan — pada semua alamat. Hasilnya adalah panel kendali layanan server yang terjangkau dari internet. Varian yang benar:
set httpd port 2812 and
use address localhost
allow localhost
allow admin:'a-long-password'
Akses dari luar lewat terowongan SSH:
ssh -L 2812:localhost:2812 user@203.0.113.25
Setelah itu halamannya terbuka di komputer Anda sendiri di localhost:2812, dan tidak ada yang menghadap keluar.
Pemeriksaan yang bermakna
Server web — bukan dari keberadaan proses melainkan dari jawabannya:
check process nginx with pidfile /run/nginx.pid
start program = "/bin/systemctl start nginx"
stop program = "/bin/systemctl stop nginx"
if failed host 127.0.0.1 port 80 protocol http
request "/" status = 200
for 3 cycles then restart
if 3 restarts within 10 cycles then unmonitor
Di sini ada tiga baris yang lebih penting daripada sisanya.
protocol http ... status = 200 adalah pemeriksaan yang menjadi alasan semua ini disusun: servernya harus mengembalikan halaman, bukan sekadar menahan port tetap terbuka.
for 3 cycles berarti jangan bereaksi terhadap satu kegagalan tunggal. Tanpanya Monit akan menyalakan ulang layanan hanya karena satu jawaban lambat di bawah beban, dan itu justru memperburuk keadaan.
if 3 restarts within 10 cycles then unmonitor adalah baris yang wajib. Kalau layanannya tidak bisa naik karena kesalahan konfigurasi maka Monit akan menyalakannya ulang selamanya, menambah beban dan memenuhi log. Baris ini berkata: tiga percobaan gagal, berhenti dan tinggalkan pesan. Yang diperlukan berikutnya adalah manusia; otomatisasi sudah tidak menolong lagi.
Ruang disk diperiksa tanpa otomatisasi apa pun, hanya sebagai peringatan:
check filesystem rootfs with path /
if space usage > 85% then alert
if inode usage > 85% then alert
Baris tentang inode perlu ada tersendiri: mereka habis secara independen dari ruang, dan tanpanya situasi itu lewat tanpa disadari.
Memeriksa konfigurasi
sudo monit -t
sudo systemctl reload monit
sudo monit summary
sudo monit status
monit -t memeriksa sintaks sebelum diterapkan. Sedangkan monit summary memberi tabel status yang ringkas — tempat memulai ketika menelaah masalah apa pun.
Dan periksa juga bahwa suratnya terkirim. Monit melaporkan peristiwa lewat surel, dan kalau pengirimannya belum disetel maka tidak akan ada pemberitahuan: layanannya akan menyala ulang dan Anda tidak tahu — padahal justru penyalaan ulang yang berulang itulah sinyal utamanya. Mereka juga terlihat di log: /var/log/monit.log.
Yang tidak dilakukan Monit
Ia tidak menghilangkan penyebabnya. Penyalaan ulang adalah penundaan, dan layanan yang terus-menerus dinyalakan ulang berarti di suatu tempat memorinya kurang, atau ruangnya menipis, atau aplikasinya bocor. Dan nilai perkakas ini bukan pada penyalaan ulangnya melainkan pada pencacahnya: tiga kali nginx menyala ulang dalam sehari adalah diagnosis yang kalau tidak begitu akan lewat tanpa disadari, karena situsnya berjalan sepanjang waktu.
Jadi yang perlu dilihat bukan status saat ini — ia hampir selalu hijau — melainkan riwayatnya: sepekan terakhir berapa kali sesuatu bangkit dengan sendirinya. Bagaimana tampilannya pada satu halaman — lihat di demo bawah.