目 录CONTENT

文章目录

Blackbox Exporter 网络探测监控实战指南

Administrator
2025-11-18 / 0 评论 / 0 点赞 / 11 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Blackbox Exporter 网络探测监控实战指南

实战背景

在复杂的云原生环境中,确保外部服务和应用的可访问性至关重要。Blackbox Exporter 是 Prometheus 生态系统中的一个重要组件,专门用于进行黑盒监控,即从外部探测目标服务的可用性。通过 Blackbox Exporter,我们可以监控 HTTP、HTTPS、TCP 等服务的连通性和响应时间,确保用户能够正常访问我们的服务。

一、技术架构概览

Blackbox Exporter 是一个官方提供的 Prometheus exporter,用于进行黑盒探测,支持多种探测协议。结合 Probe(Prometheus Operator 的自定义资源),可以实现对各种网络服务的自动化监控配置。

1.1 核心组件

  • Blackbox Exporter:负责执行探测任务并收集指标
  • Service:为 Blackbox Exporter 提供网络访问入口
  • Probe:告诉 Prometheus Operator 需要探测哪些目标
  • ConfigMap:存储探测配置

二、部署配置详解

blackbox-exporter-file

2.1 基础部署配置

# deployment.yaml
# Blackbox Exporter 的 Deployment 配置
# 用于定义如何部署和运行 Blackbox Exporter 容器
kind: Deployment
apiVersion: apps/v1
metadata:
  # Deployment 的名称
  name: blackbox-exporter
spec:
  # Pod 模板定义
  template:
    spec:
      # 容器定义
      containers:
        - name: blackbox-exporter
          # Blackbox Exporter 镜像地址,后续会被 kustomize 替换为实际镜像
          image: blackbox-exporter-image
          # 启动参数配置
          args:
            # 指定配置文件路径
            - '--config.file=/etc/blackbox_exporter/blackbox.yml'
            # 设置日志级别为 debug,便于调试问题
            - '--log.level=debug'
            # 设置 Web 监听地址和端口
            - '--web.listen-address=:9115'
          # 容器端口配置
          ports:
            # HTTP 端口,用于提供指标和探测服务
            - name: http
              containerPort: 9115
              protocol: TCP
          # 资源限制和请求配置
          resources:
            # 资源限制,防止容器消耗过多资源
            limits:
              cpu: 200m      # CPU 使用上限为 200 毫核
              memory: 256Mi  # 内存使用上限为 256 兆字节
            # 资源请求,保证容器运行所需的最小资源
            requests:
              cpu: 100m      # CPU 请求为 100 毫核
              memory: 50Mi   # 内存请求为 50 兆字节

2.2 服务配置

# service.yaml
# Blackbox Exporter 的 Service 配置
# 用于为 Blackbox Exporter 提供稳定的网络访问入口
kind: Service
apiVersion: v1
metadata:
  # Service 的名称
  name: blackbox-exporter-node
spec:
  # 端口配置
  ports:
    # HTTP 端口配置
    - name: http-9115
      protocol: TCP      # 协议类型为 TCP
      port: 9115         # Service 端口为 9115
      targetPort: 9115   # 目标端口为 9115,对应容器端口
      nodePort: 32618    # NodePort 端口为 32618,用于外部访问
  # 服务类型为 NodePort,允许从集群外部访问
  type: NodePort

2.3 配置挂载

# mount.yaml
# Blackbox Exporter 配置文件挂载补丁
# 用于将 ConfigMap 中的配置文件挂载到容器中
kind: Deployment
apiVersion: apps/v1
metadata:
  name: blackbox-exporter
spec:
  template:
    spec:
      # 卷定义
      volumes:
        # 配置卷,用于挂载 Blackbox Exporter 配置文件
        - name: config
          configMap:
            # 引用的 ConfigMap 名称
            name: blackbox-exporter
            # 文件权限设置为 420 (十进制),对应 rw-r--r-- 权限
            defaultMode: 420
      # 容器定义
      containers:
        - name: blackbox-exporter
          # 卷挂载配置
          volumeMounts:
            # 挂载配置卷到容器中
            - name: config
              # 挂载路径为 /etc/blackbox_exporter
              mountPath: /etc/blackbox_exporter

2.4 健康检查配置

