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;