黑盒监控blackbox_exporter

前边介绍有很多exporter可以直接将metrics暴露给Prometheus进行监控,这些称为“白盒监控”,那些exporter无法监控到的指标呢?或者未暴露Metrics给Prometheus的一些服务怎么办?这时就要用到 blackbox_exporte “黑盒监控”。
blackbox_exporte支持用户通过:HTTP、HTTPS、DNS、TCP和ICMP的方式对网络进行探测,还可以探测SSL证书过期时间。

部署及使用blackbox_exporter

部署blackbox_exporter

这里以linux二进制部署为例:
  1. 下载安装包
curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.22.0/blackbox_exporter-0.22.0.linux-amd64.tar.gz
  1. 展开程序包:
tar xf blackbox_exporter-0.22.0.linux-amd64.tar.gz -C /usr/local/
ln -sv /usr/local/blackbox_exporter-0.22.0.linux-amd64 /usr/local/blackbox_exporter
  1. 创建用户,或prometheus用户已经存在,可略过该步骤:
useradd -r prometheus
  1. 创建Systemd Unitfile,保存于/usr/lib/systemd/system/blackbox_exporter.service文件中:
[Unit]
Description=blackbox_exporter
After=network.target [Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/blackbox_exporter/blackbox_exporter \
--config.file=/usr/local/blackbox_exporter/blackbox.yml \
--web.listen-address=:9115
Restart=on-failure [Install]
WantedBy=multi-user.target
  1. 启动服务:
systemctl daemon-reload
systemctl start blackbox_exporter.service
systemctl enable blackbox_exporter.service
  1. 验证监听的端口,并测试访问其暴露的指标
ss -tnlp | grep '9115'
curl localhost:9115/metrics
随后即可访问Blackbox Exporter的Web UI,其使用的URL如下,其中的<host_ip>要替换为节点的实际地址:http://<host_ip>:9115/

icmp监控,监控主机存活状态

prometheus 添加相关监控,Blackbox 使用默认配置启动即可
vi /usr/local/prometheus/prometheus.yml
  - job_name: "icmp_ping"
metrics_path: /probe
params:
module: [icmp] # 使用icmp模块
file_sd_configs:
- refresh_interval: 10s #检测时间间隔
files:
- "ping/ping_status*.yml" #具体的配置文件路径
relabel_configs:
- source_labels: [__address__]
regex: (.*)(:80)?
target_label: __param_target
replacement: ${1}
- source_labels: [__param_target]
target_label: instance
- source_labels: [__param_target]
regex: (.*)
target_label: ping
replacement: ${1}
- source_labels: []
regex: .*
target_label: __address__
replacement: 127.0.0.1:9115

这里有很多relabel的操作,下篇博客会详细讲解

创建对应的ping目录
cd /usr/local/prometheus/
mkdir ping
cd ping
vi ping_status.yml
- targets: ['monitor.example.com']
labels:
group: '跳板机'
- targets: ['10.xx.xx.xx','10.xx.xx.xx','10.xx.xx.xx']
labels:
group: 'k8s cluster'
- targets: ['www.baidu.com']
labels:
group: '百度'
配置完成后,可以检查配置文件语法,并让Prometheus重载配置。
./promtool check config prometheus.yml
curl -XPOST monitor.example.com:9090/-/reload
打开Prometheus web UI,可以看到,已经监控到了主机icmp情况:

http监控

编辑prometheus的主配置文件prometheus.yml,添加类似如下内容,即可用户对目标站点的探测。
  # Blackbox Exporter
- job_name: 'http_get_status'
metrics_path: /probe
params:
module: [http_2xx] # Look for a HTTP 200 response.
file_sd_configs:
- refresh_interval: 2m
files:
- "httpget/http_get*.yml" #具体的配置文件
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: "monitor.example.com:9115" # 指向实际的Blackbox exporter.
- target_label: region
replacement: "local"
vi httpget/http_get.yml
static_configs:
- targets:
- "https://monitor.example.com"
- "http://monitor.example.com:8080"
- "www.google.com"
refresh_interval: 2m
重新加载Prometheus
curl -XPOST monitor.example.com:9090/-/reload
展示:
这里要注意,blackbox下并不是prometheus中State状态为UP就认为是正常状态,其实并不然,这里我们随便写一个不存在的域名,例如:http://www.buzhida2222o.com,这里看也是UP状态:
但实际看其的metrics指标并不正常,探活的指标是失败,这里不确定是BUG还是怎样。

tcp端口监控

大体的步骤都是一致的,这里就直接上配置:
- job_name: 'tcp_port_status'
metrics_path: /probe
params:
module: [tcp_connect]
static_configs:
- targets: ['monitor.example.com:80','monitor.example.com:8080','monitor.example.com:443']
labels:
instance: 'port_status'
group: 'tcp'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: monitor.example.com:9115
成功监控:
至此,黑盒监控中常用的一些功能介绍完毕,监控项配置完毕后,可以通过导入dashboard到grafana来更直观的查看监控数据。

自定义blackbox.yml

blackbox的默认监控配置也可以进行自定义修改,例如http GET添加一些headers,设置boby_size_limit值或判断一些response body是否符合预期,还有一些TLS的设置等等,我们可以参考官网文档中给出的example来进行自定义:
# github地址
https://github.com/prometheus/blackbox_exporter # github中blackbox.yml各配置项解析
blackbox_exporter/CONFIGURATION.md at master · prometheus/blackbox_exporter · GitHub # github中example文件
blackbox_exporter/example.yml at master · prometheus/blackbox_exporter · GitHub
这里我们做一个演示https及私有TLS证书的演示,监控证书过期时间。
首先需要更改默认的vim blackbox.yml
modules:
http_2xx:
prober: http
http:
preferred_ip_protocol: "ip4"
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
valid_status_codes: [200,301,302,303]
tls_config:
insecure_skip_verify: true
http_ca_example:
prober: http
http:
method: GET
preferred_ip_protocol: "ip4"
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
fail_if_ssl: false
fail_if_not_ssl: true
tls_config:
insecure_skip_verify: false
ca_file: /usr/local/blackbox_exporter/certs/ca.crt
cert_file: /usr/local/blackbox_exporter/certs/server.crt
key_file: /usr/local/blackbox_exporter/certs/server.key
http_2xx:
在此模块的基础上添加了请求状态码的校验,并设置了tls校验直接跳过,这种就比较省事,可以直接跳过证书的校验。
http_ca_example:
此模块为新增,主要配置了tls证书的一些配置,添加ca、证书和私钥的文件位置,使blackbox请求时带着证书。
配置完成后,重启blackbox服务:
systemctl restart blackbox_exporter.service
然后配置prometheus.yml添加对应模块的使用:
  - job_name: 'http_get_status'
metrics_path: /probe
params:
module: [http_2xx] # Look for a HTTP 200 response.
file_sd_configs:
- refresh_interval: 2m
files:
- "httpget/http_get*.yml" #具体的配置文件
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: "monitor.example.com:9115" # 指向实际的Blackbox exporter.
- target_label: region
replacement: "local" - job_name: 'http_get_ca_status'
metrics_path: /probe
params:
module: [http_ca_example]
file_sd_configs:
- refresh_interval: 2m
files:
- "httpget/http_ca.yml"
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: "monitor.example.com:9115" # 指向实际的Blackbox exporter.
- target_label: region
replacement: "beijing"
在对应的发现文件中,配置主机并重新加载prometheus配置,并查看监控状态:
curl -XPOST monitor.example.com:9090/-/reload
搜索指标
probe_http_duration_seconds{phase="tls"}

证书过期时间已经获取成功,这个时候可以导入ID为13230的Dashboard到Grafana,然后再设置一个告警rule,就可以完成TLS证书过期监控啦。
最终效果:
 
 

Prometheus-2:blackbox_exporter黑盒监控的更多相关文章

  1. Prometheus 监控之 Blackbox_exporter黑盒监测

    Prometheus 监控之 Blackbox_exporter黑盒监测 1.blackbox_exporter概述 1.1 Blackbox_exporter 应用场景 2.blackbox_exp ...

  2. prometheus 配置容器 cadvisor监控节点

    安装cadvisor docker run \ --volume=/:/roofs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro ...

  3. 理解OpenShift(7):基于 Prometheus 的集群监控

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  4. prometheus + grafana部署RabbitMQ监控

    prometheus + grafana部署RabbitMQ监控 1.grafana导入dashboards https://grafana.com/dashboards/2121   2.expor ...

  5. 基于Prometheus和Grafana的监控平台 - 运维告警

    通过前面几篇文章我们搭建好了监控环境并且监控了服务器.数据库.应用,运维人员可以实时了解当前被监控对象的运行情况,但是他们不可能时时坐在电脑边上盯着DashBoard,这就需要一个告警功能,当服务器或 ...

  6. Centos7.X 搭建Prometheus+node_exporter+Grafana实时监控平台

    Prometheus简介 什么是 Prometheus Prometheus是一个开源监控报警系统和时序列数据库 主要功能 多维数据模型(时序由 metric 名字和 k/v 的 labels 构成) ...

  7. Prometheus+Grafana通过kafka_exporter监控kafka

    Prometheus+Grafana通过kafka_exporter监控kafka 一.暴露 kafka-metric 方式 二.jmx_exporter方式 2.1 下载jmx_prometheus ...

  8. Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息

    Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息 一.通过redis_exporter监控redis 1.1 下载镜像 1.2 运行服务 ...

  9. Grafana+Prometheus 搭建 JuiceFS 可视化监控系统

    作为承载海量数据存储的分布式文件系统,用户通常需要直观地了解整个系统的容量.文件数量.CPU 负载.磁盘 IO.缓存等指标的变化. JuiceFS 没有重复造轮子,而是通过 Prometheus 兼容 ...

  10. 【Prometheus+Grafana系列】监控MySQL服务

    前言 前面的一篇文章已经介绍了 docker-compose 搭建 Prometheus + Grafana 服务.当时实现了监控服务器指标数据,是通过 node_exporter.Prometheu ...

随机推荐

  1. 四月七号java基础学习

    1.数据类型分为基本数据类型以及引用数据类型 基本数据类型有整型.浮点型.字符型.布尔型 引用数据类型有类.数组以及接口 2.常量的声明需要用关键字final来标识 3.JAVA语言的变量名称由数字, ...

  2. LeeCode 316周赛复盘

    T1:判断两个事件是否存在冲突 思路:判断两个区间是否有交集 public boolean haveConflict(String[] event1, String[] event2) { // 比较 ...

  3. 关于取消DevTools listening on ws://127.0.0.1…提示的方法

    Python代码写好之后,通过任务计划程序定期执行.py文件,但总会有命令窗口,虽然不影响程序执行,但每次需要手动叉掉比较烦.于是我网上搜索了一些方法. 网上的方法并没有直接解决我的问题,但我借助搜索 ...

  4. Springboot接入ChatGPT 续

    在之前的文章\(^{[ 1 ]}\)中,原方案的设计,是基于功能实现的角度去设计的,对于功能性的拓展,考虑不全面,结合收到的反馈意见,对项目进行了拓展优化.完成的优化拓展有如下几个方面 固定会话 历史 ...

  5. Python分支结构之if语句

    程序结构 程序三种结构 顺序 循环 分支 分支结构 分支结构基本语法 if 条件表达式: 语句1 语句2 语句3 ...... 条件表达式就是计算结果必须为布尔值的表达式 表达式后面的冒号不能少 注意 ...

  6. Python数据分析中 melt()函数的一些用法

    melt()函数是一个数据重塑工具,用于将宽格式数据转换为长格式数据(Unpivot a DataFrame from wide to long format, optionally leaving ...

  7. drf重写authenticate方法实现多条件登录(源码分析)

    drf重写authenticate方法实现多条件登录(源码分析) 1. 思路 JWT拓展的登录视图中, 在接受到用户名和密码时, 调用的也是Django的认证系统中提供的authenticate()来 ...

  8. #Python基础 DateFrame 查看数据信息

    一:导入案例数据及X-MIND 二:实例 2.1 显示摘要信息 2.2显示描述性统计信息 2.3显示 前后n行 2.4显示索引.列信息 2.5显示每列的数据类型

  9. 在chatGPT的帮助下成功从Rancher中删除无效的集群

    只要你坚持,不放弃,问题总有解决的一天! 与chatgpt进行了几次沟通,成功解决历史遗留问题,成功从rancher中删除了无效的集群 chatGPT回答1 如果您在 Rancher UI 中无法删除 ...

  10. pg数据库的备份和恢复以及sql脚本错误的解决方法

    1.备份单库单表的数据,以insert语句的方式 pg_dump -h IP -p 端口 -U 用户名 -t 表名 --inserts –f dbname.sql 数据库名 pg_dump -h 17 ...