# probe.yaml
# Blackbox Exporter 健康检查配置补丁
# 用于确保 Blackbox Exporter 容器的健康状态
kind: Deployment
apiVersion: apps/v1
metadata:
  name: blackbox-exporter
spec:
  template:
    spec:
      containers:
        - name: blackbox-exporter
          # 存活探针配置,用于检测容器是否正在运行
          livenessProbe:
            # 使用 TCP Socket 探针检测端口连通性
            tcpSocket:
              port: 9115  # 检测 9115 端口
            initialDelaySeconds: 5   # 容器启动后等待 5 秒再开始探测
            timeoutSeconds: 5        # 探测超时时间为 5 秒
            periodSeconds: 10        # 探测间隔为 10 秒
            successThreshold: 1      # 连续 1 次成功即认为探测成功
            failureThreshold: 3      # 连续 3 次失败即认为探测失败
          # 就绪探针配置,用于检测容器是否准备好接收流量
          readinessProbe:
            # 使用 TCP Socket 探针检测端口连通性
            tcpSocket:
              port: 9115  # 检测 9115 端口
            initialDelaySeconds: 5   # 容器启动后等待 5 秒再开始探测
            timeoutSeconds: 5        # 探测超时时间为 5 秒
            periodSeconds: 10        # 探测间隔为 10 秒
            successThreshold: 1      # 连续 1 次成功即认为探测成功
            failureThreshold: 3      # 连续 3 次失败即认为探测失败

2.5 配置文件

# configmap.yaml
# Blackbox Exporter 配置文件 ConfigMap
# 包含各种探测模块的配置
kind: ConfigMap
apiVersion: v1
metadata:
  # ConfigMap 名称
  name: blackbox-exporter
data:
  # Blackbox Exporter 主配置文件
  blackbox.yml: |-
    # 模块定义,每个模块定义一种探测方式
    modules:
      # HTTP 2xx 探测模块
      # 用于探测 HTTP 服务是否返回 2xx 状态码
      http_2xx:
        # 使用 HTTP 探针
        prober: http
        # 探测超时时间为 2 秒
        timeout: 2s
        # HTTP 探针配置
        http:
          # 支持的 HTTP 版本
          valid_http_versions: ["HTTP/1.1", "HTTP/2"]
          # 有效的 HTTP 状态码
          valid_status_codes: [200,301,302]
          # HTTP 请求方法为 GET
          method: GET
          # 优先使用 IPv4 协议
          preferred_ip_protocol: "ip4"
      
      # ruoyi_howlaisi_com: 监控 https://ruoyi.howlaisi.com 站点
      # 配置说明:
      # - prober: http 使用HTTP探针
      # - timeout: 5s 超时时间5秒
      # - valid_status_codes: [200,301,302] 有效状态码
      # - fail_if_not_ssl: true 如果不是SSL连接则失败(因为是HTTPS站点)
      ruoyi_howlaisi_com:
        # 使用 HTTP 探针
        prober: http
        # 探测超时时间为 5 秒
        timeout: 5s
        # HTTP 探针配置
        http:
          # 支持的 HTTP 版本
          valid_http_versions: ["HTTP/1.1", "HTTP/2"]
          # 有效的 HTTP 状态码
          valid_status_codes: [200,301,302]
          # HTTP 请求方法为 GET
          method: GET
          # 优先使用 IPv4 协议
          preferred_ip_protocol: "ip4"
          # 不检查是否为 SSL 连接(设为 false)
          fail_if_ssl: false
          # 检查是否为 SSL 连接(设为 true,因为是 HTTPS 站点)
          fail_if_not_ssl: true
      
      # 通用HTTPS应用监控模块
      # 适用于所有需要监控HTTPS连接的应用
      https_app:
        # 使用 HTTP 探针
        prober: http
        # 探测超时时间为 5 秒
        timeout: 5s
        # HTTP 探针配置
        http:
          # 支持的 HTTP 版本
          valid_http_versions: ["HTTP/1.1", "HTTP/2"]
          # 有效的 HTTP 状态码
          valid_status_codes: [200,301,302]
          # HTTP 请求方法为 GET
          method: GET
          # 优先使用 IPv4 协议
          preferred_ip_protocol: "ip4"
          # 检查是否为 SSL 连接(设为 true)
          fail_if_not_ssl: true
      
 
      # TCP 连接探测模块
      # 用于探测 TCP 端口是否开放
      tcp_connect:
        # 使用 TCP 探针
        prober: tcp
        # 探测超时时间为 2 秒
        timeout: 2s

