Mit Hilfe des folgenden Skriptes ist es möglich, eine Verbindung zwischen einer vorhanden DokuWiki-Integration mit einem vorhanden NagVis zu verbinden. Die Idee hierfür war eine Möglichkeit zu schaffen, von einem Nagios-Host aus der Nagios-Web-Oberfläche heraus unmittelbar auf alle NagVis-Maps zugreifen zu können, in welchen der Nagios-Host vorkommt. Hierfür bin ich über den Umweg von DokuWiki gegangen, nachdem ich aus Nagios direkt heraus keine sinnvolle Lösung gefunden habe.
Folgende Voraussetzungen setzt das Skript (bisher noch) voraus:
Das Skript läuft folgendermaßen ab:
Anmerkung – WICHTIG –: In den bisherigen Tests mit dem Skript sind keine bereits vorhandenen Inhalte der einzelnen DokuWiki-Dateien verloren gegangen. Ich empfehle dennoch, vor jedem Durchlauf eine Sicherung der DokuWiki-Dateien durchzuführen!
Skript „dokuwiki_to_nagvis.sh“
#!/bin/bash
#
# CREATED: 23.10.2007
# AUTHOR: WolverineJR
# DESCRIPTION: Dieses Script dient als Verknuepfung zwischen DokuWiki und NagVis.
# Das Script durchsucht alle definierte Nagios-Hosts, ob diese in einer
# oder mehreren NagVis-Maps vorkommt und erstellt hierfuer in einer
# anzugebenden DokuWiki-Datei einen Link auf diese NagVis-Map.
# Path to DokuWiki-Pages for Nagios
DW_PATH=/usr/local/dokuwiki-test
# Name of DokuWiki-File
DW_FILE=host.txt
# Permissions for directories/files for DokuWiki
DW_DIR_MOD=755
# Owner/group for directories/files for DokuWiki
DW_DIR_OWN="wwwrun:www"
# Path in which Nagios-host-definition-files are located
NAG_HOSTS=/usr/local/nagios/etc/hosts
# Path to NagVis-Maps
NAGVIS=/usr/local/nagios/share/nagvis/nagvis/etc/maps
# URL for NagVis-Maps
NAGVIS_EXP_PATH=http://[dein Nagios-Server]/nagios/nagvis/nagvis/index.php?map=
for i in $(/bin/grep host_name $NAG_HOSTS/* | awk -F: '{print $NF}' | sed -e 's/^[\t ]*//g' | egrep -v "^[ ]*#" | awk '{print $2}' | tr [:upper:] [:lower:] | sed -e 's/\s//g')
do
if /bin/grep -i $i$ $NAGVIS/* | egrep -v ".cfg.bak" 2>&1 1>/dev/null
then
if [ ! -d $DW_PATH/$i ]
then
mkdir $DW_PATH/$i
chmod $DW_DIR_MOD $DW_PATH/$i
chown $DW_DIR_OWN $DW_PATH/$i
fi
if [ ! -f $DW_PATH/$i/$DW_FILE ]
then
touch $DW_PATH/$i/$DW_FILE
chown $DW_DIR_OWN $DW_PATH/$i/$DW_FILE
fi
if cat $DW_PATH/$i/$DW_FILE | grep "NagVis-Location" 2>&1 1>/dev/null
then
sed -e '/==== NagVis-Location ====/,/----/d' $DW_PATH/$i/$DW_FILE > $DW_PATH/$i/$DW_FILE_temp.txt
mv -f $DW_PATH/$i/$DW_FILE_temp.txt $DW_PATH/$i/$DW_FILE
chown $DW_DIR_OWN $DW_PATH/$i/$DW_FILE
fi
if [ -s $DW_PATH/$i/$DW_FILE ]
then
sed -i '1s/.*$/==== NagVis-Location ====\n\n^ Map ^ Link ^\n &/g' $DW_PATH/$i/$DW_FILE
else
printf "==== NagVis-Location ====\n\n^ Map ^ Link ^\n " > $DW_PATH/$i/$DW_FILE
fi
MAPCOUNT=4
for j in $(/bin/grep -i $i$ $NAGVIS/* | egrep -v ".cfg.bak" | grep host_name | awk -F: '{print $1}' | sed -e 's/.cfg//g' | awk -F/ '{print $NF}' | uniq)
do
sed -i ''$MAPCOUNT's;.*$;| '$j' | [['$NAGVIS_EXP_PATH''$j']] |\n &;g' $DW_PATH/$i/$DW_FILE
let MAPCOUNT=$MAPCOUNT+1
done
sed -i ''$MAPCOUNT's;.*$;\n----\n&;g' $DW_PATH/$i/$DW_FILE
fi
done
Weiterentwicklungen sind erwünscht