Další příklady konfigurace hlídání služeb
Hlídání např. webového serveru se nemusí omezit na pouhou kontrolu, zdali server odpovídá na portu 80, popřípadě 443. Je možné si vyžádat a prověřit i konkrétní URL na konkrétní doméně, jak je naznačeno níže:
check process apache with pidfile /var/run/apache2.pid start "/etc/init.d/apache2 start" stop "/etc/init.d/apache2 stop" if failed host www.domena.tld port 80 protocol http and request "/doku.php" with timeout 15 seconds then restart if cpu > 60% for 2 cycles then alert if cpu > 80% for 5 cycles then restart if totalmem > 600.0 MB for 5 cycles then restart if children > 250 then restart if 3 restarts within 5 cycles then timeout group lamp
Jednotlivé služby je možné seskupovat do celků, se kterými se pak dá zacházet najednou, tzn. provést restart, zastavit služby, vypnout či zapnout jejich hlídání atd. Této vlastnosti využijete především při práci s konzolovým obslužným nástrojem. Službu zařadíte do skupiny pomocí direktivy group
. V příkladu výše je hlídaný Apache členem skupiny „lamp“.
Monit umožňuje sledovat i jednotlivé konfigurační soubory, umí je přiřadit ke konkrétní službě a umí dokonce reagovat na jejich změny:
check process apache with pidfile /var/run/apache2.pid start "/etc/init.d/apache2 start" stop "/etc/init.d/apache2 stop" [...] group server depends on httpd.conf check file httpd.conf with path /etc/apache/httpd.conf if changed checksum then exec "/usr/sbin/apache2ctl graceful"
Zde je na změnu httpd.conf
navázán automatický restart Apache. Je to samozřejmě pouze příklad, v praxi bych se asi k něčemu takovému neuchyloval, abych pak náhodou při nějaké rozsáhlejší změně konfiguračních souborů uprostřed práce nezjistil, že mi Monit na pozadí restartoval Apache, který se samozřejmě kvůli chybě v syntaxi konfigurace znovu nespustil.
V tomto příkladu je však patrná ještě jedna direktiva, a sice direktiva závislosti, tedy „depends on
“. Tímto způsobem je možné vytvářet mezi jednotlivými hlídanými službami závislostní vazby, které pak Monit při všech operacích bere v úvahu.
Monitorování vzdálených systémů a služeb
Pomocí Monitu lze však hlídat nejenom lokálně běžící služby, ale také vzdálené služby a počítače v síti. Můžete tak z jednoho místa monitorovat stav všech svých serverů. Jednoduchý příklad hlídání vzdáleného serveru následuje:
check host domena.tld with address domena.tld if failed icmp type echo count 3 with timeout 15 seconds for 5 cycles then alert if failed port 25 proto smtp for 5 cycles then alert if failed port 80 proto http for 5 cycles then alert if failed port 22 proto ssh for 5 cycles then alert
Základem pro monitorování vzdálených serverů je jejich dostupnost na síti, což lze testovat prostřednictvím protokolu ICMP (viz druhý řádek příkladu). Zde, pokud na ping vzdálený server neodpoví během pěti cyklů Monitu, zašle se o tom upozornění správci. Hlídání je pak nastaveno tak, že se v každém cyklu zasílají celkem tři ICMP pakety a na odpověď se čeká po dobu patnácti sekund.
Hlídání dalších služeb pak následuje (řádky 3-5). V tomto případě se jedná o testování fungování příslušného protokolu, nikoliv tedy o pouhý test TCP spojení. Monit podporuje celou řadu protokolů, viz tato část oficiální dokumentace.
Webové rozhraní Monitu
Stav služeb a jejich správu je možné realizovat nejenom prostřednictvím konzolového nástroje (viz dále), ale také pohodlně pomocí webového rozhraní. V případě Monitu není třeba používat webový server k jeho zobrazení, ten si Monit zajišťuje sám, stačí tedy toto rozhraní pouze nakonfigurovat. Nastavení webového rozhraní může vypadat například takto:
set httpd port 2812 and ssl enable pemfile /etc/cert/server.pem use address localhost allow localhost allow admin:monit
Toto nastavení využívá SSL s certifikátem umístěným v /etc/cert/server.pem
. Webový server bude v tomto případě Monitu naslouchat pouze na localhostu (viz čtvrtý řádek), bude také povolovat spojení pouze z localhostu (pátý řádek) a bude vyžadovat HTTP autentzaci s uživatelským jménem „admin“ a heslem „monit“ (doporučuji změnit na něco složitějšího a ujistit se, že soubor s konfigurací Monitu nepřečte obyčejný uživatel na serveru).
Abyste získali představu, jak toto rozhraní vypadá, podívejte se na následující snímky obrazovek. Předem se omlouvám za nutnou cenzuru některých položek. Základní obrazovka webového rozhraní Monitu vypadá následovně:
Základní obrazovka webového rozhraní Monitu
Pokud byste se podívali na detail některé hlídané služby, vypadalo by to takto:
Jak je z obrázku patrné, službu je možné ovládat pomocí tlačítek ve spodní části obrazovky. Snadno tak zajistíte vzdálený restart bez nutnosti použít příkazovou řádku. Detail hlídání vzdáleného serveru může vypadat kupříkladu takto:
Detail hlídaného vzdáleného serveru
Otázkou zůstává, jak co nejbezpečněji zpřístupnit rozhraní Monitu zvenčí. Jednou z možností je použít SSH tunel, např. takto:
ssh -N -f uzivatel@server -L 3000:127.0.0.1:2812
Tento příkaz naváže SSH spojení se serverem „server“ jako uživatel „uzivatel“ a nabídne vám na místním portu 3000 vašeho počítače vzdálený port Monitu běžící na portu 2812 na IP adrese 127.0.0.1
(tedy na localhostu serveru), tzn. do prohlížeče pak stačí zapsat: https://localhost:3000/
a máte k dispozici webové rozhraní Monitu, se kterým komunikujete bezpečně přes SSH tunel.
Pokud vám na serveru běží webový server s PHP, můžete se podívat do /usr/share/doc/monit/contrib
(platí pro Debian a z něj odvozené distribuce), kde se nachází soubor monit.php
, který umožňuje zpřístupnit webové rozhraní Monitu prostřednictvím PHP kdekoliv na serveru. Pokud se rozhodnete pro tuto cestu, přístup k tomuto souboru určitě dobře zabezpečte.
Konzolové rozhraní Monitu
Funguje-li Monit jako démon, můžete využít řádkového nástroje monit
ke zjišťování stavu služeb a servisním zásahům. Můžete si, kupříkladu, vypsat stav všech hlídaných služeb:
debian:~# monit summary The Monit daemon 5.1.1 uptime: 19d 4h 31m System 'domena.tld' running Process 'apache' running Process 'postgresql' running Process 'sshd' running Process 'postfix' running Process 'denyhosts' running Process 'dkim-filter' not monitored Remote Host 'domena1.tld' online with all services Remote Host 'domena2.tld' ICMP failed Remote Host 'domena3.tld' online with all services
Z výpisu je patrná jedna nemonitorovaná služba a nedostupnost jednoho vzdáleného serveru (domena2.tld
). Základních operací s jednotlivými službami je pět, a sice jejich nastartování (start
), zastavení (stop
), restart (restart
), zahájení hlídání (monitor
) a přerušení hlídání (unmonitor
). Jako parametr kterékoliv z těchto akcí můžete specifikovat jméno konkrétní služby, nebo zvolit všechny služby pomocí parametru „all
“. Zastavení Apache by vypadalo takto:
monit stop apache
Zajímavější je možnost využívání skupin (viz výše), tedy možnost provést konkrétní akci pro všechny služby z dané skupiny. Pokud byste měli skupinu „lamp“ a chtěli všechny její služby restartovat, provedli byste to takto:
monit -g lamp restart all
Ostatní volby a možnosti tohoto nástroje si můžete prohlédnout zadáním:
monit -h
Velmi flexibilní nástroj na hlídání systému
Monit je velmi flexibilní nástroj na hlídání systému, služeb i vzdálených počítačů. Nabízí velmi široké možnosti konfigurace, z nichž tu byl ukázán spíše jen nutný základ. Pokud se chcete dozvědět více, určitě nahlédněte do odkazů pod článkem, kde naleznete nejen oficiální dokumentaci, ale také wiki s řadou příkladů konfigurace služeb.