2.6 探测配置

# probe/infrastructure/www-probe.yaml
# Probe 资源定义
# 用于告诉 Prometheus Operator 需要探测哪些目标
kind: Probe
apiVersion: monitoring.coreos.com/v1
metadata:
  # Probe 资源名称
  name: www-probe
spec:
  # 探测间隔为 15 秒
  # 可选值:5s, 10s, 30s, 1m, 5m 等
  # 默认值:60s
  interval: 15s
  
  # 使用的探测模块为 https_app
  # 该模块在 blackbox.yml 配置文件中定义
  # 可选值:http_2xx, https_app, tcp_connect 等
  module: https_app
  
  # Blackbox Exporter 地址
  # Prometheus 通过该地址访问 Blackbox Exporter 执行探测
  prober:
    # Blackbox Exporter 服务地址和端口
    # 格式:service-name.namespace:port
    url: blackbox-exporter-node.infrastructure:9115
    
  # 探测目标配置
  targets:
    # 静态配置方式定义探测目标
    staticConfig:
      # 自定义标签,用于标识应用
      # 这些标签会被添加到生成的指标中,便于查询和分类
      labels:
        # 应用标识标签
        application: www-frontend
        
      # 静态探测目标列表
      # 每个目标都是一个需要探测的 URL
      static:
        # 探测目标 URL
        # Blackbox Exporter 会通过 HTTPS 协议探测这些地址
        - https://www.howlaisi.com
        - https://howlaisi.com

这部分配置定义了一个 Probe 资源,用于监控网站的可用性:

  1. kind: Probe - 指定资源类型为 Probe,这是 Prometheus Operator 提供的自定义资源
  2. apiVersion: monitoring.coreos.com/v1 - 使用的 API 版本
  3. metadata.name: www-probe - Probe 资源的名称,必须在同一名空间内唯一
  4. spec.interval: 15s - 探测间隔,表示每隔 15 秒执行一次探测
  5. spec.module: https_app - 使用的探测模块,对应 blackbox.yml 中定义的模块
  6. spec.prober.url - Blackbox Exporter 的服务地址,Prometheus 通过此地址发起探测请求
  7. spec.targets.staticConfig.labels - 为探测目标添加标签,这些标签会附加到生成的指标中
  8. spec.targets.staticConfig.static - 需要探测的目标 URL 列表

工作原理:

  • Prometheus Operator 监听 Probe 资源的创建和变更
  • 根据 Probe 配置生成相应的 Prometheus 作业配置
  • Prometheus 定期向 blackbox-exporter-node.infrastructure:9115 发送探测请求
  • Blackbox Exporter 接收到请求后,根据指定的 module 对目标 URL 进行探测
  • 探测结果以指标形式暴露,Prometheus 抓取这些指标用于监控和告警
    blackbox-exporter-prometheus-target
    blackbox-exporter-metrics

2.7 Kustomize 配置

# base/kustomization.yaml
# 基础层 Kustomize 配置
# 定义基础资源配置和补丁
resources:
  # 引用基础资源文件
  - ./deployment.yaml
  - ./service.yaml
  - ./configmap.yaml
# 应用补丁文件
patches:
  - ./mount.yaml
  - ./probe.yaml

# 通用注解,会添加到所有资源上
commonAnnotations:
  # 应用标识
  application: blackbox-exporter应用

# 通用标签,会添加到所有资源上
commonLabels:
  # 应用标签
  app: black-exporter
# overlays/infrastructure/kustomization.yaml
# 基础设施层 Kustomize 配置
# 定义基础设施环境的特定配置
resources:
  # 引用基础层配置
  - ../../base
  # 引用探测配置
  - ./probe

# 部署命名空间为 infrastructure
namespace: infrastructure

# 镜像替换配置
images:
  # 替换 blackbox-exporter-image 镜像
  - name: blackbox-exporter-image
    # 新镜像名称
    newName: k8s-harbor:30002/prom/blackbox-exporter
    # 新镜像标签
    newTag: v0.21.0
