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