Назад | Перейти на главную страницу

Ортогонально определяете службы и контакты для хоста / хост-группы?

Я пытаюсь превратить наши спагетти 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...     |                    
                                         +----------+                      |                    
                                                    +----------------------+                    

(Спасибо http://asciiflow.com/)

Как мне сообщить Icinga, что если этот хост является членом группы хостов servers_for_bob Я хочу добавить контакт bob ко всем узлам и службам-членам, даже тем, которые определены неявно через наследование группы узлов?

Я видели расплывчатые упоминания об использовании эскалации хоста и обслуживания для решения этой проблемы, но не могу понять, как это сделать.

Похоже, это обычное требование, но я не уверен, что делать дальше. Помогите?

Хотя казалось бы, это пустяк, но, видимо, это не так :). Скорее всего, у вас всего 2 решения:

1) Убедитесь, что каждый шаблон определения сервера не заканчивается серверами в большем количестве серверных групп, что дает возможность помещать контакты в шаблоны серверов.

2) Используйте какой-нибудь инструмент автоматизации, чтобы сгенерировать вашу конфигурацию и оставить ее настолько пушистой, насколько это возможно (в инструменте это будет просто). Мы использовали Puppet для обработки конфигурации nagios, и, хотя он генерирует большой объем конфигурации, это нормально, потому что код, который сгенерировал его, основан на некоторых довольно упрощенных шаблонах.

Вы можете сделать это с помощью эскалации. Мы используем его для отправки SMS нашей команде NOC.

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