Správa linuxového serveru: Monitorování serveru pomocí nástroje Munin
Monitorování serveru zahrnuje mimo jiné i nutnost sledovat změny různých veličin v čase. Právě k tomu slouží nástroj Munin, který umožňuje zaznamenávat hodnoty mnoha systémových proměnných a vytvářet z nich grafy. Ty vám pak mohou pomoci nejenom odhalit řadu problémů, ale také odhadnout, kdy serveru přidat RAM, kdy nestačí dostupný výkon atd.

Úvod
Munin je jedním z řady nástrojů, které umožňují sledovat různé systémové veličiny (obsazení RAM, zátěž procesoru, zatížení databáze, průběh e-mailů frontou atd.) v čase. Ze získaných dat vytvoří sadu HTML stránek s grafy, které mohou být zpřístupněny přes běžící webový server. Munin je modulární aplikací, nabízí řadu modulů, které zajišťují sběr specifických veličin (MySQL dotazy, Apache procesy atd.). Je samozřejmě možné si napsat vlastní moduly pro sběr dat, které Munin sbírat neumí. Munin je koncipován také jako síťový nástroj - umožňuje sbírat informace ze vzdálených zdrojů, a shromažďovat tak data z mnoha serverů na jednom místě k pohodlnému prohlížení.

Každý generovaný graf je k dispozici v několika variantách - průběh hodnot během dne, týdne, měsíce a roku. Generované grafy mohou vypadat třeba takto (obrázek pochází z produkčního virtuálního serveru):

Výstup Muninu na produkčním serveru, obsazení paměti a swapu
Výstup Muninu na produkčním serveru, obsazení paměti a swapu

Instalace a zprovoznění
Instalace Muninu je velmi prostá. V případě Debianu postačí nainstalovat dva balíčky, a sice munin a munin-node:

aptitude install munin munin-node
První z uvedených balíčků obsahuje „serverovou část“ nástroje, spouštěnou cronem, která sbírá údaje ze všech uzlů prostřednictvím démona (munin-node), který na daných uzlech běží. Výchozí konfigurace v Debianu je provozuschopná, tzn. po výše uvedeném kroku je již Munin zprovozněn, monitoruje danou stanici a generuje grafy do /var/cache/munin/www (toto umístění platí pro Debian Squeeze, v Debianu Lenny je to /var/www/munin).

I když to není nutné, doporučuji si hlavní konfigurační soubory projít a upravit podle svých představ. Stěžejní jsou dva, a sice /etc/munin/munin.conf, který řídí „serverovou část“, a /etc/munin/munin-node.conf, který řídí „klientského“ démona běžícího na monitorovaném serveru. Určitě zkontrolujte munin-node.conf a konfigurační volbu host, která určuje, kde má démon naslouchat. Dodám, že tento démon běží s oprávněními uživatele root. Ve výchozím nastavení naslouchá na všech síťových rozhraních, což se hodí pouze u vzdálených uzlů, ze kterých chcete získávat údaje. U místního uzlu to není nutné, proto je vhodné konfiguraci upravit, aby démon naslouchal pouze na místní smyčce, takto:

# Which address to bind to;
#host *
host 127.0.0.1
Přístup přes webový server
Grafy Muninu mohou obsahovat některé citlivější údaje, které mohou být využity případnými útočníky. I když veřejná dostupnost generovaných grafů na dobře zabezpečeném serveru nemusí představovat velké bezpečnostní riziko, je lepší přístup k nim zabezpečit, a to na úrovni webového serveru. V případě Apache můžete použít např. omezení na určité IP adresy naznačené níže:

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
Order allow,deny
Allow from localhost 127.0.0.0/8 ::1
Allow from 1.2.3.4
Deny from all
Options None
</Directory>
Jinou možností může být HTTP autentizace a související nutnost se prokázat jménem a heslem. Z bezpečnostního hlediska je dobré takovou záležitost realizovat na virtuálním webu (virtual host) chráněném SSL a ujistit se, že na HTTP virtuálních webech je daný adresář nepřístupný.

