Správa linuxového serveru: Hlídání serverů pomocí nástroje Monit
Stalo se vám někdy, že vám na serveru spadl nějaký důležitý démon, popřípadě že server samotný přestal reagovat, a vy jste to nezjistili včas? Nástroj Monit umí hlídat činnost serveru i nejrůznějších démonů a nejen upozornit v případě problému, ale i provést opravnou akci. Jak na to, to je předmětem tohoto článku.
Úvod
Monit je komplexní nástroj na sledování služeb, a to jak služeb běžících na místním serveru, tak služeb běžících na vzdáleném. Umožňuje velmi přesně definovat, co a jak se bude kontrolovat. U místních služeb může být prospěšný jak tím, že upozorní na jejich nedostupnost či blížící se problém (např. docházející paměť apod.), tak provedením opravné akce, kterou může být restart monitorované služby, ale také jakýkoliv jiný příkaz. Monitorovat lze nejen činnost konkrétních démonů, ale také řadu systémových veličin, jako je např. zatížení systému, volná paměť, využití swapu apod.
Stav monitorovaných systémů či služeb je možné zjišťovat nejenom kontrolou poštovní schránky, kam přichází oznámení, ale také pomocí webového či shellového rozhraní. Tyto rozhraní umí nejenom sledovat stav veškerého monitorování, ale umožňují i provádět jisté změny přímo za běhu, tedy restart sledovaných služeb nebo pozastavení či opětovné zahájení konkrétního monitorování. Na to je dobré při případných upgradech či servisních zásazích nezapomenout, protože Monit pak třeba službu, která není aktivní, automaticky nastartuje, což v takových situacích může vadit.
Instalace
K instalaci postačí nainstalovat stejnojmenný balíček, v Debianu stačí zapsat následující příkaz:
aptitude install monit
Na rozdíl od řady jiných démonů je Monit po instalaci neaktivní, tzn. před samotným použitím je třeba jej nakonfigurovat (viz níže). Až budete mít Monit nakonfigurovaný, povolte jeho použití v /etc/default/monit, kde proměnné startup přiřaďte jedničku místo nuly:
startup=1
Základní konfigurace Monitu
Proces konfigurace Monitu je poměrně jednoduchý. Máte na výběr ze dvou možností - buď budete přímo měnit hlavní konfigurační soubor Monitu, tedy /etc/monit/monitrc, nebo si jednotlivé služby i základní konfiguraci rozdělíte do libovolně pojmenovaných souborů v /etc/monit/conf.d.
Výchozí konfigurační soubor /etc/monit/monitrc neobsahuje prakticky žádnou výchozí konfiguraci, ale je dobře zdokumentovaný a základní nastavení jsou v něm přítomna, pouze jsou zakomentována, takže stačí příslušné volby odkomentovat a nastavit si je podle svých představ. Základ by mohl vypadat třeba takto:
set daemon 120
with start delay 240
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: monit@muj-server.tld }
set alert root@localhost
První dva řádky nastavují režim démona a dva podstatné časové údaje. Prvním z nich je doba cyklu, tedy doba mezi jednotlivými kontrolami, zde nastavena na sto dvacet sekund. V jednotlivých pravidlech (viz dále) je možné stav služeb zjišťovat i v delším časovém rozmezí a konkrétní akci pak vázat na stav, který trvá po dobu několika cyklů.
Na druhém řádku je nastavena úvodní čekací doba před zahájením monitorování. Tato doba se měří od spuštění Monitu a v tomto případě je nastavena na dvě stě čtyřicet sekund. Druhý řádek je samozřejmě nepovinný - je to pouze doplnění k prvnímu řádku, a pokud jej nespecifikujete, služby se začnou monitorovat okamžitě po spouštění Monitu.
Třetí řádek nastavuje logování, čtvrtý pak poštovní servery (mailserver), prostřednictvím kterých budou odesílána oznámení. Mailserverů je možné specifikovat více, jako oddělovač použijte čárku. Máte-li možnost, nelze než doporučit použít víc než jeden poštovní server, Monit pak v případě nečinnosti jednoho pošle e-mail přes jiný (je nepříjemné, pokud by přestal fungovat poštovní server a vy byste se o tom nedozvěděli, protože Monit by neměl k dispozici žádný další). Pátý řádek upravuje formát zasílaných e-mailů, resp. nastavuje pole From: - to bývá vhodné přizpůsobit doménovému jménu vašeho serveru.
Poslední řádek nastavuje příjemce upozornění. Příjemců může být pochopitelně více - potřebujete-li jich více, specifikujte set alert vícekrát, např. takto:
set alert admin1@localhost
set alert admin2@localhost
Dodám ještě, že Monit umožňuje zasílat různé typy zpráv různým uživatelům, avšak zde vás už odkážu na dokumentaci nebo alespoň na drobný příklad v komentovaném monitrc.
Monitorování systému
Pokud chcete monitorovat základní veličiny systému, na kterém Monit běží, můžete použít následující šablonu:
check system muj-server.tld
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 75% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert
Název systému a hodnoty si samozřejmě upravte podle libosti. Jak je vidět, zápis pravidel pro Monit se podobá konstrukcím programovacích jazyků, je ovšem maximálně zjednodušený a dobře čitelný. Akce „alert“ zde představuje odeslání zprávy, pokud bude daná podmínka splněna.
Monitorování služeb
Asi nejjednodušší je poohlédnout se po šablonách pro konkrétní služby, které chcete monitorovat. Něco málo je k dispozici v návodech, ale obrovská spousta příkladů se nachází v příkladech na webu projektu. Využijete-li některé z těchto šablon, nezapomeňte si je upravit, tedy přinejmenším se ujistit, že umístění všech souborů odpovídá vašemu systému. Zde se jedná zejména o init skripty, které jsou v Debianu a mnoha distribucích umístěny v /etc/init.d, ale třeba Arch Linux je má v /etc/rc.d. Dále se jedná o umístění případných socketů či souborů s PID příslušných démonů, kde se umístění mezi distribucemi může také lišit.
Příklad monitorované služby by mohl vypadat třeba takto:
check process denyhosts with pidfile /var/run/denyhosts.pid
start program = "/etc/init.d/denyhosts start"
stop program = "/etc/init.d/denyhosts stop"
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 15.0 MB for 5 cycles then restart
V tomto příkladu je monitorován proces Denyhosts (nástroj byl v tomto seriálu již představen) za pomoci souboru s PID (with pidfile ...). Je-li specifikován PID soubor, Monit hlídá, jestli existuje proces s příslušným číslem, které je v něm uloženo. Na druhém a třetím řádku jsou specifikovány příkazy pro pro spuštění a zastavení démona, které jsou využívány pro řízení běhu služeb. Monit může příslušné služby restartovat, nastartovat nebo i zastavit za vámi specifikovaných okolností. Na čtvrtém a pátém řádku jsou podmínky vztahující se k zatížení procesoru samotným Denyhosts. Ano, Monit může sledovat využití systémových prostředků (CPU, paměti atd.) u konkrétních procesů, a na to mohou být navázány podmínky.
Pokud by Denyhosts během dvou cyklů (tedy dvou kontrol) zjistil, že Denyhosts využívá více než šedesát procent CPU, zaslal by e-mailem upozornění. Pokud by Denyhosts využíval více než osmdesát procent CPU během pěti cyklů, byl by poté proveden restart služby. Poslední řádek je pojistka proti případným memory leakům, tzn. v případě obsazení více než 15 MB operační paměti po dobu pěti cyklů bude proveden restart.
Tím bych tento díl ukončil. Příště budou následovat další příklady, budou naznačeny možnosti seskupování procesů a konfigurace a práce s webovým a konzolovým rozhraním Monitu.