使用 Icinga2 对每个主机进行多次 HTTP 检查

使用 Icinga2 对每个主机进行多次 HTTP 检查

为主机配置多个 HTTP 检查的最佳做法是什么?

我知道有一种“应用”方法:

apply Service "http" for (http_vhost => config in host.vars.vhosts) {
    ...
}

但是我也需要“http_uri”值?!

如何通过常规配置文件执行此操作以及如何通过 Director 执行此操作?我必须在哪里以及如何修改模板才能将多个 HTTP 检查链接到特定主机?

答案1

我不使用 director,但我可以告诉你如何在普通代码中做到这一点。基本上我会创建一些字典/列表,正如你所说(在不同的范围内)。你必须在那里放置变量 - 那些你想更改的变量(例如 URL)。

因此,您可以用数据定义一个变量。它可以位于主机下,也可以在全局范围内创建它。

globals.http_urls = [ "/uril1", "/url2" ]

或者

object Host "testhost" {
    host.address = 123.123.123.123
    vars.http_urls = [ "/url1", "/url2" ]
} 

然后你可以迭代该变量

apply Service "http-url" for (url in globals.http_url) {
    command = http

    # ... other http check variables ...

    vars.http_url = url

    # ... other variables ...

    assign where host.name == "testhost"
}

您还可以遍历字典,它的工作原理如下:

globals.testdict = {
    "server1" : "testdict",
    "server2" : "testweb",
    etc..
}

只需使用键 => 值格式定义

apply Service "http-url" for (server => url in globals.testdict) {
    command = http
    display_name = "http check " + server

    vars.http_url = url
    .. etc

    assign where host.name == testserver
}

答案2

我并不是 Icinga 文档的忠实粉丝,但是它对如何在 Director 中做到这一点进行了很好的解释。

首先,您需要创建一个数组字段,如下所述:https://icinga.com/docs/icinga-director/latest/doc/14-Fields-example-interfaces-array/

然后您需要创建一个服务应用规则并为您的数组字段添加申请,如下所述:https://icinga.com/docs/icinga-director/latest/doc/15-Service-apply-for-example/

关于你的问题

但是我也需要“http_uri”值?!

那要看情况。如果你保留它,则检查的 uri 将是/。我不确定是否可以check_httphttp_uri和配置不同的值http_vhost

让我很困惑的是,http_uri的参数check_http只是pathURI 的组成部分。如果你尝试使用完整的 URI,就会发生奇怪的事情。

相关内容