blockbox配置文件详解与优化

blockbox.yml 优化

powershell 复制代码
modules:
  http_general:
    prober: http
    http:
      valid_status_codes: []
  http_2xx:
    prober: http
    http:
  http_post_2xx:
    prober: http
    http:
      method: POST
  tcp_connect:
    prober: tcp
  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-"
  irc_banner:
    prober: tcp
    tcp:
      query_response:
        - send: "NICK prober"
        - send: "USER prober prober prober :prober"
        - expect: "PING :([^ ]+)"
          send: "PONG ${1}"
        - expect: "^:[^ ]+ 001"
  icmp:
    prober: icmp

  https_general_probe:
    prober: http                  # 设置为 HTTP prober
    timeout: 10s
    http:
      method: GET
      valid_status_codes: [200]
      fail_if_ssl: false          # 不强制失败于非 SSL
      fail_if_not_ssl: true       # 强制失败于非 SSL
      tls_config:
        insecure_skip_verify: true  # 跳过证书验证

  etcd_tcp_probe:
    prober: tcp
    tcp:
      query_response: []

  http_probe_service:
    prober: tcp
    tcp:
      query_response: []

  vip_tcp_probe:
    prober: http
    http:
      method: GET
      fail_if_body_not_matches_regexp: # 检查响应体
        - "ok"

Blackbox 配置表格版解释与优化建议

blackbox 配置整理成 表格版说明 ,再给出 命名问题优化重构建议


一、配置表格版解释

1)模块总览

模块名 探测类型 主要用途 成功条件 备注
http_general HTTP 检查 Web 服务是否有响应 只要能返回 HTTP 响应即可 不限制状态码
http_2xx HTTP 检查 Web/接口是否正常成功 返回 2xx 默认就是 2xx 成功
http_post_2xx HTTP 用 POST 方法检查接口 POST 后返回 2xx 未配置 body/headers
tcp_connect TCP 检查端口是否可连通 TCP 建连成功 最基础端口探测
pop3s_banner TCP + TLS 检查 POP3S 服务 TLS 成功,且返回 +OK 证书严格校验
ssh_banner TCP 检查 SSH 服务 返回 SSH-2.0- 开头 比单纯端口探测更准确
irc_banner TCP 检查 IRC 服务 完成基本握手并收到 001 带简单交互
icmp ICMP 类似 ping,检查主机可达 ICMP 探测成功 可能受权限/防火墙影响
https_general_probe HTTP(S) 检查 HTTPS 页面 必须 HTTPS,且返回 200 跳过证书校验
etcd_tcp_probe TCP 检查 etcd 端口可连接 TCP 建连成功 不代表 etcd 真健康
http_probe_service TCP 实际是检查端口可连接 TCP 建连成功 名字像 HTTP,实际不是
vip_tcp_probe HTTP 检查页面内容是否包含 ok HTTP 成功且 body 匹配 ok 名字像 TCP,实际是 HTTP

2)逐项详细解释

http_general

配置 含义
模块名 http_general 通用 HTTP 探测
prober http 使用 HTTP 探测器
valid_status_codes [] 不限制响应状态码

通俗解释:

这个模块只关心"网页/接口有没有响应",不太关心返回的是 200、404 还是 500。

只要能拿到 HTTP 响应,一般就算服务在线。

适合:

  • 粗略探活
  • 只检查服务有没有挂掉

http_2xx

配置 含义
模块名 http_2xx 标准 HTTP 成功探测
prober http 使用 HTTP 探测器
http 使用默认 HTTP 配置

通俗解释:

只要返回 2xx 才算成功。

这是最常见的 HTTP 健康检查方式。

适合:

  • Web 页面可用性
  • 接口成功性检查

http_post_2xx

配置 含义
模块名 http_post_2xx POST 方式的 HTTP 探测
prober http 使用 HTTP 探测器
method POST 用 POST 请求

通俗解释:

