您可以使用puppet-icinga2,它允许收集有关节点的信息。在客户端,您将创建可导出的资源(木偶代码如下):
@@icinga2::object::host { $::fqdn:
display_name => $::fqdn,
address => $::ipaddress_eth0,
check_command => 'hostalive',
target => "/etc/icinga2/zones.d/${::domain}/hosts.conf",
zone => $::fqdn,
}
@@::icinga2::object::endpoint { "$::fqdn":
host => "$::ipaddress_eth0",
}
@@::icinga2::object::zone { "$::fqdn":
endpoints => [ "$::fqdn", ],
parent => 'master',
}
将被传播到master(需要PuppetDB):
Icinga2::Object::Host <<| |>> { }
Icinga2::Object::Endpoint <<| |>> { }
Icinga2::Object::Zone <<| |>> { }
只要 puppet master 拥有稳定的 DNS,您就会更新 zone.conf。在puppet agent 在客户端主机信息上运行后,在 PuppetDB 中注册。在下一次 puppet agent 在 master 上运行时,它将获得有关该节点的最新信息。
然后您可以从 icinga master 执行检查:
apply Service "ping" to Host {
import "generic-service"
check_command = "ping"
zone = "master" //execute check from master zone
assign where "linux-server" in host.groups
}
请注意,还有其他自动化集成,例如 Ansible,可能会提供类似的功能。