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

Nagios - хост наследовать от нескольких шаблонов?

Возможно ли, чтобы хост в 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.