Py学习  »  docker

如何从外部监控你的服务?从Docker运行Blackbox开始

院长技术 • 1 周前 • 46 次点击  

技术交流群

欢迎各位大牛加入云原生技术交流群,群内不定时分享技术文档!
下面二维码为院长私人微信,请扫码添加微信邀请加入交流群!
如果二维码失效,请查看最新文章内的二维码或者通过公众号私信邀请加入技术群。
图片

Blackbox Exporter 是 Prometheus 生态系统中的一个工具,用于通过主动探测(Probe)的方式来监控外部 endpoints(如 HTTP 接口、TCP 端口、ICMP ping 等)的可用性和性能,并将探测结果提供给 Prometheus 进行采集和告警。


为什么需要它?它解决了什么问题?

Prometheus 默认采用的是 “拉取(Pull)”模型,即由 Prometheus 服务器主动从被监控目标(称为 targets)上暴露的 HTTP API(通常是 /metrics)抓取指标。

但这种模型在某些场景下会遇到问题:

  1. “从外部看”的视角缺失:你的应用内部指标(如 CPU、内存)可能一切正常,但用户却无法访问。因为你缺少一个从外部用户角度来检查服务是否真正可用的手段。

  • 例子:一个网站的进程还在,但代码有 bug,对所有请求都返回 500 错误。Prometheus 拉取到的应用指标可能看起来是健康的,但服务实际上已经不可用。

  • 监控“黑盒”服务:你需要监控一些你无法在其内部安装 Exporter 的服务或资源。

    • 例子:监控一个第三方 API(如微信支付接口)、一个网络中间件(如路由器、交换机)的端口是否开放,或者测试整个网络的连通性(Ping)。

    Blackbox Exporter 就是为了解决这些问题而生的。它引入了一种 “主动探测” 的机制。


    Blackbox Exporter 是如何工作的?

    它的工作流程可以分为四步:

    1. 配置探测:你在 Blackbox Exporter 的配置文件中定义各种探测模块(Modules)。每个模块指定了如何进行检查(例如:使用 HTTP 协议、期望状态码为 200、检查 SSL 证书是否过期等)。

    2. 发起探测请求

    • Prometheus 不是直接拉取指标,而是根据 scrape_config 中的配置,向 Blackbox Exporter 发出一个 HTTP 请求,请求它去探测某个目标。

    • 这个请求中包含两个关键参数:target(要探测谁)和  module(使用哪个探测模块)。

    • 示例 Prometheus 请求http://blackbox-exporter:9115/probe?target=https://example.com&module=http_2xx

  • 执行探测:Blackbox Exporter 接收到请求后,会根据指定的模块参数,主动去探测目标(target),例如访问 https://example.com

  • 返回指标:探测完成后,Blackbox Exporter 会生成一系列标准化的指标,并通过 HTTP 响应返回给 Prometheus。

    • Prometheus 将这些指标收集起来,就像收集其他 Exporter 的指标一样。


    主要功能和用途

    1. HTTP/HTTPS 监控

    • 可用性:服务是否返回成功的状态码(如 2xx, 3xx)?

    • 内容校验:响应体中是否包含或不包含某个特定字符串?(例如:检查网页是否被篡改或出现了错误信息)

    • SSL/TLS 证书监控:证书是否有效?还有多少天过期?

    • HTTP 性能:请求耗时(Duration)、DNS 解析耗时、TLS 握手耗时等。

  • TCP 监控

    • 检查某个端口是否开放(例如,数据库的 3306 端口、SSH 的 22 端口、Redis 的 6379 端口是否可连接)。

    • 也可以进行简单的交互,例如发送一个数据包并验证响应(常用于监控 MySQL、Redis 等协议)。

  • ICMP 监控(Ping)

    • 检查主机是否在线(通过 Ping 命令)。

    • 监控网络延迟和丢包率。

  • DNS 监控

    • 查询指定的 DNS 记录并验证其结果是否正确。

    • 检查 DNS 解析耗时。


    核心输出指标示例

    Blackbox Exporter 返回的指标非常直观,例如:

    • probe_success:最关键的指标。探测是否成功(1 表示成功,0 表示失败)。

    • probe_duration_seconds:整个探测过程耗费了多少秒。

    • probe_http_status_code:HTTP 探测返回的状态码。

    • probe_ssl_earliest_cert_expiry:SSL 证书最早的过期时间(Unix 时间戳)。

    • probe_icmp_duration_seconds:Ping 的往返时间。

    这些指标可以直接用于 Grafana 绘图和 Prometheus 告警规则。

    总结

    特性
    描述
    角色
    Prometheus 的辅助工具,专用于主动探测
    模型
    由 Prometheus 触发,Blackbox 执行主动探测(Active Probing)
    视角外部视角(Synthetic Monitoring)
    ,模拟用户行为
    监控对象
    任何可以通过网络协议访问的端点(HTTP, TCP, ICMP, DNS)
    核心价值
    回答“我的服务对用户来说是可用的吗?”这个问题

    简单来说,Blackbox Exporter 就像是 Prometheus 派出的一个“侦察兵”,它可以代替用户去尝试访问你的服务,并告诉你访问体验到底怎么样。 它是构建完整监控系统不可或缺的一环,弥补了单纯内部指标监控的不足。


    安装Docker

    curl -sSL https://get.docker.com/ | sh


     

    创建服务

     

    docker run  -d \
      --name=blackbox_exporter \
      -p 9115:9115 \
      --restart=unless-stopped \
      docker.m.daocloud.io/prom/blackbox-exporter

     

    Web访问

    http://IP:9115

    🎉购买院长书籍,做技术大牛🎉

    院长书籍链接:

    https://deanit.cn/DeanBooks/

    图片

    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/186560
     
    46 次点击