V Debianu Lenny se HTML výstup Muninu generuje do /var/www/munin, který je ve výchozí konfiguraci webových serverů veřejně přístupný, tudíž zde je vhodné přístup omezit. V Debianu Squeeze se výstupy generují do /var/cache/munin/www a do konfigurace Apache, pokud je nainstalovaný, je automaticky přidán konfigurační soubor /etc/munin/apache.conf, který tento adresář zpřístupňuje (pod aliasem /munin) takovým způsobem, že přístup k výstupu Muninu odjinud než z místní smyčky (localhost) je zakázán. Zde je tedy třeba povolit přístup z počítačů, odkud chcete k výstupům Muninu přistupovat.

Práce s moduly
Moduly, které máte k dispozici, naleznete v /usr/share/munin/plugins. Moduly, které jsou aktivní, tj. které bude Munin (resp. munin-node) brát v úvahu při svém běhu, naleznete v /etc/munin/plugins. Aktivaci libovolného pluginu provedete vytvořením symbolického odkazu nebo prostým překopírováním. Některé moduly mohou vyžadovat dodatečné údaje, např. název rozhraní či databáze. Obvykle je to řešeno prakticky - přejmenováním. Tzn. pokud byste chtěli monitorovat konkrétní síťové rozhraní, použijete modul if_. Abyste jej spojili s příslušným rozhraním, např. eth1, vytvoříte symbolický odkaz nebo kopii v /etc/munin/plugins, která se bude jmenovat if_eth1. Podobně je to řešeno třeba s monitorováním konkrétní databáze atd.

Některé pluginy mohou vyžadovat dodatečnou konfiguraci, která je pak realizována v /etc/munin/conf.d/plugin-conf.d, kde do libovolného souboru zapíšete příslušnou konfiguraci. Kupříkladu moduly pracující s databází PostgreSQL vyžadují konfigurační volbu v podobě uživatele, pod kterým se mají připojit k databázovému serveru (v Debianu je to uživatel „postgres“). Tato konfigurace by vypadala takto:

[postgres_*]
user postgres
V hranatých závorkách je název konkrétního modulu, resp. souboru (či souborů). Následují konfigurační volby. Ke zjištění, které volby jsou pro daný modul dostupné, popřípadě jak máte modul použít, se podívejte přímo na jeho „zdrojový kód“, kde se kromě kódu nachází i dokumentace. Samotný modul je pak obyčejným spustitelným souborem - nejčastěji se jedná o shellové či perlové skripty. Samotné psaní vlastních modulů není nijak těžké, pokud umíte psát shellové skripty, zvládnete vytvořit vlastní modul. V odkazech pod článkem naleznete odkaz na příslušné HOWTO.

Příjem dat z více serverů
Chcete-li shromažďovat data z více serverů na jednom počítači, postupujte následovně. Na všechny počítače, které chcete sledovat, nainstalujte munin-node. Jelikož ve výchozím stavu tento démon naslouchá na síti, postačí už jen povolit přístup z „centrálního“ počítače. To provedete přidáním volby allow do /etc/munin/munin-node.conf:

allow ^1\.2\.3\.4$
Jak je vidět, parametrem volby allow není IP adresa, ale regulární výraz. Výchozí konfigurace povoluje pouze přístup z místní smyčky (localhostu). Pokud chcete, démony můžete ještě navíc ochránit pomocí iptables. Tito démoni poslouchají na portu 4949.

Posledním krokem je úprava nastavení Muninu, který běží na centrálním počítači, tedy souboru /etc/munin/munin.conf, kam je třeba přidat nastavení pro každý z monitorovaných počítačů. Toto nastavení může vypadat třeba takto:

[stroj1.example.org]
address 1.2.3.4
use_node_name yes

[stroj2.example.org]
address 4.3.2.1
use_node_name yes
Poté už jen vyčkejte a zkontrolujte, že se grafy generují pro všechny monitorované počítače.