# overlays/infrastructure/probe/infrastructure/kustomization.yaml
# 探测资源配置
# 定义所有需要探测的目标
resources:
  # 各个探测目标配置文件
  - www-probe.yaml

三、配置参数详解

3.1 Blackbox Exporter 配置参数

参数说明可选值/示例
prober探测器类型http, tcp, icmp, dns
timeout探测超时时间2s, 5s, 10s
valid_http_versions有效的HTTP版本["HTTP/1.1", "HTTP/2"]
valid_status_codes有效的HTTP状态码[200,301,302]
methodHTTP方法GET, POST
preferred_ip_protocol优先使用的IP协议ip4, ip6
fail_if_ssl如果是SSL连接则失败true, false
fail_if_not_ssl如果不是SSL连接则失败true, false

3.2 Probe 配置参数

参数说明可选值/示例默认值
apiVersionAPI版本monitoring.coreos.com/v1-
kind资源类型Probe-
metadata.nameProbe名称www-probe-
spec.interval探测间隔15s, 30s, 1m, 5m等60s
spec.module使用的探测模块https_app, http_2xxhttp_2xx
spec.prober.urlBlackbox Exporter 地址blackbox-exporter-node.infrastructure:9115-
spec.targets.staticConfig.static探测目标列表https://www.howlaisi.com-
spec.targets.staticConfig.labels自定义标签application: www-frontend-

3.3 Prometheus 配置参数

参数说明可选值/示例默认值
probeNamespaceSelector选择包含 Probe 的命名空间matchLabels: {monitoring: probe}{}
probeSelector选择要监控的 ProbematchLabels: {app: blackbox-exporter}{}

四、Argo CD 应用配置

通过 Argo CD 实现 GitOps 方式的持续部署:

# infrastructure/blackbox-exporter-0210.yaml
# Argo CD Application 配置
# 用于定义如何通过 GitOps 方式部署 Blackbox Exporter
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  # Application 名称
  name: blackbox-exporter-0210
spec:
  # 目标集群配置
  destination:
    # 目标集群名称(空表示默认集群)
    name: ''
    # 目标命名空间
    namespace: infrastructure
    # 目标集群地址
    server: 'https://kubernetes.default.svc'
  # 源码配置
  source:
    # 配置路径
    path: howlaisi-workspace/infrastructure/blackbox-exporter/blackbox-exporter-0210/overlays/infrastructure
    # Git 仓库地址
    repoURL: 'http://192.168.3.3/howlaisi/argocd-gitops.git'
    # 目标分支
    targetRevision: HEAD
  # Argo CD 项目
  project: default
  # 同步策略配置
  syncPolicy:
    # 自动化同步配置
    automated:
      # 自动清理已删除的资源
      prune: true
      # 自动修复配置偏差
      selfHeal: true

五、Grafana 仪表盘推荐

集成监控后,可以使用以下常用的 Grafana 仪表盘来可视化 Blackbox Exporter 指标:

5.1 推荐的仪表盘 ID

仪表盘名称ID说明
Prometheus Blackbox Exporter7587官方提供的 Blackbox Exporter 仪表盘
Blackbox Exporter Overview13659包含丰富的探测指标展示
Blackbox Exporter HTTP Prober12006专门针对 HTTP 探测的监控面板
blackbox-exporter-grafana

六、关键配置说明

6.1 探测模块配置

Blackbox Exporter 支持多种探测模块:

  1. http_2xx:HTTP 探测,检查返回状态码是否为 2xx
  2. https_app:HTTPS 应用探测,验证 SSL 证书
  3. tcp_connect:TCP 连接探测,检查端口是否开放

6.2 资源限制配置

根据实际业务负载情况,合理配置资源请求和限制:

# 资源限制和请求配置
resources:
  # 资源限制,防止容器消耗过多资源
  limits:
    cpu: 200m      # CPU 使用上限为 200 毫核
    memory: 256Mi  # 内存使用上限为 256 兆字节
  # 资源请求,保证容器运行所需的最小资源
  requests:
    cpu: 100m      # CPU 请求为 100 毫核
    memory: 50Mi   # 内存请求为 50 兆字节

七、监控指标说明

