亲爱的读者们👋
欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀
Prometheus是云原生和DevOps的核心监控工具,我们将从基础概念开始,逐步涵盖配置、查询、告警和可视化。💪
在接下来的30天里,我们将解锁Prometheus的实战技巧,通过案例和分享,助你深入理解其工作原理。📆
目标:30天后,你将熟练掌握Prometheus,为未来的项目挑战做好准备!💯
这是一段精彩旅程,期待你的加入!🎉
文章目录
- 一、blackbox_exporter概述📘
- 二、安装blackbox_exporter💾
- 2.1 访问blackbox_exporter官方网站 🌐
- 2.2 选择适合的版本🔍
- 2.3 下载blackbox_exporter⬇️
- 2.4 解压安装包📂
- 2.5 运行blackbox_exporter🚀
- 三、blackbox_exporter指标和配置详解📖
- 3.1 blackbox_exporter.service
- 3.2 blackbox_exporter.yml
- 3.2.1 http_2xx 、http_post_2xx
- 3.2.2 tcp_connect、 pop3s_banner
- 3.2.3 grpc、grpc_plain
- 3.2.4 ssh_banner、irc_banner
- 3.2.5 icmp、icmp_ttl5
- 四、实战演练:生产环境搭建指南🔨
- 4.1 创建普通用户管理blackbox_exporter👤
- 4.2 解压blackbox_exporter.tar.gz📦
- 4.3 将blackbox_exporter集成到Prometheus配置中✂️
- 4.4 更改blackbox_exporter软件包名称✂️
- 4.5 编辑blackbox_exporter.service文件📝
- 4.6 启动blackbox_exporter.service🔌
- 4.7 查看服务是否正常启动🔍
- 相关资料下载地址📚
一、blackbox_exporter概述📘
定义
Blackbox_exporter是一个开源工具,用于监控网络服务的可用性。它并不是Elasticsearch的组成部分,而是一个独立的工具,通常与Prometheus结合使用,用于收集和导出各种网络服务的监测数据。简单来说,它是一个帮助系统管理员了解和监测网络服务健康状况的“黑盒”监控工具。
功能
支持多种协议:Blackbox_exporter可以对HTTP、HTTPS、TCP、ICMP、DNS以及gRPC等协议进行探测。
灵活配置:用户可以通过配置文件或命令行参数自定义监控目标、探测频率、超时时间等。
指标输出:该工具能够将探测结果以Prometheus的指标格式输出,包括响应时间、响应状态码、服务的可达性等,便于Prometheus进行数据采集和存储。
服务发现:支持Prometheus的服务发现机制,自动发现并监控关联的目标。
自定义探测器:用户可以根据特定需求编写自定义的探测逻辑。
应用场景
HTTP/HTTPS监控:用于检测Web服务的URL或API的可用性,确保网站或API接口能够正常响应请求。
DNS监控:检查域名解析的速度和准确性,帮助诊断可能的DNS问题。
TCP端口监控:通过建立TCP连接来确认特定端口的开放状态,验证服务的可达性。
ICMP监控:使用类似于ping的命令来检测远程主机是否在线,即主机存活检测。
gRPC服务监控:针对使用gRPC协议的服务进行健康状态检查。
二、安装blackbox_exporter💾
注意事项和常见问题
1.环境配置:确保服务器或开发环境符合blackbox_exporter的运行要求。关闭或配置好防火墙,以免阻碍blackbox_exporter的网络探测功能。校对好系统时间,确保监控数据的准确性。
2.依赖安装:blackbox_exporter是独立运行的,通常不需要额外的依赖安装。但是,如果在特定环境下运行(如使用Docker),需要确保相关环境已正确配置。
3.下载与安装:从官方GitHub仓库下载最新稳定版本的blackbox_exporter。验证下载文件的完整性,以确保没有被篡改。
4.配置:根据需要监控的服务类型(如HTTP、HTTPS、TCP、ICMP等),正确配置blackbox.yml文件。配置Prometheus以收集blackbox_exporter的指标。
2.1 访问blackbox_exporter官方网站 🌐
- 打开浏览器,访问blackbox_exporter的官方下载页面,通常位于Prometheus官方网站的子目录下:https://prometheus.io/download/#blackbox_exporter
2.2 选择适合的版本🔍
- 在下载页面,你将看到不同操作系统的blackbox_exporter二进制包。根据你的操作系统选择适合的版本。例如,如果你使用的是Linux 64位系统,就选择blackbox_exporter-x.x.x.linux-amd64.tar.gz(其中x.x.x是版本号)。
2.3 下载blackbox_exporter⬇️
- 点击所选版本的下载链接,将blackbox_exporter的二进制包下载到你的本地计算机。
2.4 解压安装包📂
- 将下载的blackbox_exporter压缩包解压到你想要安装的目录。你可以使用命令行工具(如tar)来完成这个步骤。解压后,你将看到一个名为blackbox_exporter-x.x.x.linux-amd64的目录,其中包含blackbox_exporter的二进制文件和其他相关文件。
tar -xzf blackbox_exporter-x.x.x.linux-amd64.tar.gz
2.5 运行blackbox_exporter🚀
- 进入解压后的目录,并运行blackbox_exporter服务器。在Linux下,你可以使用如下命令。如果一切正常,你应该能在终端看到blackbox_exporter的启动日志。
cd blackbox_exporter-x.x.x.linux-amd64./blackbox_exporter --config.file=/usr/local/blackbox_exporter-0.24.0/blackbox.yml --web.listen-address 0.0.0.0:9115
三、blackbox_exporter指标和配置详解📖
3.1 blackbox_exporter.service
- - -config.file=“blackbox.yml”
指定 Blackbox Exporter 的配置文件路径。blackbox.yml 文件中定义了如何对网络服务进行探测,包括探测的目标、模块、超时时间等。 - - -[no-]config.check
用于检查配置文件是否有语法错误。如果设置为- -config.check,则 Blackbox Exporter 会在启动时检查配置文件的正确性,如果配置有误,它将不会启动。no-config.check 则会跳过这个检查。 - - -log.prober=“none”
设置日志中是否记录 prober(探测器)的详细日志。设置为 “none” 表示不记录这些日志,有助于减少日志量。如果需要调试,可以设置为其他值以获取更详细的日志信息。 - - -history.limit=100
设置历史记录的数量限制。Blackbox Exporter 会保存最近的探测结果,这个参数用于限制保存的历史记录数量。在这个例子中,最多保存 100 条历史记录。 - - -web.external-url=<url>
设置 Blackbox Exporter 的外部 URL。这通常用于当 Blackbox Exporter 位于反向代理后面时,确保生成的链接是正确的。如果留空,则使用默认的 URL。 - - -web.route-prefix=<path>
设置 Web 服务的路由前缀。如果 Blackbox Exporter 是作为一个更大应用的一部分,并且需要通过特定的路由来访问,可以使用这个参数。例如,设置为 /blackbox/ 会使得所有的 API 和指标都通过 /blackbox/ 路由来访问。 - - -[no-]web.systemd-socket
用于控制是否使用 systemd socket 激活。如果使用 systemd socket 激活,Blackbox Exporter 将不会绑定到任何特定的端口,而是由 systemd 在需要时传递连接。这可以提高安全性,因为只有 systemd 可以访问该服务。设置为 no-web.systemd-socket 则会禁用这个功能。 - - -web.listen-address=:9115
设置 Blackbox Exporter 监听的地址和端口。在这个例子中,它监听所有地址(: 表示所有地址)的 9115 端口。如果需要更改端口或限制监听的地址,可以修改这个参数。 - - -web.config.file=“”
允许你指定一个包含 Web 服务相关配置的文件。在这个例子中,它是空的,意味着使用默认配置。如果需要自定义 Web 服务的某些方面(如 TLS、身份验证等),可以在这个文件中进行配置。
3.2 blackbox_exporter.yml
3.2.1 http_2xx 、http_post_2xx
http_2xx:prober: http # 指定使用HTTP探测器http:preferred_ip_protocol: "ip4" # 使用IPv4协议进行探测http_post_2xx:prober: http # 使用HTTP探测器http:method: POST # 设置HTTP请求方法为POST
- http_2xx
- prober: http
指定该模块使用的探测器类型为http。这意味着该模块将执行HTTP探测。 - http
该部分包含HTTP探测器的具体配置。- preferred_ip_protocol
指定了在进行网络请求时优先使用的IP协议版本。在这个例子中,设置为了"ip4",意味着探测器将优先使用IPv4地址进行探测。如果服务器同时支持IPv4和IPv6,那么设置这个参数可以确保使用特定的IP版本来进行测试。
- preferred_ip_protocol
- prober: http
- http_post_2xx
- prober: http
指定该模块使用的探测器类型为http。这意味着该模块将执行HTTP探测。 - http
该部分包含HTTP探测器的具体配置。- method: POST
设置HTTP请求的方法为POST。默认情况下,HTTP探测器可能使用GET方法,但在这个模块中,明确指定使用POST方法。可以用于测试那些需要POST请求才能正常工作的HTTP接口。
- method: POST
- prober: http
3.2.2 tcp_connect、 pop3s_banner
tcp_connect:prober: tcp # 使用TCP连接探测器,仅检查TCP连接是否可以建立pop3s_banner:prober: tcp # 使用TCP探测器tcp:query_response: # 定义查询和响应的期望序列- expect: "^+OK" # 期望收到的响应以+OK开头tls: true # 启用TLS加密tls_config:insecure_skip_verify: false # 不跳过TLS证书的验证
- tcp_connect
- prober: tcp
指定该模块使用的探测器类型为tcp。将尝试建立TCP连接到目标地址和端口,以检查连接是否可以成功建立。这个模块不发送或接收任何特定的数据,只是简单地测试TCP连接性。
- prober: tcp
- pop3s_banner
- tcp
该部分包含TCP探测器的具体配置。- query_response
定义一个查询和响应的期望序列,用于与目标服务器进行交互。 - expect: “^+OK”
指定探测器期望从服务器接收到的响应应该以+OK开头。通常用于POP3协议中,服务器在成功连接后会发送一个以+OK开头的欢迎消息。 - tls: true
探测器在建立TCP连接后启动TLS加密。 - insecure_skip_verify: false
是否在TLS握手过程中验证服务器的SSL证书。设置为false意味着探测器将验证服务器的证书是否有效和受信任。如果设置为true,则会跳过证书验证。
- query_response
- tcp
3.2.3 grpc、grpc_plain
grpc:prober: grpc # 使用gRPC探测器grpc:tls: true # 启用TLS加密preferred_ip_protocol: "ip4" # 使用IPv4协议grpc_plain:prober: grpc # 使用gRPC探测器grpc:tls: false # 不使用TLS加密service: "service1" # 要探测的gRPC服务名称
- grpc
- prober: grpc
指定该模块使用的探测器类型为grpc。意味该模块将尝试通过gRPC协议与目标服务器进行通信。 - grpc
包含gRPC探测器的具体配置。- tls: true
指示探测器在建立gRPC连接时使用TLS加密。 - preferred_ip_protocol: “ip4”
指定探测器在尝试连接目标服务器时优先使用的IP协议版本。在这个例子中,它被设置为"ip4",表示探测器将优先使用IPv4地址进行连接。对于那些仅支持或偏好IPv4的网络环境特别有用。
- tls: true
- prober: grpc
- grpc_plain
- prober: grpc
指定该模块使用的探测器类型为grpc。意味该模块将尝试通过gRPC协议与目标服务器进行通信。 - grpc
包含gRPC探测器的具体配置。 - tls: false
与grpc模块相反,这个参数指示探测器在建立gRPC连接时不使用TLS加密。 - service: “service1”
指定探测器要连接的gRPC服务的名称。在gRPC中,服务名称通常用于标识和路由到正确的服务处理程序。
- prober: grpc
3.2.4 ssh_banner、irc_banner
ssh_banner:prober: tcp # 使用TCP探测器tcp:query_response:- expect: "^SSH-2.0-" # 期望收到的响应以SSH-2.0-开头- send: "SSH-2.0-blackbox-ssh-check" # 发送特定的SSH客户端标识- irc_banner:prober: tcp # 使用TCP探测器tcp:query_response: # 定义了与IRC服务器的交互序列,包括发送NICK、USER等命令,并期望特定的响应- send: "NICK prober"- send: "USER prober prober prober :prober"- expect: "PING :([^ ]+)"send: "PONG ${1}"- expect: "^:[^ ]+ 001"
- ssh_banner
- prober: tcp
指定使用TCP探测器。 - tcp
TCP探测器的配置部分。- query_response
定义了一个查询和响应的序列。 - expect: “^SSH-2.0-”
指定探测器期望从服务器接收到的响应应该以SSH-2.0-开头。这是SSH服务器在接收到客户端连接时通常会发送的版本标识。 - send: “SSH-2.0-blackbox-ssh-check”
指定探测器向服务器发送的SSH客户端版本标识。通常用于模拟SSH客户端与服务器进行初始的版本协商。
- query_response
- prober: tcp
- irc_banner
- prober: tcp
指定使用TCP探测器。 - tcp
TCP探测器的配置部分。- query_response
定义了一个查询和响应的序列。 - send: “NICK prober”
向IRC服务器发送设置昵称(NICK)的命令,昵称为“prober”。 - send: “USER prober prober prober :prober”
向IRC服务器发送USER命令,用于设置用户信息。这里所有的参数都设置为“prober”。 - expect: “PING : ([^ ]+)”
定义一个正则表达式,探测器会等待服务器发送一个PING消息,并捕获PING后面的参数值。 - send: “PONG ${1}”
当收到PING消息后,探测器会使用之前捕获的参数值(${1})来回应一个PONG消息。这是IRC协议中保持连接活跃的一种机制。 - expect: “^:[^ ]+ 001”
探测器期望从服务器接收到一个以:开头,后面跟着若干非空格字符,再接着是 001的响应。在IRC协议中,001是一个欢迎消息,表示客户端已成功连接到服务器。
- query_response
- prober: tcp
3.2.5 icmp、icmp_ttl5
icmp:prober: icmp # 使用ICMP探测器,通常用于检测网络连通性(ping)icmp_ttl5:prober: icmp # 使用ICMP探测器timeout: 5s # 设置探测超时时间为5秒icmp:ttl: 5 # 设置ICMP包的TTL(生存时间)为5,这可以用于追踪网络路径或检测特定网络跳数的问题
- icmp
- prober: icmp
指定该模块使用的探测器类型为icmp。这意味着该模块将发送ICMP Echo请求(ping请求)到目标地址,以检查网络的连通性。
- prober: icmp
- icmp_ttl5
- prober: icmp
同样指定了使用的探测器类型为icmp。 - timeout: 5s
设置ICMP探测的超时时间为5秒。如果在5秒内没有收到ICMP Echo响应(pong响应),则探测器会认为目标不可达。 - ttl: 5
设置ICMP数据包的Time To Live (TTL)值为5。TTL是IP数据包在网络中传输时可以经过的最大路由器数量。每当数据包经过一个路由器时,TTL值就会减1。当TTL值减至0时,数据包将被丢弃,并且发送方会收到一个ICMP超时消息。通过设置较低的TTL值(如5),可以限制数据包的传输范围,这在某些网络诊断场景中可能很有用。例如,如果你想确认数据包是否能够到达离你较近的网络节点,但不想让它们传播得太远,就可以通过设置较低的TTL值来实现。
- prober: icmp
四、实战演练:生产环境搭建指南🔨
4.1 创建普通用户管理blackbox_exporter👤
useradd deploy
4.2 解压blackbox_exporter.tar.gz📦
注意:
我的是x86,所以使用blackbox_exporter-0.25.0.linux-amd64.tar.gz,您可以使用uname -a命令查看系统架构
tar xvf blackbox_exporter-0.25.0.linux-amd64.tar.gz -C /home/deploy/
4.3 将blackbox_exporter集成到Prometheus配置中✂️
将blackbox_exporter集成到Prometheus配置中,确保数据能够正常采集。编辑Prometheus的配置文件(通常是prometheus.yml),在scrape_configs部分添加blackbox_exporter的配置。告诉Prometheus将采集localhost:9115的数据。
- job_name: 'blackbox_exporter'metrics_path: /probeparams:module: [http_2xx] # 模块对应 blackbox.ymlstatic_configs:- targets:- http://127.0.0.1:9090labels:system: prometheusrelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: 127.0.0.1:9115 # blackbox_exporter安装在哪台机器
4.4 更改blackbox_exporter软件包名称✂️
mv /home/deploy/blackbox_exporter-0.25.0.linux-amd64 /home/deploy/blackbox_exporter
4.5 编辑blackbox_exporter.service文件📝
cat > /etc/systemd/system/blackbox_exporter.service <<EOF
[Unit]
Description=blackbox_exporter
After=network.target[Service]
Type=simple
User=deploy
Group=deploy
ExecStart=/home/deploy/blackbox_exporter/blackbox_exporter \
--config.file=/home/deploy/blackbox_exporter/blackbox.yml \
--web.listen-address=:9115 \
--no-config.check \
--history.limit=100 \
--log.format=logfmt \
--log.level=info
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF
4.6 启动blackbox_exporter.service🔌
sudo systemctl daemon-reloadsudo systemctl enable --now blackbox_exporter.service
4.7 查看服务是否正常启动🔍
# 查看service服务是否启动
sudo systemctl status blackbox_exporter.service# 查看端口是否存在
sudo ss -ntulp | grep 9115
相关资料下载地址📚
- 官方文档:https://prometheus.io/docs/introduction/overview/
- 下载地址:https://github.com/prometheus/prometheus/releases/tag/v2.52.0
- 文档地址:https://prometheus.io/docs/prometheus/latest/installation/
- 离线包下载链接:https://pan.baidu.com/s/1ANF_AlFnM5_FMIbKBuzBmg 提取码:yqpt