Vorraussetzungen:
/etc/passwd:
WikiFTP:!:738:113:Wiki-FTP User:/usr/local/nagios/share/wiki/data/pages/nagios:/usr/bin/false
/etc/group:
nagios:!:113:nagios,apache,WikiFTP
Die UID und GID des Users sind wichtig, da ich diese in dem Perlscript verwende um den Owner und die Rechte zu setzen. Die Files im Wiki gehören normalerweise apache:nagios (Rechte 664). Um zu verhindern, daß die über das Script erzeugten Daten verändert werden, gehören diese Files WikiFTP:nagios (Rechte: 644). Username = Passwort
NSC.ini
command[wikiupdate]=C:\Nagios\scripts\sys2wiki.bat
Die Batch-Datei sys2wiki.bat sieht so aus:
@echo off
cscript C:\Nagios\scripts\sys2wiki.vbs /H %COMPUTERNAME% /F host.txt /U blabla //Nologo
call ftp -i -s:"c:\temp\Wiki.cmd" {WikiServer} 1>NUL 2>NUL
del c:\temp\Wiki.cmd 1>NUL 2>NUL
:RC0
echo "Wikiupdate OK - %COMPUTERNAME%"
exit 0
goto ENDE
:RC1
echo "Warning - %1 warning"
exit 1
goto ENDE
:RC2
echo "Critical - %1 critical"
exit 2
goto ENDE
:RC3
echo "Unknown"
exit 3
goto ENDE
:ENDE
Der Hostname des WikiServers muß im FTP-Aufruf noch angepasst werden.
Das VB-Script sys2wiki.vbs von Dumps some windows hardware info in DokuWiki format habe ich nach dem wikifile.close um folgendes erweiter:
' Ausgabefile schliessen Objekte terminieren
wikifile.Close
Dim FTPcmd : Set FTPcmd = objFs.CreateTextFile("c:\Temp\WIKI.cmd", True)
FTPcmd.WriteLine "WikiFTP"
FTPcmd.WriteLine "WikiFTP"
FTPcmd.WriteLine "cd " & LCase(strComputername) & "/"
FTPcmd.WriteLine "lcd c:\Nagios"
FTPcmd.WriteLine "put host hardware.txt"
FTPcmd.WriteLine "bye"
FTPcmd.close
Jetzt nur noch den NSClient neu starten damit die neue Konfiguration eingelsen wird.
Eintrag in der nrpe.cfg
command[wikiupdate]=/usr/local/nagios/tools/update-dokuwiki.sh
Das script update-dokuwiki.sh sieht so aus:
#!/usr/bin/ksh
case $(uname -s) in
AIX|Linux)
Hardware=/tmp/hardware.txt
Server=$(hostname|tr '[:upper:]' '[:lower:]'|cut -f1 -d'.')
/usr/local/nagios/tools/dokuwiki.sh >${Hardware}
ftp -nv {WikiServer} <<EOFTP >/dev/null
user WikiFTP WikiFTP
lcd /tmp
cd /${Server}
put hardware.txt
bye
EOFTP
rm -f ${Hardware}
echo "Wikiupdate OK - ${Server}"
;;
*)
echo "No AIX or Linux Host"
;;
esac
Der Hostname des WikiServers muß im FTP-Aufruf noch angepasst werden.
Die Shell-Scripte sys2wiki.sh von Dumps some *unix hardware info in DokuWiki format für AIX und Linux habe ich nur umbenannt in dokuwiki.sh:
update-wiki.pl
#!/usr/bin/perl
use Exporter;
use strict;
use JSON::XS;
use File::Path;
my $ndo2fsdir='/usr/local/nagios/var/VOLATILE/default';
my $wikidir='/usr/local/nagios/share/wiki/data/pages/nagios/';
my $hosts;
my $host;
my $hostlist=$ndo2fsdir.'/VIEWS/HOSTLIST';
my $services;
my $service;
my $servicelist=$ndo2fsdir.'/VIEWS/SERVICELIST';
my $file;
open ( FH, "<$hostlist" );
undef $/;
$hostlist = <FH> ;
close FH;
$hosts = decode_json $hostlist;
open ( FH, "<$servicelist" );
undef $/;
$servicelist = <FH> ;
close FH;
$services = decode_json $servicelist;
print "Updating Service-Infos for all monitored Services\n";
foreach $host (@{$hosts->{1400}})
{
my $mydir=$wikidir.'/'.$host;
mkpath($mydir,0,0775);
chown(111,113,$mydir);
chmod(0775,$mydir);
$file = $ndo2fsdir.'/HOSTS/'.$host.'/CONFIG';
open ( FH, "<$file" );
undef $/;
$file = <FH> ;
close FH;
my $hostdata = decode_json $file;
my $svcout = $wikidir.'/'.$host.'/services.txt';
open ( FOUT , ">$svcout" );
foreach $service (@{$services->{$host}})
{
$service =~ tr/ /_/;
$file = $ndo2fsdir.'/HOSTS/'.$host.'/'.$service.'/CONFIG';
open ( FH, "<$file" );
undef $/;
$file = <FH> ;
close FH;
my $serviceconf = decode_json $file;
$file = $ndo2fsdir.'/HOSTS/'.$host.'/'.$service.'/STATUS';
open ( FH, "<$file" );
undef $/;
$file = <FH> ;
close FH;
my $servicedata = decode_json $file;
if ($serviceconf->{ACTIONURL} ne "" ) {
print FOUT "==== $service ====\n";
print FOUT "\n";
print FOUT "$servicedata->{OUTPUT}\n";
print FOUT "\n";
print FOUT "4 Stunden\n";
print FOUT "\n";
print FOUT "<html>\n";
print FOUT '<img src="/nagios/pnp/index.php?display=image&srv='.$service.'&host='.$host.'&type=http&view=0">'."\n";
print FOUT "</html>\n";
print FOUT "\n";
my $serviceout = $mydir.'/'.lc($service).'.txt';
open ( SFOUT , ">$serviceout" );
print SFOUT "==== $service ====\n";
print SFOUT "\n";
print SFOUT "$servicedata->{OUTPUT}\n";
print SFOUT "\n";
print SFOUT "4 Stunden\n";
print SFOUT "\n";
print SFOUT "<html>\n";
print SFOUT '<img src="/nagios/pnp/index.php?display=image&srv='.$service.'&host='.$host.'&type=http&view=0">'."\n";
print SFOUT "</html>\n";
print SFOUT "\n";
print SFOUT "24 Stunden\n";
print SFOUT "\n";
print SFOUT "<html>\n";
print SFOUT '<img src="/nagios/pnp/index.php?display=image&srv='.$service.'&host='.$host.'&type=http&view=1">'."\n";
print SFOUT "</html>\n";
print SFOUT "\n";
print SFOUT "1 Woche\n";
print SFOUT "\n";
print SFOUT "<html>\n";
print SFOUT '<img src="/nagios/pnp/index.php?display=image&srv='.$service.'&host='.$host.'&type=http&view=2">'."\n";
print SFOUT "</html>\n";
print SFOUT "\n";
print SFOUT "1 Monat\n";
print SFOUT "\n";
print SFOUT "<html>\n";
print SFOUT '<img src="/nagios/pnp/index.php?display=image&srv='.$service.'&host='.$host.'&type=http&view=3">'."\n";
print SFOUT "</html>\n";
print SFOUT "\n";
print SFOUT "1 Jahr\n";
print SFOUT "\n";
print SFOUT "<html>\n";
print SFOUT '<img src="/nagios/pnp/index.php?display=image&srv='.$service.'&host='.$host.'&type=http&view=4">'."\n";
print SFOUT "</html>\n";
print SFOUT "\n";
close SFOUT;
chown(738,113,$serviceout);
chmod(0644,$serviceout);
} else {
print FOUT "==== $service ====\n";
print FOUT "\n";
print FOUT "$servicedata->{OUTPUT}\n";
print FOUT "\n";
}
}
close FOUT;
chown(738,113,$svcout);
chmod(0644,$svcout);
}
print "Updating Hardware-Infos for UNIX-Clients\n";
my $hostlist=$ndo2fsdir.'/SERVICEGROUPS/NRPE/META';
open ( FH, "<$hostlist" );
undef $/;
$hostlist = <FH> ;
close FH;
$hosts = decode_json $hostlist;
foreach $host (@{$hosts->{"SERVICEGROUPMEMBER"}})
{
my $h;
my $s;
($h,$s)= split(/;/,$host,-1);
system("/usr/local/nagios/libexec/check_nrpe -H ".$h." -n -c wikiupdate -t60 &");
}
print "Updating Hardware-Infos for Windows-Clients\n";
my $hostlist=$ndo2fsdir.'/SERVICEGROUPS/NSClient/META';
open ( FH, "<$hostlist" );
undef $/;
$hostlist = <FH> ;
close FH;
$hosts = decode_json $hostlist;
foreach $host (@{$hosts->{"SERVICEGROUPMEMBER"}})
{
my $h;
my $s;
($h,$s)= split(/;/,$host,-1);
system("/usr/local/nagios/libexec/check_nrpe -H ".$h." -c wikiupdate -t60 &");
}
update-wiki.pl
#!/usr/bin/perl
use strict;
use Monitoring::Livestatus;
my $nl = Monitoring::Livestatus->new( socket => '/usr/local/nagios/var/rw/live' );
my $host;
print "Updating Hardware-Infos for UNIX-Clients\n";
my $hosts = $nl->selectall_arrayref("GET servicegroups\nFilter: name = NRPE\nColumns: members");
foreach $host (@$hosts) {
my @rechner = split(/,/,"@$host");
my $r;
foreach $r (@rechner) {
my @pc = split(/\|/,$r);
system("/usr/local/nagios/libexec/check_nrpe -H ".$pc[0]." -n -c wikiupdate -t60 &");
}
}
print "Updating Hardware-Infos for Windows-Clients\n";
my $hosts = $nl->selectall_arrayref("GET servicegroups\nFilter: name = NSClient\nColumns: members");
foreach $host (@$hosts) {
my @rechner = split(/,/,"@$host");
my $r;
foreach $r (@rechner) {
my @pc = split(/\|/,$r);
system("/usr/local/nagios/libexec/check_nrpe -H ".$pc[0]." -c wikiupdate -t60 &");
}
}