Public:Svamberg/Návody/NConf
Poznámky k instalaci NConf na server hype3. Základním dokumentem je Instalační příručka.
Prerekvizity
Nainstalovat balíky a kontrola nastavení dle závislostí.
Instalace
Import
Dle návodu, zde pouze pomocné skripty, které parsují /var/cache/nagios3/objects.cache
#!/usr/bin/perl # vytvori samostatne soubory podle class v retezci '^define <class> {' # $ cat objects.cache | parse.pl # $ ls use strict; my $line; my $class; my $FILE; while ($line = <STDIN>) { if ($line =~ /^define\s+(\w+)\s*{\s*$/) { $class = $1; } open ($FILE, ">>$class"); print $FILE "$line"; close ($FILE); }
Druhý skript rozděluje vytvořený soubor host podle úrovně od kořene:
#!/usr/bin/perl # program usporada hosty podle vzajemne zavislosti, do souboru # host.0 ty v koreni, v host.1 vsechny z druhe urovne (odkazuji # se na hosty v host.0, atd.) # # $ cat host | ./hosts.pl R99-PM # $ ls use strict; use Data::Dumper; my $line; my $object; my $name; my $level = 0; my $levels = 0; my $parents; my @data = (); my $root = undef; # test povinneho parametru die "Chybi povinny parametr - host_name korene grafu.\n" unless ($ARGV[0]); # cteni dat while ($line = <STDIN>) { # hledani zacatku a inicializace if ($line =~ /^define\s+host\s*{\s*$/) { $object = ""; } # uchovani si jmena hosta if ($line =~ /^\s*host_name\s+(\S+)\s*$/) { $name = $1; } # ulozeni rodice if ($line =~ /^\s*parents\s+(\S+)\s*$/) { $parents = $1; } # pridani radku do textu $object = "$object" ."$line"; # pokud je konec, ulozit do pole a pro jistotu vse vycistit if ($line =~ /^\s*}\s*$/){ if ("x$name" eq "x$ARGV[0]") { $root = $#data + 1; $level = 0; } push @data, { name => "$name", level => $level, parents => $parents, object => "$object" }; $name = ""; $parents = ""; $object = ""; $level = 0; } } # test, ze byl nalezen root die "Nenalezen koren '$ARGV[0]'\n" unless $root; # prochazime pole, coz je typicka rekurzivni uloha, protoze vzdy zname koren sub subtree { my $root = shift; my $level = shift; my $item = undef; $levels = $level if $levels < $level; foreach $item (@data) { if ("$$item{parents}" eq "$root") { $$item{level} = $level; subtree ($$item{name}, $level+1); } } #print "$level\t$root\n"; } # start rekurze pro koren, zadame jmeno a uroven nasledujiciho podstromu subtree ("$data[$root]{name}", $data[$root]{level}+1); # tisk po levelech, nezapomenout na undef, tj. ty kteri nemaji rodice my $item; my $FILE; while ($levels > -1) { open $FILE, ">host.$levels"; foreach $item (@data) { print $FILE "$$item{object}" if $levels == $$item{level}; } close $FILE; $levels--; } # debug #print Dumper(\@data); exit 0;
Vždy před spuštěním importu dané služby je potřeba zkontrolovat a smazat defaultní z instalace. Ale ne všechny, templaty a předkonfigurované volby ponechat.
Po importu je třeba odladit generování konfigurace, je třeba smazat duplicitní služby (v misccommand), přidat hostům a službám templaty ohledně časování testů.
Až vše vypadá dobře, lze nastavit cron tak, aby kopíroval a reloadoval nagios, viz deployment v dokumentaci NConf.
Ostatní
Upraveno CSS pro menu v /usr/share/nagios3/htdocs/side.html tak aby bylo rozpoznatelné (svítilo červeně)
Pomocníci
Jednoduchý skript, který vypíše na řádce typ, hostname, sluzbu a hodnotu o kterou se zajímame. Import totiž některé informace neukládá a přebírá je z defaultních hodnot. Proto se hodí pak pro kontroly a zjišťování úprav:
#!/usr/bin/perl # vytiskne retezec "<typ> <hostname>:[<service>] <hodnota>" # $ cat objects.cache | info.pl <nagios_option> # napriklad: # $ cat objects.cache | info.pl notification_interval use strict; my $line; my $class; my $host; my $desc; my $interval; my $option = shift or die "Zadej hodnotu, napr. 'notification_interval'\n"; while ($line = <STDIN>) { if ($line =~ /^define\s+(\w+)\s*{\s*$/) { $class = $1; print "$class $host:$desc $interval\n" if $host; $host = ""; $desc = ""; $interval = ""; } $interval = $1 if $line =~ /$option\s+(\d+)/; $host = $1 if $line =~ /host_name\s+(\S+)/; $desc = $1 if $line =~ /service_description\s+(\S+)/; } exit 0;