Возможно ли, чтобы хост в Nagios использовал несколько шаблонов?
Я пытаюсь контролировать некоторые серверы MSSQL. Некоторые из них представляют собой автономные отдельные серверы с одним экземпляром, а другие используют MSCS для формирования кластеров высокой доступности с двумя узлами.
То, что я хочу отслеживать на определенном сервере, отличается от того, что я хочу отслеживать для конкретного экземпляра SQL. например Я хочу использовать шаблон windows-server
чтобы рассказать мне общие вещи об окнах для данного сервера. Точно так же я бы хотел использовать определенный шаблон SQL под названием sql-instance
для мониторинга специфичных для SQL вещей, таких как подключенные пользователи, пакетные запросы и т. д.
Для моих двухузловых кластеров это довольно просто - у меня есть три определения хоста: windows-server
для каждого конкретного узла и sql-instance
указывая на DNS-имя кластера.
Для отдельных экземпляров я хотел бы иметь один хост, который использует как windows-server
и sql-instance
шаблоны вместе, потому что они оба должны указывать на одно и то же имя хоста. Однако любые попытки сделать:
define host {
use windows-server, sql-instance
}
или
define host {
use windows-server
use sql-instance
}
приводит к тому, что nagios выбирает только один из шаблонов и игнорирует другой.
Итак, как лучше всего реализовать множественное наследование шаблонов в Nagios?
Я решил это, используя обходной путь. Вместо того, чтобы унаследовать конкретный хост от нескольких шаблонов, я привязал свои службы к различным группам хостов и просто поместил каждый хост в несколько групп хостов:
define host {
use generic-host
hostgroups sql-servers,sql-instances
}
Как насчет наследования одного шаблона от другого? Вот как я это делаю на своих nagios. Вы можете поставить use windows-server
в sql-instance
определение шаблона сервера, а затем все, что использует определение экземпляра sql, также унаследует определение сервера Windows. В этом случае вы также можете переименовать sql-instance в win-sql-instance.
Начиная с 3.x, Nagios из коробки поддерживает синтаксис из вашего первого примера:
define host {
use windows-server,sql-instance
}
См. Раздел «Приоритет с несколькими источниками наследования» в http://nagios.sourceforge.net/docs/3_0/objectinheritance.htmlи «Наследование объекта» в журнал изменений.
(Я бы добавил это как комментарий к принятому ответу, но у меня нет необходимой репутации для этого)
Насколько я помню, вам нужно заново объявлять define host {} каждый раз, когда у вас появляется новый хост.
Что-то такое:
define host{
use windows-server
host_name lan
alias lan
address WWW.XXX.YYY.ZZZ
}
define host{
use sql-instance
host_name lan
alias lan
address WWW.XXX.YYY.ZZZ
}
Надеюсь, что это поможет вам.
ps: Я могу использовать мой конфигурационный файл nagios, если хотите.
Я пробовал это в своей среде Icinga, и это работает для Icinga:
define host {
host_name Testhost
address 192.168.220.1
check_command check-host-alive
notification_interval 15
notification_options d,u,r
max_check_attempts 3
active_checks_enabled 1
passive_checks_enabled 0
notifications_enabled 1
check_period 24x7
notification_period 24x7
contact_groups admins
parents Email Prim,Source
use Default_timeperiod_interval_1,Default_timeperiod_interval_10
}
Я не уверен насчет Nagios, но это не должно сильно отличаться.
в моих файлах nagios cfg все ссылки, в которых есть несколько записей для «использовать шаблон шаблон1, шаблон2», не имеют пробелов между первым шаблоном, запятой и вторым шаблоном. я добавил пробел перед вторым шаблоном, и нагиос пожаловался:
Error: Template ' template_name' specified in host definition could not be not found (config file '/usr/local/nagios/etc/objects/hosts.cfg'
Определите sql-instance как шаблон хоста, который, в свою очередь, использует сервер Windows в качестве шаблона.
define host{
name windows-server ; The name of this host template
use generic-host ; Inherit default values from the generic-host template
check_period 24x7 ; By default, Windows servers are monitored round the clock
check_interval 5 ; Actively check the server every 5 minutes
max_check_attempts 10 ; Check each server 10 times (max)
check_command check-host-alive ; Default command to check if servers are "alive"
notification_period 24x7 ; Send notification out at any time - day or night
notification_interval 30 ; Resend notifications every 30 minutes
notification_options d,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
hostgroups windows-servers ; Host groups that Windows servers should be a member of
register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
define host{
name sql-instance ; The name of this host template
use windows-server ; Inherit default values from the
register 0
}
Затем в фактическом определении хоста просто use sql-instance
и установить register 1
.