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ä.