Blackbox Exporter 提供了丰富的监控指标,主要包括:

  1. 探测结果指标

    • probe_success:探测是否成功(1为成功,0为失败)
    • probe_duration_seconds:探测持续时间
  2. HTTP探测指标

    • probe_http_status_code:HTTP状态码
    • probe_http_content_length:响应内容长度
    • probe_http_redirects:重定向次数
  3. SSL证书指标

    • probe_ssl_earliest_cert_expiry:最早过期证书时间
    • probe_ssl_last_chain_expiry_timestamp_seconds:证书链最后过期时间

八、部署验证

部署完成后,可以通过以下方式验证是否正常工作:

  1. 检查 Pod 状态:

    kubectl get pods -n infrastructure | grep blackbox-exporter
    
  2. 检查 Service 是否正常:

    kubectl get svc -n infrastructure | grep blackbox-exporter
    
  3. 验证探测是否正常工作:

    kubectl port-forward svc/blackbox-exporter-node 9115:9115 -n infrastructure
    

    然后访问 http://localhost:9115/probe?module=http_2xx&target=https://howlaisi.com 查看探测结果

  4. 检查 Prometheus 是否成功抓取指标:
    在 Prometheus UI 中查询 probe 相关指标

九、常见问题与解决方案

9.1 探测失败问题

如果探测失败,需要检查以下几点:

  1. 探测目标是否可访问
  2. 网络策略是否阻止了访问
  3. SSL证书是否有效
  4. 探测模块配置是否正确

9.2 DNS解析问题

如果遇到DNS解析问题:

  1. 检查Kubernetes集群DNS配置
  2. 确认目标域名是否正确
  3. 验证网络连通性

9.3 证书验证失败

对于HTTPS探测,如果证书验证失败:

  1. 检查证书是否过期
  2. 确认证书链是否完整
  3. 验证证书域名是否匹配

9.4 Prometheus Targets 页面不显示 Probe 目标

这是一个常见但容易忽略的问题。即使成功创建了 Probe 对象,在 Prometheus Targets 页面也可能看不到相应的探测目标。

根本原因

Prometheus Operator 不会自动采集所有命名空间中的 Probe 资源。只有当 Prometheus 实例的配置明确指定要监控包含 Probe 的命名空间时,这些 Probe 才会被加载和执行。

换句话说,虽然通过以下命令成功创建了 Probe:

kubectl apply -f probe.yaml

但如果 Prometheus 的 CRD(Prometheus 资源)没有配置去监控这个 Probe 所在的命名空间(例如 infrastructure),Prometheus 根本不会加载这个 Probe。

逐步排查与修正

① 检查 Prometheus 实例是否配置了 probeNamespaceSelector

执行以下命令查看 Prometheus 配置:

kubectl -n kubesphere-monitoring-system get prometheus -o yaml

在输出中找到类似以下的配置:

spec:
  probeNamespaceSelector: {}
  probeSelector: {}

如果 probeNamespaceSelector 没有配置,表示只会监控和 Prometheus 同一命名空间的 Probe 对象。

如果您的 Probe 在 infrastructure 命名空间,而 Prometheus 在 kubesphere-monitoring-system 命名空间,就不会被采集。

解决方式

修改 Prometheus CRD 配置:

spec:
  probeNamespaceSelector: {}
  probeSelector: {}

验证配置是否生效

修改完 Prometheus 配置后,可以通过以下方式验证:

  1. 检查 Prometheus 配置是否已更新:
kubectl -n kubesphere-monitoring-system get prometheus -o yaml
  1. 检查 Prometheus Targets 页面是否显示 Probe 目标

  2. 查看 Prometheus 日志确认是否有相关错误信息:

kubectl -n kubesphere-monitoring-system logs prometheus-k8s-0

十、性能优化建议

  1. 合理设置探测间隔,避免过于频繁的探测影响网络性能
  2. 根据实际需要调整资源限制,避免资源浪费
  3. 对于关键业务系统,可以设置更短的探测间隔
  4. 定期审查探测目标,移除不再需要的探测

总结

通过 Blackbox Exporter 与 Prometheus 的集成,我们可以实现对网络服务的全面监控。结合 Argo CD 的 GitOps 部署方式,能够确保监控配置的一致性和可追溯性。合理配置探测模块和告警规则,有助于及时发现和解决网络连通性问题,保障业务系统的稳定运行。

参考文档

  1. Prometheus 官方文档
  2. Blackbox Exporter GitHub 仓库
  3. Prometheus Operator 官方文档
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区