如何使用 Icinga 版本 2 监控远程“https”?

如何使用 Icinga 版本 2 监控远程“https”?

我在 VirtualBox 中的 ubuntu 14.04.3 上安装了 icinga 2.3.11。我尝试监控“https”端口 443,例如“https://mail.google.com“这里。下面是来自默认 host.conf 文件的片段

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/绿色,但我不确定这是否正确

答案1

您的主机将自定义属性“http_vhosts”定义为字典,但从未使用过(没有应用定义迭代该字典并生成服务对象的规则)。

相反,服务应用规则(没有 for 循环)只应用服务“httpS”。意外地设置了主机自定义属性“http_ssl”——它应该是真的作为布尔值而不是字符串数字(始终是正确的)。

您可能想要检查多个 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-command-http

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 自定义属性的主机都将生成这些服务对象,不需要额外的“分配位置”表达式(也许应该添加忽略位置以处理例外情况)。使用正确的策略,您只需编写一次应用规则,并且将来只需添加具有匹配自定义属性字典的新主机 :-)

http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/monitoring-basics#using-apply-for

尽管解决方案 2) 需要对 icinga 2 配置语言及其关键字、值类型和魔术技巧有深入的了解。但我们认为,这些方法和最佳实践有助于减少采用和更改文件的长期维护工作。

您还可以进一步使用 if-else 条件根据主机名设置不同的阈值。或者使用函数根据时间段定义动态阈值。

答案2

在以下位置找到 http 命令

/usr/share/icinga2/include/command-plugins.conf

在这个例子中,我尝试监控https://mail.google.com 下面是 /etc/icinga2/conf.d/hosts.conf

object Host "www.google.com" {
address = "74.125.136.84"
check_command = "http"
vars.http_vhost = "mail.google.com"
vars.http_ssl = "1"
}

这是 icingaweb2 仪表板上的样子 在此处输入图片描述

示例2

object Host "secure.example.com" {
    address = "14.28.83.22"
    check_command = "http"
    vars.http_vhosts["secure.example.com"] = {
    http_uri = "/merchant/login.aspx"    
    }
        vars.notification["mail"] = {
        groups = [ "icingaadmins" ]
        }
    vars.http_ssl="1"
}

相关内容