Správa linuxového serveru: Hlídání pomocí Monitu (pokračování)

Minulý díl představil nástroj Monit a jeho základní konfiguraci, tento díl půjde o kus dále a ukáže vám některé další příklady konfigurace Monitu, včetně monitorování služeb běžících na jiných počítačích. Chybět nebude ani představení webového a konzolového rozhraní Monitu.

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í MonituZákladní obrazovka webového rozhraní Monitu

Pokud byste se podívali na detail některé hlídané služby, vypadalo by to takto:

Detail hlídané službyDetail hlídané služby

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