这个模块会发 POST 请求,默认仍然要求返回 2xx。

但因为没配置 body/header,所以它更像"空 POST 探测"。

适合:

  • 支持空 POST 的接口
  • webhook 类入口连通性检查

风险:

  • 很多接口要求 JSON/body/header,不配置会失败

tcp_connect

配置 含义
模块名 tcp_connect 基础 TCP 连通性检查
prober tcp 使用 TCP 探测器

通俗解释:

只看端口能不能连上。

不检查服务协议是否正常。

适合:

  • MySQL/Redis/SSH 等端口基础探活
  • 网络连通性初筛

pop3s_banner

配置 含义
模块名 pop3s_banner POP3S 服务检查
prober tcp 使用 TCP 探测器
tls true 建立 TLS 连接
expect ^+OK 期望欢迎语以 +OK 开头
insecure_skip_verify false 不跳过证书校验

通俗解释:

连接 POP3S 服务后,要求:

  1. TLS 建立成功
  2. 证书合法
  3. 服务返回 +OK

适合:

  • 邮件服务严格健康检查

ssh_banner

| 项 | 配置 | 含义 |

|---||---|

| 模块名 | ssh_banner | SSH Banner 检查 |

| prober | tcp | 使用 TCP 探测器 |

| expect | ^SSH-2.0- | 返回内容要像标准 SSH 头 |

通俗解释:

不只是 22 端口通,而是真的有 SSH 服务在回应。

适合:

  • SSH 服务探测
  • 防止端口被别的程序占用但误判正常

irc_banner

配置 含义
模块名 irc_banner IRC 服务交互探测
prober tcp 使用 TCP 探测器
send NICK prober / USER ... 模拟客户端登录
expect PING :([^ ]+) 期待服务器 PING
send PONG ${1} 自动回复 PONG
expect ^:[^ ]+ 001 期待登录成功欢迎码

通俗解释:

这个模块会模拟一个简化版 IRC 客户端,确认服务器真的能完成基本协议交互。

适合:

  • IRC 服务真实性检查

icmp

配置 含义
模块名 icmp ICMP 可达性检查
prober icmp 使用 ICMP 探测器

通俗解释:

ping 类似,检查主机能不能通。

注意:

  • ICMP 失败不一定是主机挂了,可能只是被禁 ping

https_general_probe

配置 含义
模块名 https_general_probe HTTPS 专用检查
prober http 使用 HTTP 探测器
timeout 10s 超时时间 10 秒
method GET GET 请求
valid_status_codes [200] 必须返回 200
fail_if_ssl false 使用 SSL 不会失败
fail_if_not_ssl true 不是 HTTPS 就失败
insecure_skip_verify true 跳过证书校验

通俗解释:

这是"必须走 HTTPS 的 GET 200 检查"。

但证书问题不拦截。

适合:

  • 内网自签 HTTPS
  • 强制要求站点启用 HTTPS

etcd_tcp_probe

配置 含义
模块名 etcd_tcp_probe etcd TCP 端口检查
prober tcp 使用 TCP 探测器
query_response [] 不发内容、不校验响应

通俗解释:

只是看看 etcd 端口通不通。

不能证明 etcd 本身功能正常。

适合:

  • 2379/2380 端口基础监测

http_probe_service

配置 含义
模块名 http_probe_service 名字像 HTTP,其实是 TCP
prober tcp 使用 TCP 探测器
query_response [] 不发内容、不校验响应

通俗解释:

虽然名字叫 http_probe_service,但其实它根本不发 HTTP 请求,只是测端口能不能连。

问题:

  • 模块名和行为不一致,容易误导别人

vip_tcp_probe

配置 含义
模块名 vip_tcp_probe 名字像 TCP,其实是 HTTP
prober http 使用 HTTP 探测器
method GET GET 请求
fail_if_body_not_matches_regexp ok body 必须包含 ok

通俗解释:

