Prometheus Blackbox Exporter TCP 探测返回值为 0,即使端口已打开(Iperf3 服务器)

Prometheus Blackbox Exporter TCP 探测返回值为 0,即使端口已打开(Iperf3 服务器)

我遇到了一个奇怪的问题,过去几天我一直在研究它。

设置

我有一个在 Docker 中运行的 Iperf3 服务器,运行于以下内部地址和端口:10.10.2.2:5201

我还在 Docker 中运行 Prometheus 和 Grafana,以监控不同的服务。

一切正常,包括用于 HTTP 和 HTTPS 的 Prometheus Endpoint 导出器和 Prometheus Blackbox 导出器。

但是,我还想使用带有 Blackbox 导出器的简单 TCP 探测器监控此 Iperf3 服务器。

以下是我为 Prometheus 和 Blackbox 导出器设置的配置文件。

Prometheus.yml:(抓取配置下的黑盒作业)

  - job_name: 'blackbox-tcp'
    scrape_interval: 60s
    metrics_path: /probe
    params:
      module: [tcp_connect]  # Look for TCP response
    static_configs:
      - targets:
        - http://10.10.2.2:5201       # Iperf3 server
        - http://10.10.2.4:9201       # Portainer agent
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 10.10.2.4:9095  # The blackbox exporter's real hostname:port.

Blackbox.yml:(定义模块)

modules:
  http_2xx:
    prober: http
    http:
      method: GET
  http_post_2xx:
    prober: http
    http:
      method: POST
  tcp_connect:
    prober: tcp
    timeout: 5s
  pop3s_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false
  ssh_banner:
    prober: tcp
    tcp:
      query_response:
      - expect: "^SSH-2.0-"
  icmp:
    prober: icmp

为了表明 Prometheus 已启动并正在运行,以下是与导出器连接的 HTTP 和 TCP 探测器的一部分:

黑盒HTTP

黑盒TCP

最后,我能够通过 Netcat 和 Telnet 探测 TCP,以确认服务10.10.2.2:5201确实正在运行:

$ if nc -w 3 -z 10.10.2.2 5201; then echo "1"; fi
1

$ if echo -e '\x1dclose\x0d' | telnet 10.10.2.2 5201 > /dev/null; then echo "1"; fi
1

问题

问题就在这里:当我尝试10.10.2.2:5201在 Grafana 中监控目标时,它显示查询值为0,又名 Down。

Grafana TCP

此外,当我尝试运行查询检查器或直接在 Prometheus 中运行查询时,我会确认它返回一个值0

Prometheus 查询 0

我相信我已经按照文件要求做了所有事情,并且此主题还确认我的配置对于 TCP 探测来说是正确的。

我只是不明白如何让 Prometheus 返回查询值1,以表明端口已打开并且在这种情况下 Iperf3 服务正在运行?

我一直想知道是否需要在下添加一些send和命令,但一直没有找到。非常感谢任何意见和帮助!expectBlackbox.ymlquery_response

答案1

我遇到了完全相同的问题,直到我意识到我必须http://从目标中移除该部件。下面的方法应该对你有用。

 - job_name: 'blackbox-tcp'
    scrape_interval: 60s
    metrics_path: /probe
    params:
      module: [tcp_connect]  # Look for TCP response
    static_configs:
      - targets:
        - 10.10.2.2:5201       # Iperf3 server
        - 10.10.2.4:9201       # Portainer agent
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 10.10.2.4:9095  # The blackbox exporter's real hostname:port.

相关内容