Icinga2 monitoring
02 Apr 2017Icinga2 monitoring
V dnešním článku se zmíním o projektu na monitorování zařízení Icinga2. V rámci jednoho projektu řešíme monitorování stovek zařízení, na kterých běží různé služby (ssh, smtp, db). V rámci předchozího projektu, již byla nasazena první verze Icinga2, který jsme začali rozšiřovat. Výhody tohoto projektu:
- Jednoduchá konfigurace
- Součástí systémů (CentOS, Ubuntu)
- Rozšiřitelnost o mnoho pluginů a komponent (nrpe klient, nsclient++)
- Díky REST API snadná integrace s CMDB databázemi a například ticketing systémy
- Možnost konfigurace HA, škálování, notifikačních pluginů
- Možnost konfigurace tzv. zón, ve kterých můžou být umístěné různé monitorovací systémy
Icinga2 projekt
Jedná se o projekt, který je fork
projektu nagios. Výhoda tohoto projektu je, že lze využít většinu nagios pluginů.
Icinga2 je modulární projekt, takže lze rozšiřovat o další funkcionalitu.
Architektura aplikace je navržena pro škálovatelný průběh a také
pro HA konfiguraci. Takže v případně výpadku jednoho monitorovacího nodu, můžou ostatní nody převzít jeho servery a dále monitorovat.
Dnes je Icinga2 součástí většiny balíčkovacích systémů v prostředí linux.
Mnoho rozšíření je již instalovaných a lze je jednoduše konfigurovat. Tato vlastnost je výhodná například, kdy se testuje konfiguraci nového monitorovacího zařízení a nechcete, aby Icinga2 aktivně monitorovala, ale běžela pouze pasivně. Zde jsou zajímavé rozšíření Icinga2.
- checker - v případě, že je zapnutý, aktivně monitoruje zařízení
- notification - v případě zjištění problémů (výpadek, přesáhnutí thresholdu) spustí notifikaci
- ido-mysql (ido-postgresql) - ukládání dat a konfigurace do databáze
- api - Zapnutí Icinga2 API (REST API)
- debug - Zapnutí debug logu (doporučuji na začátek)
[icinga@localhost features-enabled]# icinga2 feature enable checker
Jak lze vidět na ukázce, Icinga2 má sadu commandů, kterými lze konfigurovat tento projekt.
Icinga2 konfigurace
Icinga2 projekt lze nakonfigurovat několika způsoby. V rámci Icinga2 projektu existuje několik základních objektů. Defaultně je veškerá konfigurace v souborech, které ovšem po změně vyžadují restart serveru.
- Host
- Služba
- Kontakt
- Skupiny
- Notifikace
Host
Konfigurace monitorovaného objektu. Monitorované objekty mohou být rozšířeny o vlastní proměnné (vars), případně jim lze nadefinovat společné vlastnosti pomocí šablony (generic-template).
object Host "TestHost" {
import "generic-host"
address = "172.25.1.6"
vars.os = "Linux"
vars.http_vhosts["http"] = {
http_uri = "/"
}
vars.disks["disk /"] = {
disk_partitions = "/"
}
vars.notification["mail"] = {
groups = [ "icingaadmins" ]
}
}
Služba
Služby slouží k samotnému monitorování hostů. Služby mohou monitorovat externě jako například volání služby nebo kontrola otevřenosti portu. Případně mohou volat interní operace přímo v monitorovacích objektech.
apply Service "postgress" {
import "generic-service"
check_command = "pgsql"
vars.pgsql_hostname = "localhost"
vars.pgsql_database = "icinga"
vars.pgsql_username = "icinga"
vars.pgsql_password = "icinga"
vars.pgsql_port = "5432"
assign where (host.address || host.address6) && host.vars.os == "Linux" && host.vars.db == "postgres"
}
Pomocí assign
ve službě lze automaticky definovat pravidla, podle kterých se budou vybírat hosty pro dané monitorování. Tyto pravidla zjednodušují konfiguraci monitorování služeb.
Kontakt
Pro správnou funkci notifikaci je potřeba mít nadefinované kontakty, na které se budou posílat notifikace.
object User "icingaadmin" {
import "generic-user"
display_name = "Icinga 2 Admin"
groups = [ "icingaadmins" ]
email = "icinga@localhost"
}
Skupiny
Různé objekty (kontakty, hosty, služby) lze shlukovat do skupin, kde tyto objekty mohou mít společné vlastnosti. Například v případě notifikace na skupinu může být email rozeslán všem kontaktům ve skupině.
object HostGroup "linux-servers" {
display_name = "Linux Servers"
assign where host.vars.os == "Linux"
}
object ServiceGroup "ping" {
display_name = "Ping Checks"
assign where match("ping*", service.name)
}
Notifikace
V případě, že na základě chyby vyhodnotí Icinga2, že se jedná o problém, který je potřeba notifikovat, spustí skript, který tuto notifikaci provede. Například defaultně se spouští skript, který pošle email. Tyto notifikační skripty lze jednoduše konfigurovat, případně přepsat na vlastní funkcionalitu (poslání sms, apod).
Icinga2 Persistence
Icinga2 může používat ukládání do relační databáze (postgresql, mysql). Do tohoto databázového schématu ukládá Icinga2 data, ale i aktuální konfiguraci. Icinga2 může běžet i bez ukládání do databáze.
Rest API
V případě Icinga2 lze zapnout REST API, které umožňuje vytvářet a upravovat objekty. V případě volání REST API a nastavení databázové konfigurace si Icinga ukládá data do databáze, ale zároveň generuje i konfigurační soubory. V případě, že chcete například vymazata databázi stovek zařízení, je potřeba data mazat na více místech (smazat konfigurační soubory i data v databázi).
curl -X "PUT" "https://172.27.1.3:5665/v1/objects/hosts/test.cz" \
-H "Accept: application/json" \
-H "Content-Type: application/json; charset=utf-8" \
-u root:icinga \
-d "{\"templates\":[\"generic-host\"],\"attrs\":{\"address\":\"172.27.1.5\",\"check_interval\":30,\"check_command\":\"hostalive\",\"vars.os\":\"Linux\"}}"
Některé operace jsou trochu zvláštní. Například objekty se zakládají přes operace PUT a upravují přes operaci POST. Další zvláštností je například, že vám systém nedovolí upravit kontakt tím, že byste mu nastavili jinou skupinu (musíte objekt smazat a znova vytvořit).
Použití tohoto API vám eliminuje problém s nutností po každé konfiguraci restartovat Icinga2. Další výhoda, že v případě běhu v HA režimu stačí operaci provést pouze na jednom nodu a automaticky dojde k redistribuci.
Konfigurace zón
V případě, že potřebujete monitorovat například více lokalit a chcete tyto monitorování rozdělit, můžete využit funkcionalitu satelitů a zón, kdy více instancí icinga2 rozdělíte a každá z těchto instancí může monitorovat jiná zařízení (například rozdělení podle lokalit Praha, Berlín apod).
Icinga2 moduly
Icinga2 lze rozšířit o další moduly. Zde je několik z nich.
Icinga2 web
Jedná se o grafický front end pro Icinga2 monitoring. Tento modul běží na webovém serveru httpd. Má jednoduché intuitivní ovládání, které umožnuje zobrazovat informace a monitorovaných zařízeních a službách.
Icinga2 data pouze zobrazuje a neumožnuje například editaci konfigurací zařízení, případně změnu monitorovacích služeb. Toho lze docílit dalšími přídavnými moduly. Icinga web modul potřebuje pro ukládání svých informací vlastní schéma v relační databázi (opět je na výběr mysql nebo postgresql).
Modul director
Aby bylo možné upravovat konfigurace bez nutnosti zásahu přímo do konfiguračních souborů, nebo úpravy pomocí REST API, je možné doinstalovat rozšíření
director
. Toto rozšíření umožnuje provádět v GUI přímo úpravy.
- Vytváření, úprava a mazání šablon
- Vytváření, úprava a mazání hostů a služeb
- Možnost konfiguraci si nejdříve naklikat v
draftu
, kdy změny se přímo neprovádí, ale musí se ještě potvrdit.
Shrnutí
Velkou výhodou Icinga2 je jednoduchá a flexibilní konfigurovatelnost a možnost využít spousty již vytvořených pluginů z Nagios. Další výhoda je i integrace grafických rozšíření (zobrazování nasbíraných dat, využit pamětí, CPU). Pro monitorování stovky zařízení je to naprosto dostačující produkt, který svou flexibilitou lze jednoduše integrovat do prostředí, kde se musíte napojit na různé zdroje (notifikace do ticket systémů, databáze zařízení).