正交定义主机/主机组的服务和联系人?

正交定义主机/主机组的服务和联系人?

我正在尝试将我们的 Icinga spaghetti 变成更易于管理且重复性更低的东西。到目前为止,模板、对象继承、多重继承、主机组、服务组等功能已经满足了我的需求,但我在一个方面遇到了困难。


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
}

对于较多主机,可以使用多个主机模板继承,以减少重复。

然而,据我所知,这不会导致服务通过使主机成为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...     |                    
                                         +----------+                      |                    
                                                    +----------------------+                    

(谢谢http://asciiflow.com/

我如何告诉 Icinga,如果该主机是主机组的成员,servers_for_bob我想将联系人添加bob到所有成员主机和服务,即使是通过主机组继承隐式定义的主机和服务?

我有看到模糊地提到使用主机和服务升级来解决这个问题,但还不知道该怎么做。

这似乎是一个常见的要求,但我不知道下一步该怎么做。帮忙吗?

答案1

你可以通过升级来实现。我们使用它来向我们的 NOC 团队发送短信。

define serviceescalation {
    service_description *
    host_name first_host, second_host
    first_notification 4
    last_notification 10
    notification_interval 20
    contacts NOC
}

答案2

虽然这看起来很容易,但显然并非如此。您很可能只有 2 个解决方案:

1) 确保每个服务器定义模板不会以多个服务器组中的服务器结尾,从而有可能将联系人放入服务器模板中。

2) 使用一些自动化工具来生成您的配置,并使其尽可能简单(在工具中会很简单)。我们一直在使用 Puppet 来处理 nagios 配置,虽然它会生成大量配置,但没关系,因为生成它的代码基于一些非常简单的模板。

相关内容