A Monit figyeli, hogy a szolgáltatások futnak-e, és felhozza őket, ha leállnak. Az első helyénvaló kérdés: minek ez, ha a systemd ugyanezt tudja egyetlen Restart=always sorral?

A válasz meghatározza az egész beállítást. A systemd látja, hogy a folyamat véget ért, és újraindítja. Azt nem tudja, hogy a szolgáltatás válaszol-e a kérésekre. A folyamatkorlátba ütközött PHP-FPM a systemd számára él és virul, a webhely pedig eközben 502-t ad vissza. A helyhiányba futott MySQL folyamatként továbbra is fut, és egyetlen lekérdezést sem hajt végre. A Monit nem a folyamat létét ellenőrzi, hanem a viselkedését: válaszol-e a port, mit ad vissza egy HTTP-kérés, mennyi memória van lefoglalva.

Innen a szabály: a systemd marad úgy, ahogy van, a Monitot pedig a funkcionális ellenőrzésekért adjuk hozzá. A leállt folyamat újraindítását megkettőzni értelmetlen.

Beállítás

sudo apt install monit

A fő fájl az /etc/monit/monitrc, a saját ellenőrzéseket külön fájlokként az /etc/monit/conf.d/ könyvtárba tesszük. A kezdet a szokásos:

set daemon 60
set logfile /var/log/monit.log
set mailserver localhost
set alert admin@example.com

A percenkénti lekérdezés észszerű egyensúly. A sűrűbb terhelést ad hozzá, és növeli a másodperces késés miatti téves újraindítás kockázatát.

Webfelület: csak helyben

A Monitnak van beépített weboldala, és alapból nagyjából úgy kapcsolják be, ahogy az első fellelt útmutató mutatja — minden címen. Az eredmény a szerver szolgáltatásainak vezérlőpanelje, elérhetően az internetről. A helyes változat:

set httpd port 2812 and
    use address localhost
    allow localhost
    allow admin:'hosszu-jelszo'

A kívülről való hozzáférés SSH-alagúton keresztül:

ssh -L 2812:localhost:2812 user@203.0.113.25

Ezután az oldal a saját gépeden nyílik meg a localhost:2812 címen, kifelé pedig semmi nem áll ki.

Ellenőrzések, amelyeknek van értelmük

A webszerver — nem a folyamat léte alapján, hanem a válasz alapján:

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

Három sor itt fontosabb a többinél.

protocol http ... status = 200 — éppen ez az az ellenőrzés, amiért az egészet elkezdtük: a szervernek oldalt kell visszaadnia, nem csak nyitva tartani egy portot.

for 3 cycles — ne reagálj egyetlen hibára. Enélkül a Monit egyetlen lassú válasz miatt indítja újra a szolgáltatást terhelés alatt, amivel csak ront a helyzeten.

if 3 restarts within 10 cycles then unmonitor — kötelező sor. Ha a szolgáltatás konfigurációs hiba miatt nem áll fel, a Monit a végtelenségig újraindítja, terhelést ad hozzá és megtölti a naplókat. Ez a sor azt jelenti: három sikertelen kísérlet — állj le, és hagyj üzenetet. Onnantól ember kell, az automatika már nem segít.

A lemezterületet mindenféle automatika nélkül, egyszerű üzenettel ellenőrizzük:

check filesystem rootfs with path /
    if space usage > 85% then alert
    if inode usage > 85% then alert

Az inode-okról szóló sor külön kell: azok a helytől függetlenül fogynak el, és nélküle ez a helyzet észrevétlen marad.

A konfiguráció ellenőrzése

sudo monit -t
sudo systemctl reload monit
sudo monit summary
sudo monit status

A monit -t alkalmazás előtt ellenőrzi a szintaxist. A monit summary rövid állapottáblát ad — bármely probléma elemzését ezzel érdemes kezdeni.

És ellenőrizd a levélküldést. A Monit levélben jelzi az eseményeket, és ha a küldés nincs beállítva, nem lesz értesítés — a szolgáltatás újraindul, te pedig nem tudsz róla, márpedig éppen az ismétlődő újraindítások jelentik a fő jelzést. Ezek a naplóban is látszanak: /var/log/monit.log.

Amit a Monit nem tesz meg

Nem szünteti meg az okot. Az újraindítás haladék, és egy folyamatosan újraindított szolgáltatás azt jelenti, hogy valahol nincs elég memória, fogy a hely, vagy szivárog az alkalmazás. Az eszköz értéke nem magában az újraindításban van, hanem a számlálóban: az nginx napi három újraindítása olyan diagnózis, amely másképp észrevétlen maradt volna, mert a webhely mindvégig működött.

Ezért nem az aktuális állapotot kell nézni (az szinte mindig zöld), hanem az előzményeket: hányszor állt fel magától valami egy hét alatt. Hogy néz ki ez egyetlen oldalon, azt az alábbi bemutató mutatja.