Monit valvoo, että palvelut ovat käynnissä, ja nostaa ne pystyyn kun ne kaatuvat. Ensimmäinen paikallaan oleva kysymys: miksi tämä, kun systemd osaa saman yhdellä rivillä Restart=always?

Vastaus määrää koko kokoonpanon. systemd näkee, että prosessi päättyi, ja käynnistää sen uudelleen. Se ei tiedä, vastaako palvelu pyyntöihin. Prosessirajaan törmännyt PHP-FPM on systemd:lle elossa ja terve, kun taas sivusto palauttaa 502. MySQL, jolta loppui tila, on yhä olemassa prosessina eikä suorita yhtään kyselyä. Monit ei tarkista prosessin olemassaoloa vaan sen käyttäytymistä: vastaako portti, mitä HTTP-pyyntö palauttaa, paljonko muistia on varattu.

Siitä sääntö: jätä systemd sellaisenaan ja lisää Monit toiminnallisia tarkistuksia varten. Kaatuneen prosessin uudelleenkäynnistyksen kahdentaminen on hyödytöntä.

Kokoonpano

sudo apt install monit

Päätiedosto on /etc/monit/monitrc, ja omat tarkistukset laitetaan erillisinä tiedostoina hakemistoon /etc/monit/conf.d/. Alku on tavanomainen:

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

Kysely kerran minuutissa on järkevä tasapaino. Tiheämpi lisää kuormaa ja nostaa riskiä virheellisestä uudelleenkäynnistyksestä sekunnin viiveen takia.

Verkkokäyttöliittymä: vain paikallisesti

Monitissa on sisäänrakennettu verkkosivu, ja oletuksena se kytketään päälle suunnilleen niin kuin ensimmäinen vastaan tuleva opas näyttää — kaikissa osoitteissa. Tuloksena on palvelimen palveluiden hallintapaneeli, joka on tavoitettavissa internetistä. Oikea vaihtoehto:

set httpd port 2812 and
    use address localhost
    allow localhost
    allow admin:'pitka-salasana'

Pääsy ulkoa hoituu SSH-tunnelilla:

ssh -L 2812:localhost:2812 user@203.0.113.25

Sen jälkeen sivu avautuu omalla koneella osoitteessa localhost:2812, eikä ulospäin näy mitään.

Tarkistukset joissa on järkeä

Verkkopalvelin — ei prosessin olemassaolon vaan vastauksen perusteella:

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

Kolme riviä on tässä muita tärkeämpiä.

protocol http ... status = 200 — juuri se tarkistus, jonka vuoksi koko asiaan ryhdyttiin: palvelimen on palautettava sivu, ei vain pidettävä porttia auki.

for 3 cycles — älä reagoi yksittäiseen häiriöön. Ilman sitä Monit käynnistää palvelun uudelleen yhden hitaan vastauksen takia kuormituksen alla, mikä vain pahentaa tilannetta.

if 3 restarts within 10 cycles then unmonitor — pakollinen rivi. Jos palvelu ei nouse asetusvirheen takia, Monit käynnistää sitä loputtomiin, lisää kuormaa ja täyttää lokit. Rivi tarkoittaa: kolme epäonnistunutta yritystä — lopeta ja jätä viesti. Sen jälkeen tarvitaan ihminen, automatiikka ei enää auta.

Levytila tarkistetaan täysin ilman automatiikkaa, pelkällä viestillä:

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

Inode-rivi tarvitaan erikseen: ne loppuvat tilasta riippumatta, ja ilman sitä tuo tilanne jää huomaamatta.

Asetusten tarkistus

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

monit -t tarkistaa syntaksin ennen käyttöönottoa. monit summary antaa lyhyen tilataulukon — siitä kannattaa aloittaa minkä tahansa ongelman selvittäminen.

Tarkista myös sähköpostin lähetys. Monit ilmoittaa tapahtumista kirjeellä, ja jos lähetystä ei ole asetettu, ilmoitusta ei tule — palvelu käynnistyy uudelleen, sinä et saa siitä tietää, ja juuri toistuvat uudelleenkäynnistykset ovat pääsignaali. Ne näkyvät myös lokissa: /var/log/monit.log.

Mitä Monit ei tee

Se ei poista syytä. Uudelleenkäynnistys on lykkäys, ja jatkuvasti uudelleenkäynnistettävä palvelu tarkoittaa, että jossain ei riitä muisti, tila loppuu tai sovellus vuotaa. Työkalun arvo ei ole uudelleenkäynnistyksessä vaan laskurissa: kolme nginxin uudelleenkäynnistystä vuorokaudessa on diagnoosi, joka muuten olisi jäänyt huomaamatta, koska sivusto toimi koko ajan.

Siksi katsoa pitää historiaa eikä nykytilaa (joka on lähes aina vihreä): kuinka monta kertaa viikon aikana jokin on noussut itsestään. Miltä se näyttää yhdellä sivulla, näkyy alla olevassa esittelyssä.