
Ich habe ein Bereitstellungssystem, das neue Hosts in der Domäne test.domain.local einrichtet, d. h. client44.test.domain.local
, und ich habe einen Icinga-Server, auf dem ich alle diese Hosts mithilfe von regulären Ausdrücken wie automatisch überwachen möchte *.test.domain.local
.
Alle Clients erhalten nagios-nrpe-server
das Paket (Version 2.13-3), das auch so konfiguriert ist, dass der Icinga-Server Daten von ihnen abrufen kann. Die Funktionsfähigkeit dieses Pakets wurde nachgewiesen.
Wir werden vorerst nur Dienste/Dinge überwachen, von denen wir wissen, dass alle Knoten sie haben werden, zum Beispiel SSH, Antworten auf Ping usw.
Ich habe mir angesehendieser Linkaber ich verstehe nicht ganz die Beziehung zwischen Hosts, Hostgruppen und Serviceklassen?
Sowohl der Icinga-Server als auch alle Clients laufen unter Debian.
Antwort1
Ich habe mit fredmu an diesem Problem gearbeitet und bin auf Grundlage der Antwort von Tim Brigham zu einer funktionierenden Lösung gekommen.
Mit der Standarddefinition generic-host
könnte dies mithilfe eines Skripts gelöst werden, das automatisch Host-Konfigurationsdateien auf Grundlage einer Vorlage generiert. Optional könnte dies als Cronjob ausgeführt werden, um diese Dateien regelmäßig zu generieren.
generate_host_cfg.sh
#!/usr/bin/env bash
icinga_root="/etc/icinga/objects"
subnet="10.0.0.*"
template="template_icinga.cfg"
alias_file="alias.txt"
# navigate to the Icinga configuration directory
cd $icinga_root
# create first server alias if doesn't exist
if [ ! -e $alias_file ]; then
echo "1" > $alias_file
fi
# iterate through subnet, store "hostname:ip" in associative array
declare -A address
for host in $(nmap -sP $subnet | awk -F '[ ()]' '/for [a-z]+/ {print $5 ":" $7}'); do
address[$(echo $host | cut -d: -f1)]=$(echo $host | cut -d: -f2)
done
# iterate through hosts, create files if not exist based off template
for host in ${!address[@]}; do
host_file=${host}_icinga.cfg
if [ ! -e $host_file ]; then
# fetch new server alias
alias=$(cat $alias_file)
# create the next server alias
expr $alias + 1 > $alias_file
# create hostname_icinga.cfg if doesn't exist, based off template
cp $template $host_file
# replace contents of new template; hostname, alias and ip
sed -i -r \
-e "s/tmp-hostname/$host/" \
-e "s/tmp-alias/Server$alias/" \
-e "s/tmp-address/${address[$host]}/" $host_file
fi
done
template_icinga.cfg
define host{
use generic-host
host_name tmp-hostname
alias tmp-alias
address tmp-address
}
Das Ergebnis sind Dateien wie diese:
define host{
use generic-host
host_name monitor.company.local
alias Server1
address 10.0.0.1
}
Antwort2
Es gibt viele Möglichkeiten, dieses Problem anzugehen.
Ich habe zuvor Bash-Skripte zusammengestellt, die als einzelne Icinga-Prüfung ausgeführt werden. Das Skript überprüft dann alle Hosts in der Subdomäne und gibt einen Status zurück, der davon abhängt, ob oder wie viele Fehler gefunden werden.
In letzter Zeit bin ich ein Fan von benutzerdefinierten Fakten in Puppet geworden. In Kombination mit einer gut geschriebenen Vorlage können Sie Ihre Prüfungen mithilfe einer For-Schleife problemlos über eine große Anzahl von Knoten hinzufügen.