我正在尝试将我们的 Icinga 意大利面变成更易于管理和更少重复的东西。到目前为止,模板、对象继承、多重继承、主机组、服务组等功能已经满足了我的需求,但我只停留在一个方面。
TL;DR:我如何告诉 Icinga,如果该主机是特定主机组的成员,我想向所有成员主机和服务添加一个新的联系人组,即使是针对主机也是其成员的不同主机组定义的服务?
我有两组正交的主机组——一组用于主机类型,它与与主机类型相关的服务和服务依赖项相关联,例如“PostgreSQL 服务器”。另一组组确定节点的责任范围以及谁需要关心每个节点。
我需要根据识别责任区域的主机组将联系规范应用于服务 - 并且希望这样做而不必为每个(主机类型,责任区域)主机组对覆盖每个服务。
所以,假设我定义了一个主机组“postgresql_servers”和相关的服务“postgresql_connection”:
define hostgroup {
hostgroup_name postgres_servers
alias All PostgreSQL servers
}
define service {
use some_service_template
hostgroup_name postgres_servers
contact_groups support_engineers_notifications
service_description POSTGRES_CONNECTION
check_command check_dummy!2!"Passive check failed"
}
然后我有一个主机组“servers_for_bob”和一个联系人“bob”,它们还没有相互关联:
define hostgroup {
hostgroup_name servers_for_bob,
alias These are for Bob
}
define contact {
contact_name bob
alias bob: Bob B.
use some_contact_template
}
define contactgroup {
contactgroup_name team_bob
members bob
}
现在,让主机成为两个主机组的成员很容易:
define host {
use some_host_template
host_name buildingthings.example.com
hostgroups servers_for_bob, postgres_servers
alias The first thing bob built
}
...在此过程中,它将获得针对 . 定义的所有服务postgres_servers
,例如POSTGRES_CONNECTION
. 但是服务通知只会support_engineers_notifications
按照基础服务的定义发送POSTGRES_CONNECTION
。
现在我想team_bob
在主机出现问题或其任何服务出现问题时通知。无需重新声明所有这些服务。
对于主机本身,我可以在对象继承中使用合并规则,contact_groups
例如
define host {
use some_host_template
host_name buildingthings.example.com
hostgroups servers_for_bob, postgres_servers
alias The first thing bob built
contact_groups +team_bob
}
而对于更多的主机,可以使用多主机模板继承来减少重复。
但是,AFAIK 不会导致通过使主机也成为发送通知的成员来隐式定义的服务。postgres_servers
team_bob
这是拓扑:
+--------------------------------------+ +-----------+
| | | Contact: |
| Hostgroup: | | Team Bob |
| postgresql_servers <--????--+ |
| | ^^^^ | |
| | how? +-----------+
| |
| +----------------------------------------+
| | | |
| | | |
| | +-------------------------+ | |
| | |-------------------------| | |
| | || || | |
| | || Host buildingthings || | |
| | || hostgroups: || | |
| | || postgres_servers, || | |
| | || servers_for_bob || | |
| | || || | |
| | || || | |
| | || || | |
| | || || | |
| | || || | |
| | |-------------------------| | |
| | +-------------------------+ | |
| | | |
+--------------------------------------+ | +----------------------+
| | | |
| | | Service: |
| <-------+ POSTGRES_CONNECTION |
| | | |
| Hostgroup | | |
| servers_for_bob | +----------------------+
| ^ |
+----------------------------------------+ +---------+------------+
| | More services... |
+----------+ |
+----------------------+
我如何告诉 Icinga 如果该主机是主机组的成员,servers_for_bob
我想将联系人添加bob
到所有成员主机和服务,即使是通过主机组继承隐式定义的那些?
我已经看到关于使用主机和服务升级来解决此问题的模糊提及,但无法弄清楚如何。
这似乎是一个常见的要求,但我不知道从哪里开始。帮助?
虽然这似乎是小菜一碟,但显然不是:)。您很可能只有 2 个解决方案:
1) 确保每个服务器定义模板不会以更多服务器组中的服务器结束,从而导致将联系人放入服务器模板中的可能性。
2)使用一些自动化工具来生成你的配置,并让它尽可能蓬松(在工具中会很简单)。我们一直在使用 Puppet 来处理 nagios 配置,虽然它会生成大量配置,但没关系,因为生成它的代码是基于一些非常简单的模板。
你可以通过升级来做到这一点。我们使用它向我们的 NOC 团队发送短信。