访问一个页面,如果页面内容里没有 ok 就失败。

适合:

  • VIP/LB 健康页检查
  • /health/status 这种接口

问题:

  • 名字里带 tcp,但实际是 HTTP 检查

二、哪些模块命名不合理

下面是最值得指出的几个。

当前名称 实际行为 问题 建议名称
http_probe_service TCP 连通性探测 名字像 HTTP,实际不是 HTTP tcp_service_connect / service_tcp_connect
vip_tcp_probe HTTP GET + body 匹配 名字像 TCP,实际是 HTTP vip_http_healthcheck / http_body_ok_probe
https_general_probe HTTPS GET 200,跳过证书校验 名字有点泛,不突出"必须 HTTPS、忽略证书" https_get_200_insecure
etcd_tcp_probe etcd 端口连通性 名字没错,但容易让人误以为"检查 etcd 健康" etcd_tcp_connect
http_general HTTP 有响应即可 名字可以,但"general"不够具体 http_any_status
http_2xx HTTP 2xx 检查 比较合理 可保留
http_post_2xx POST 请求 2xx 检查 合理 可保留或改为 http_post_any_2xx

三、命名优化建议

建议命名时统一规则,让别人一看就知道:

推荐格式:

协议_方法/类型_成功条件_特殊约束

例如:

  • http_get_2xx
  • http_post_2xx
  • http_any_status
  • https_get_200_insecure
  • tcp_connect
  • tcp_ssh_banner
  • tcp_pop3s_banner_tls_verify
  • http_get_body_ok
  • etcd_tcp_connect

这样一眼就知道:

  • 用什么协议
  • 做什么动作
  • 判定标准是什么

四、建议怎么优化重构

方案原则

1. 名字和行为一致

避免:

  • 名叫 http,实际是 tcp
  • 名叫 tcp,实际是 http

2. 同类模块统一风格

比如所有 HTTP 模块都以 http_ 开头:

  • http_get_2xx
  • http_post_2xx
  • http_any_status
  • http_get_body_ok

所有 TCP 模块都以 tcp_ 开头:

  • tcp_connect
  • tcp_ssh_banner
  • tcp_etcd_connect

3. 把"业务用途"和"技术方式"分开

例如 vip_tcp_probe 这种名字带有业务含义(vip)但技术协议不清晰。

更建议:

  • 如果是公共模块,名字写技术含义
  • 业务 target 放在 Prometheus 的 target labels 里体现

五、推荐重构后的配置命名

下面是按你的配置整理后的 更清晰版本命名建议

原名称 建议新名称 原因
http_general http_any_status 更准确表达"不限制状态码"
http_2xx http_get_2xx 明确是 HTTP GET 默认检查
http_post_2xx http_post_2xx 可以保留
tcp_connect tcp_connect 可以保留
pop3s_banner tcp_pop3s_banner_tls_verify 明确 TLS 且校验证书
ssh_banner tcp_ssh_banner 统一 tcp 前缀
irc_banner tcp_irc_login 更贴近实际操作过程
icmp icmp_ping 更直观
https_general_probe https_get_200_insecure 明确 HTTPS + 200 + 跳过证书
etcd_tcp_probe tcp_etcd_connect 明确只是 TCP connect
http_probe_service tcp_service_connect 修正误导性命名
vip_tcp_probe http_get_body_okvip_http_healthcheck 根据你想强调技术还是业务来命名

六、重构后的配置示例

更容易维护的写法:

