Я пытаюсь настроить Nagios для наблюдения за моими различными машинами, используя группы хостов для определения «машинных ролей», с которыми я запускаю службы для проверки машин по ролям. Однако я хотел бы использовать условные операторы, которые позволили бы мне запускать проверку службы на пересечении двух групп узлов, а не на их объединениях ... то есть с помощью операторов &&, || или ().
Например, представьте, что у меня есть следующие серверы:
Я бы хотел создать следующие группы узлов сети:
Теперь предположим, что мне интересно проверить время ответа HTTP для моих веб-серверов. Затем предположим, что эта конкретная служба Nagios работает из США (Западное побережье), и что у меня есть команда под названием check_http_response_time. Эта команда проверит скорость отклика HTTP-сервера, и я могу предоставить аргумент, определяющий максимальное время отклика перед повышением критического значения.
Моя команда может выглядеть так: check_http_response_time $HOSTNAME$ 50
Традиционно я могу запускать свои проверки, указав список хостов или групп хостов.
define service{
use local-service
hostgroup_name WWW-Servers # Servers = www-us, www-eu
servicegroups WWW Checks
service_description Check HTTP Response Time
check_command check_http_response_time!50
}
Однако с указанным выше определением службы, учитывая, что моя служба Nagios находится на западе США, я мог разумно ожидать, что мой сервер в ЕС вернется критически важным. На самом деле, мне нужны разные пороги для каждого региона (50 для Запада США, 200 для ЕС).
Для этого мне пришлось бы переставить свой сервис для каждого хоста и установить индивидуальный порог для каждого или, альтернативно, переставить мои сервисные группы по ролям и регионам (например, WWW-Servers-EU) и запустить для них определенные пороговые значения. Хотя последнее лучше, но оба они гораздо грязнее, чем хотелось бы ...
Что мне бы хотелось, и то, о чем просит этот пост, - это способ использования хост-групп для выполнения пересечения с использованием условной логики, а не простого объединения. Это могло бы выглядеть так:
define service{
use local-service
hostgroup_name WWW-Servers && US-Servers
servicegroups WWW Checks
service_description Check HTTP Response Time
check_command check_http_response_time!50
}
Затем он запустит проверку только против серверов, которые находятся на обоих WWW-серверах и Группы хостов US-Servers: в моем примере просто www-us. Преимущества такой функции будут значительными для сервисов Nagios, настроенных для крупномасштабного использования.
Доступна ли эта функция? Если нет, будет ли он доступен в будущем? Есть ли альтернативный способ сделать это с учетом самой последней версии Nagios?
Любые советы / предложения приветствуются!
Затем он будет запускать проверку только для серверов, которые находятся как на WWW-серверах, так и на серверах США, в моем примере это просто www-us.
Доступна ли эта функция? Если нет, будет ли он доступен в будущем?
Итан Галстад сказал, что у него нет никаких планов добавить поддержку перекрестков.
Есть ли альтернативный способ сделать это с учетом самой последней версии Nagios?
Ты можешь исключить некоторые хосты из определения, поставив перед хостом или группой хостов !
условное обозначение. Итак, попробуйте что-то вроде этого:
define service{
use local-service
hostgroup_name *,!EU-Servers,!FTP-Servers
servicegroups WWW Checks
service_description Check HTTP Response Time
check_command check_http_response_time!50
}
Мой метод зависит от того, чего я пытаюсь достичь. Обычно я верю, что больше хост-групп - это хорошо, но я также верю в автоматизацию конфигурации Nagios с помощью скриптов, когда это возможно.
Однако для обработки вашего варианта использования я бы написал обработчик, который принимает список членства в группе хостов с помощью макроса $ HOSTGROUPNAMES $ и соответствующим образом анализирует командную строку.
$ HOSTGROUPNAMES $ описывается в Документация Nagios. Он предоставляет разделенный запятыми список групп хостов, членом которых является хост. Анализ командной строки должен быть простым с использованием большинства языков сценариев.
Конфигурация команды может выглядеть так:
check_http_by_hostgroup -g $ HOSTGROUPNAMES $ -H $ HOSTNAME -I $ HOSTADDRESS $ -U $ ARG1 $ -W $ ARG2 $ -C $ ARG3 $
и конфигурация службы могла бы выглядеть так:
define service{
use local-service
hostgroup_name WWW-Servers ; hosts are also members of us, eu, or ap
servicegroups WWW Checks
service_description Check HTTP Response Time
check_command check_http_by_hostgroup|http://foo.bar/|us=30,eu=160|us=90,eu=240,ap=390
}
Затем определите членство в группе хостов в конфигурациях хостов, а не в конфигурации группы хостов.
Возможно, вы захотите посмотреть на возможность зависимости службы / хоста в Nagios.