У меня есть система подготовки, устанавливающая новые хосты в домене test.domain.local, т.е. client44.test.domain.local
, и у меня есть сервер Icinga, который я хотел бы автоматически отслеживать все эти хосты с помощью регулярного выражения, например *.test.domain.local
.
Все клиенты получат nagios-nrpe-server
(версия. 2.13-3), который также настроен так, чтобы сервер icinga мог получать от них данные, и было подтверждено, что он работает.
Мы просто сейчас собираемся отслеживать службы / вещи, которые, как мы знаем, все узлы будут иметь, например, SSH, ответ на ping и т. Д.
Я посмотрел на эта ссылка но мне не совсем понятна связь между хостами, группами хостов и классами обслуживания?
И сервер Icinga, и все клиенты работают под Debian.
Я работал с fredmu над этой проблемой и придумал рабочее решение, вдохновленное ответом Тима Бригама.
Использование по умолчанию generic-host
Это можно решить с помощью сценария, который автоматически генерирует файлы конфигурации хоста на основе шаблона. При желании это может быть сделано как cronjob для регулярного создания этого файла.
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
}
В результате получаются такие файлы:
define host{
use generic-host
host_name monitor.company.local
alias Server1
address 10.0.0.1
}
Есть много способов справиться с этим.
Я ранее собирал сценарии bash, которые будут запускаться как одна проверка icinga. Затем сценарий проверит все хосты в поддомене и вернет состояние, основанное на том, было ли обнаружено сбоев или сколько их.
Совсем недавно я стал поклонником нестандартных фактов в марионетке. В сочетании с шаблоном well writeb вы можете легко добавлять свои проверки к большому количеству узлов, используя цикл for.