yaml 复制代码
modules:
  http_any_status:
    prober: http
    http:
      valid_status_codes: []

  http_get_2xx:
    prober: http
    http: {}

  http_post_2xx:
    prober: http
    http:
      method: POST

  tcp_connect:
    prober: tcp

  tcp_pop3s_banner_tls_verify:
    prober: tcp
    tcp:
      query_response:
        - expect: "^\\+OK"
      tls: true
      tls_config:
        insecure_skip_verify: false

  tcp_ssh_banner:
    prober: tcp
    tcp:
      query_response:
        - expect: "^SSH-2.0-"

  tcp_irc_login:
    prober: tcp
    tcp:
      query_response:
        - send: "NICK prober"
        - send: "USER prober prober prober :prober"
        - expect: "PING :([^ ]+)"
          send: "PONG ${1}"
        - expect: "^:[^ ]+ 001"

  icmp_ping:
    prober: icmp

  https_get_200_insecure:
    prober: http
    timeout: 10s
    http:
      method: GET
      valid_status_codes: [200]
      fail_if_ssl: false
      fail_if_not_ssl: true
      tls_config:
        insecure_skip_verify: true

  tcp_etcd_connect:
    prober: tcp
    tcp:
      query_response: []

  tcp_service_connect:
    prober: tcp
    tcp:
      query_response: []

  http_get_body_ok:
    prober: http
    http:
      method: GET
      fail_if_body_not_matches_regexp:
        - "ok"


七、如果进一步优化,我会怎么做
优化点 1:删除没必要的空配置
比如:

tcp:
  query_response: []
很多场景可以直接简化成:

prober: tcp
所以这两个:

etcd_tcp_probe
http_probe_service
其实可以写得更简洁。

例如:

tcp_etcd_connect:
  prober: tcp

tcp_service_connect:
  prober: tcp
优化点 2:HTTP body 检查最好加状态码限制
你现在的:

vip_tcp_probe:
  prober: http
  http:
    method: GET
    fail_if_body_not_matches_regexp:
      - "ok"
建议补一个:

valid_status_codes: [200]
否则某些异常页面也可能包含 ok 这个词,造成误判。

更稳妥版本:

http_get_200_body_ok:
  prober: http
  http:
    method: GET
    valid_status_codes: [200]
    fail_if_body_not_matches_regexp:
      - "ok"
优化点 3:etcd 更推荐用 HTTP 健康接口
如果 etcd 开启了健康检查接口,最好用 HTTP 模块,比如:

etcd_http_health:
  prober: http
  http:
    method: GET
    valid_status_codes: [200]
    fail_if_body_not_matches_regexp:
      - "true"
比如探测:

/health
这样比只测 TCP 更有意义。

优化点 4:HTTPS 探测可区分"严格证书"和"忽略证书"两类
例如分成两个模块:

https_get_200_strict:
  prober: http
  http:
    method: GET
    valid_status_codes: [200]
    fail_if_not_ssl: true
    tls_config:
      insecure_skip_verify: false

https_get_200_insecure:
  prober: http
  http:
    method: GET
    valid_status_codes: [200]
    fail_if_not_ssl: true
    tls_config:
相关推荐
一只鼠标猴2 小时前
甲方安全运营:漏洞整改推动实操指南
运维·安全·网络安全·安全架构·安全运营·漏洞整改
DianSan_ERP2 小时前
淘宝订单接口集成中如何正确处理消费者敏感信息的安全与合规问题?
大数据·运维·网络·人工智能·安全·servlet
蚰蜒螟2 小时前
深入浅出:从JVM线程创建到Linux内核clone系统调用
linux·运维·jvm
IMPYLH2 小时前
Linux 的 sha256sum 命令
linux·运维·服务器·网络·bash·哈希算法
chimooing2 小时前
OpenClaw 浏览器自动化:Playwright 深度集成
运维·自动化
笨熊呆呆瓜2 小时前
【网络基础科普】交换机 MAC 地址全解析:查询方法、System MAC 与 Bridge MAC 的区别,以及“为什么只差 1”
网络
KKKlucifer2 小时前
安全智能体:数据安全运营自动化与自主决策的技术突破
运维·安全·自动化
Full Stack Developme3 小时前
Hutool StrUtil 教程
开发语言·网络·python
何妨呀~3 小时前
Subversion与Jenkins自动化平台
运维·自动化·jenkins