Ваш хост определяет пользовательский атрибут "http_vhosts" как словарь, но он никогда не используется (нет применения для определения итерации правила для этого словаря и сервисных объектов geberating).
Вместо этого правило применения службы (без цикла for) просто применяет службу "httpS". Случайно установлен настраиваемый атрибут хоста "http_ssl" - он должен иметь значение true в виде логического значения, а не число в виде строки (это всегда так).
Вы, вероятно, хотите проверить несколько URI, а не только /.
Мое предложение (2 решения):
1) Исправьте правило применения службы и удалите пользовательские атрибуты http_ * из определения вашего хост-объекта. Вместо этого добавьте их в правило применения сервиса:
apply Service "httpS" {
import "generic-service"
check_command = "http"
vars.http_uri = "/"
vars.http_ssl = true
assign where host.name == "mailserver-01"
}
Вы можете найти все пользовательские атрибуты, используемые в качестве параметров команды для HTTP CheckCommand, в документации: http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/plugin-check-commands#plugin-check- команда-клиент
2) Вместо этого используйте службу apply для правила и переберите словарь http_vhosts, определенный на хосте.
vars.http_vhosts["https /"] = {
http_ssl = true
http_uri = "/"
}
Обратите внимание на название здесь: «https /» будет именем сгенерированной службы. http_ssl и http_uri - это те же имена, что и обязательные настраиваемые атрибуты http CheckCommand.
Волшебство происходит внутри правила apply for: ключом словаря будет имя службы. Значение словаря является вложенным словарем и содержит в качестве ключей http_uri и http_ssl. В примере это называется «config». Этот конфигурационный словарь имеет ту же структуру, что и атрибут "vars", поэтому мы можем просто добавить его в службу и применить для определения.
apply Service for (servicename => config in host.vars.http_vhosts) {
import "generic-service"
check_command = "http"
vars += config
}
Проверьте конфигурацию с помощью icinga2 daemon -C, а затем посмотрите на созданные сервисные объекты, чтобы увидеть, какие настраиваемые атрибуты генерируются (список объектов icinga2).
Одна хорошая вещь - все хосты, для которых определен пользовательский атрибут http_vhosts, будут генерировать эти сервисные объекты, нет необходимости в выражении «назначать где» (возможно, вместо этого добавьте ignore where для исключений). При правильной стратегии вы напишите «Применить правила» только один раз, и в будущем добавите только новые хосты с соответствующим словарем атрибутов :-)
http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/monitoring-basics#using-apply-for
Хотя решение 2) требует дополнительных знаний о языке конфигурации icinga 2 и его ключевых словах, типах значений и фокусах. Тем не менее, мы думаем, что такие методы и лучшие практики помогают сократить длительное обслуживание с принятием и изменением файлов.
Вы также можете пойти дальше и использовать условия if-else для разных пороговых значений на основе имени хоста. Или используйте функции для определения динамических порогов, например, на основе периодов времени.