背景
在云原生环境中,特别是基于 Kubernetes,集群中的 “服务” 在与外部交互时,例如,一个外部的第三方 Web 服务/API 等,而监控这些不同的 endpoint 诊断服务可用性的一个关键点,这里将阐述基于 Kube-prometheus-stacks 如果做到可以监控外部 IP/URL,例如,HTTP/TCP/ICMP 等。
blackbox_exporter 是 Prometheus 官方维护的 exporter之一,是提供一种用于检测 HTTP/S、DNS、TCP 和 ICMP 端点的可用性。
基于 kube-prometheus-stack 安装 blackbox
本文使用了 helm 安装的 prometheus-community/prometheus-blackbox-exporter ,在安装前,需要自行修改要启动的 prober,与是否开启默认的 servicemonitor
|
|
安装
|
|
配置 servicemonitor
blackbox-exporter 实现了多种探针,因此可以传递多个 endpoint 进行探测,下列是 ServiceMonitor
实现的检测外部IP/URL,使用了 icmp 探针,也就是说是在 blackbox-exporter 中配置的模块,探针通过抓取 Kubernetes service 下挂的 endpoint,通过访问 blackbox service 的 /probe
抓取暴露的指标 metrics
|
|
这个 ServiceMonitor 会通过标签匹配对应的 Kubernets service,标签为 app.kubernetes.io/action: probe
所有 namespace 中的存在 这个 Label 的 service。 如果有需要,可以通过指定抓取的 namespace,使用namespaceSelector
创建一个外部 service
这里使用了 Kubernetes 外部 service 方式将外部IP引入到内部
|
|
创建 servicemonitor
创建一个 ServiceMonitor 来探测每个 endpoint,使用了 icmp 探针来抓取 带有标签 app.kubernetes.io/action: probe
的Kubernets service
|
|
Notes
blackbox_exporter 如果想要使用 icmp 探针,必须拥有 root 权限,直接修改 runAsGroup: 0
即可
对于 直接使用 servicemonitor 中的 endpoint 只能识别出一个 IP,原因是,balckbox 暴漏的指标需要带参数访问,下列格式
|
|
而传入多个 target 没有用,只会返回第一个 target 的指标,所以说会出现多个 endpoint 只会出现一个,同样的问题,如果 service 设置为 ClusterIP,也会只有一个指标,必须 type: None
才可以,这就是只有多个 endpoint 才会在拉去指标时请求多个 balckbox exporter 的 API
|
|
目前暂未找到有效的解决方法,但是在清单配置多个 endpoint 就出现多条 serivcemonitor 记录,持续更进该问题,可能可以通过 additionalScrapeConfigs
可以解决该问题