我有一个配置系统,将新主机设置为域 test.domain.local 中的主机,即client44.test.domain.local
,并且我有一个 Icinga 服务器,我想使用正则表达式自动监控所有这些主机,例如*.test.domain.local
。
所有客户端都将获得nagios-nrpe-server
(版本 2.13-3)包,该包也配置为允许 icinga-server 从它们那里获取数据,并且已经验证可以正常工作。
我们现在只是要监控我们知道所有节点都会有的服务/事物,例如 SSH、对 ping 的响应等。
我看过此链接但我不太清楚主机、主机组和服务类别之间的关系?
Icinga 服务器和所有客户端均运行 Debian。
答案1
我一直在与 fredmu 合作解决这个问题,并受到 Tim Brigham 的回答的启发,想出了一个可行的解决方案。
使用默认generic-host
定义,可以使用基于模板自动生成主机配置文件的脚本来解决此问题。也可以选择将其作为 cronjob 定期生成这些文件。
生成主机配置文件
#!/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
模板_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
}
答案2
有很多方法可以解决这个问题。
我之前已经编写了可以作为单个 icinga 检查运行的 bash 脚本。然后,该脚本将检查子域中的所有主机,并根据是否发现故障或发现多少故障返回状态。
最近,我成了 Puppet 中自定义事实的粉丝。结合编写良好的模板,您可以使用 for 循环轻松地在大量节点中添加检查。