Το Monit παρακολουθεί ότι οι υπηρεσίες τρέχουν και τις επαναφέρει όταν πέφτουν. Το πρώτο δίκαιο ερώτημα: γιατί, τη στιγμή που το systemd κάνει το ίδιο με μία γραμμή Restart=always;
Η απάντηση καθορίζει όλη τη διάταξη. Το systemd βλέπει ότι μια διεργασία τερμάτισε και την ξεκινά ξανά. Δεν ξέρει αν η υπηρεσία απαντά σε αιτήματα. Ένα PHP-FPM που έφτασε το όριο διεργασιών του είναι ζωντανό και υγιές όσον αφορά το systemd, ενώ ο ιστότοπος επιστρέφει 502. Μια MySQL που έμεινε από χώρο συνεχίζει να τρέχει ως διεργασία και δεν εκτελεί ούτε ένα ερώτημα. Το Monit ελέγχει όχι το γεγονός ότι μια διεργασία υπάρχει αλλά τη συμπεριφορά της: αν απαντά η θύρα, τι επιστρέφει ένα αίτημα HTTP, πόση μνήμη χρησιμοποιείται.
Εξ ου και ο κανόνας: αφήστε το systemd ως έχει και προσθέστε το Monit για τους λειτουργικούς ελέγχους. Δεν έχει νόημα να διπλασιάσετε την επανεκκίνηση μιας διεργασίας που κατέρρευσε.
Ρύθμιση
sudo apt install monit
Το κύριο αρχείο είναι το /etc/monit/monitrc· οι δικοί σας έλεγχοι πάνε ως ξεχωριστά αρχεία στο /etc/monit/conf.d/. Το συνηθισμένο άνοιγμα:
set daemon 60
set logfile /var/log/monit.log
set mailserver localhost
set alert admin@example.com
Η δειγματοληψία μία φορά το λεπτό είναι λογική ισορροπία. Πιο συχνά προσθέτει φορτίο και αυξάνει τον κίνδυνο ψευδούς επανεκκίνησης για μια καθυστέρηση ενός δευτερολέπτου.
Η διεπαφή ιστού: μόνο τοπικά
Το Monit έχει ενσωματωμένη σελίδα ιστού, και συνήθως ενεργοποιείται περίπου όπως τη δείχνει ο πρώτος οδηγός που θα βρείτε — σε όλες τις διευθύνσεις. Το αποτέλεσμα είναι ένας πίνακας ελέγχου για τις υπηρεσίες του διακομιστή, προσβάσιμος από το διαδίκτυο. Η σωστή παραλλαγή:
set httpd port 2812 and
use address localhost
allow localhost
allow admin:'a-long-password'
Η πρόσβαση από έξω γίνεται μέσω σήραγγας SSH:
ssh -L 2812:localhost:2812 user@203.0.113.25
Μετά από αυτό η σελίδα ανοίγει στον δικό σας υπολογιστή στο localhost:2812 και τίποτα δεν βλέπει προς τα έξω.
Έλεγχοι που έχουν νόημα
Ο διακομιστής ιστού — όχι με το γεγονός μιας διεργασίας αλλά με την απάντησή του:
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
Τρεις γραμμές εδώ μετράνε περισσότερο από τις υπόλοιπες.
Το protocol http ... status = 200 είναι ο έλεγχος για τον οποίο στήθηκαν όλα: ο διακομιστής πρέπει να επιστρέφει σελίδα και όχι απλώς να κρατά μια θύρα ανοιχτή.
Το for 3 cycles σημαίνει μην αντιδράς σε μία μεμονωμένη αστοχία. Χωρίς αυτό το Monit θα επανεκκινήσει την υπηρεσία για μία αργή απόκριση υπό φορτίο, πράγμα που μόνο χειροτερεύει τα πράγματα.
Το if 3 restarts within 10 cycles then unmonitor είναι υποχρεωτική γραμμή. Αν μια υπηρεσία δεν σηκώνεται λόγω σφάλματος ρύθμισης, το Monit θα την επανεκκινεί για πάντα, προσθέτοντας φορτίο και γεμίζοντας τα αρχεία. Αυτή η γραμμή σημαίνει: τρεις αποτυχημένες προσπάθειες, σταμάτα και άφησε μήνυμα. Αυτό που χρειάζεται στη συνέχεια είναι άνθρωπος· ο αυτοματισμός δεν βοηθά πια.
Ο χώρος στον δίσκο ελέγχεται χωρίς κανέναν αυτοματισμό, απλώς ως ειδοποίηση:
check filesystem rootfs with path /
if space usage > 85% then alert
if inode usage > 85% then alert
Η γραμμή για τα inodes χρειάζεται ξεχωριστά: εξαντλούνται ανεξάρτητα από τον χώρο, και χωρίς αυτήν η κατάσταση περνά απαρατήρητη.
Έλεγχος της ρύθμισης
sudo monit -t
sudo systemctl reload monit
sudo monit summary
sudo monit status
Το monit -t ελέγχει τη σύνταξη πριν αυτή εφαρμοστεί. Το monit summary δίνει σύντομο πίνακα καταστάσεων — το σημείο από όπου ξεκινάτε την εξέταση οποιουδήποτε προβλήματος.
Και ελέγξτε ότι στέλνεται το ταχυδρομείο. Το Monit αναφέρει συμβάντα με μήνυμα, και αν η παράδοση δεν είναι ρυθμισμένη δεν θα υπάρξει καμία ειδοποίηση: η υπηρεσία θα επανεκκινηθεί και δεν θα το μάθετε — ενώ οι επαναλαμβανόμενες επανεκκινήσεις είναι ακριβώς το κύριο σήμα. Φαίνονται και στο αρχείο: /var/log/monit.log.
Τι δεν κάνει το Monit
Δεν αφαιρεί την αιτία. Η επανεκκίνηση είναι αναβολή, και μια υπηρεσία που επανεκκινείται συνεχώς σημαίνει ότι κάπου λείπει μνήμη, ή τελειώνει ο χώρος, ή η εφαρμογή διαρρέει. Η αξία του εργαλείου δεν είναι στην επανεκκίνηση αλλά στον μετρητή: τρεις επανεκκινήσεις του nginx σε μία μέρα είναι διάγνωση που αλλιώς θα περνούσε απαρατήρητη, επειδή ο ιστότοπος δούλευε όλη την ώρα.
Άρα αυτό που πρέπει να κοιτάτε δεν είναι η τρέχουσα κατάσταση — είναι σχεδόν πάντα πράσινη — αλλά το ιστορικό: πόσες φορές την περασμένη εβδομάδα κάτι ξανασηκώθηκε από μόνο του. Πώς μοιάζει αυτό σε μία σελίδα το δείχνει η επίδειξη παρακάτω.