Alle Hosts im Subnetz zur Icinga-Überwachung hinzufügen, ohne Hostname/IP anzugeben

Alle Hosts im Subnetz zur Icinga-Überwachung hinzufügen, ohne Hostname/IP anzugeben

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-serverdas 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-hostkö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.

verwandte Informationen