对于在
job
下引用多个模块的 Prometheus 黑盒导出器,params.module
的语义是什么?
我猜这意味着所有模块都已尝试,并且只有所有模块都成功时探测才会成功。我遇到的所有示例都仅使用单个模块(通常是
module: [http_2xx]
),并且到目前为止我还没有配置示例,也没有在源代码中查找它。也许这里有人已经/肯定从直接经验中知道了。
根据
blackbox_exporter
源代码,似乎每个探测器只执行一个测试/模块。您可以在请求中提供模块名称(如文档中建议),或者默认为http_2xx
。
执行多个模块的唯一方法似乎是定义一个单独的 Prometheus 作业,并使用不同的
module
参数值。
Prometheus 的
params
是一个数组而不是单个值的唯一原因是它不限于 blackbox_exporter
,它是一种将 HTTP 参数发送到目标的通用方法(例如,可以使用 /metrics?module=foo&module=bar
之类的东西来指示目标仅返回模块 foo
和 bar
)的指标。
我刚刚在浏览器中进行了测试,如果您使用多个
blackbox_exporter
参数值查询 module
会发生什么情况,blackbox_exporter
将忽略除第一个值之外的所有内容。
您可以在一项作业中配置多个 Blackbox Exporter 模块:
忘记为
module
定义单个 job
参数(尽管无论如何都会有一个默认的 http_2xx)。
相反,请向每个不同的 __param_module
列表添加 static_config
标签。
示例来自论坛帖子
static_configs:
- targets: [ url1, url2, url3 ]
labels: { __param_module: http_2xx }
- targets: [ 8.8.8.8, 8.8.4.4 ]
labels: { __param_module: icmp }
另一个改进可能是使用标签
module
而不是 __param_module
。
这样,module
就会在 Prometheus 指标中显示为标签。
当然,在这种情况下你必须延长
平常
relabel_configs
有了新的:
relabel_configs:
- source_labels: [__address__]
target_label: instance
- source_labels: [__address__]
target_label: __param_target
- source_labels: [module]
target_label: __param_module
- target_label: __address__
replacement: localhost:9115