object Host "mailserver-01" { import "generic-host" address = "74.125.136.17" /* ip for mail.google.com */ vars.os = "Linux" vars.http_vhosts["http"] = { http_uri = "/" } vars.http_ssl = "1" vars.http_warn_time = "5" vars.http_critical_time = "10" vars.notification["mail"] = { groups = [ "icingaadmins" ] } }
以下是默认services.conf文件的片段
apply Service "httpS" { import "generic-service" check_command = "http" assign where host.name == "mailserver-01" }
虽然icingaweb2仪表板显示OK / green,但我不确定它是否正确
解决方法
相反,服务应用规则(没有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://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/plugin-check-commands#plugin-check-command-http中找到用作http CheckCommand的命令参数的所有自定义属性
2)使用服务申请代替规则并循环在主机上定义的http_vhosts字典.
vars.http_vhosts["https /"] = { http_ssl = true http_uri = "/" }
请注意这里的命名:“https /”将是生成的服务名称. http_ssl和http_uri与http CheckCommand所需的自定义属性完全相同.
魔法发生在申请规则内:字典键将是服务名称.字典值是嵌套字典,包含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守护程序-C验证配置,然后查看生成的服务对象以查看生成的自定义属性(icinga2对象列表).
一件好事 – 所有定义了http_vhosts自定义属性的主机都将生成这些服务对象,不需要外部“assign where”表达式(可能更多地忽略忽略的位置).使用正确的策略,您只需编写一次申请规则,并且仅在以后添加具有匹配的自定义属性字典的新主机:-)
http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/monitoring-basics#using-apply-for
虽然解决方案2)需要有关icinga 2配置语言及其关键字,值类型和魔术技巧的高级知识.然而,我们认为这些方法和最佳实践有助于通过采用和更改文件来减少长期维护.
您还可以进一步使用基于主机名的不同阈值的if-else条件.或者使用函数来定义基于时间段的动态阈值.