Prometheus+Grafana构建云原生分布式监控系统(五)
https://blog.csdn.net/xiaochenXIHUA/article/details/157213976
一、prometheus的黑盒监控
1.1、prometheus的黑盒监控是什么?有啥用?
在一些情况下,想要去监听服务器的某个端口是否存在,监听http的请求是否正确等情况;这个时候就可以使用【blackbox_exporter】来实现。blackbox_exporter是prometheus官方提供的exporter之一,可以提供【http】【dns】【tcp】【icmp】的监控数据采集。
|--------|--------------------------------|-----------------------------------------------------------------------|
| 序号 | blackbox_exporter 应用场景 | 说明 |
| 1 | HTTP测试 | 定义Request Header信息,判断【Http status】【Http Respones Header】【Http Body】内容 |
| 2 | TCP测试 | 业务组件端口状态监听;应用层协议定义域监听。 |
| 3 | ICMP测试 | 主机探活机制 |
| 4 | POST测试 | 接口连通性 |
| 5 | SSL证书过期时间 | |
| 6 | HTTPS测试 | |
| 7 | DNS测试 | |
| 8 | gRPC测试 | |
[blackbox_exporter应用场景]
1.2、blackbox_exporter的安装部署
bash
#【blackbox_exporter】的安装部署
#1-下载【blackbox_exporter】
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.28.0/blackbox_exporter-0.28.0.linux-amd64.tar.gz -c -P /data
#2-解压下载好的【blackbox_exporter】
cd /data
tar -zxvf blackbox_exporter-0.28.0.linux-amd64.tar.gz -C /usr/local
cd /usr/local/
mv blackbox_exporter-0.28.0.linux-amd64 blackbox_exporter-0.28.0
cd blackbox_exporter-0.28.0/
ls
#3-编写【blackbox_exporter】的服务
vi /usr/lib/systemd/system/blackbox_exporter.service
#【/usr/lib/systemd/system/blackbox_exporter.service】文件的完整内容
[Unit]
Description=blackbox_exporter
Documentation=https://github.com/prometheus/blackbox_exporter
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/blackbox_exporter-0.28.0/blackbox_exporter \
--config.file=/usr/local/blackbox_exporter-0.28.0/blackbox.yml \
--web.listen-address=:9115
Restart=on-failure
[Install]
WantedBy=multi-user.target
#4-启动blackbox_exporter后并设置开机自启
systemctl daemon-reload
systemctl start blackbox_exporter.service
systemctl status blackbox_exporter.service
ps -ef | grep blackbox_exporter
netstat -antlp | grep blackbox
systemctl enable blackbox_exporter.service
#5-打开浏览器访问【IP:9115】查看(注意:若是没法在浏览器打开访问则需要检查防火墙放开9115端口)
ip a






bash
#【blackbox.yml】文件的完整内容如下【该文件内容无需修改,直接使用即可】
modules:
http_2xx: #这个名字是定义模块名称,可随便写,但是在prometheus.yml配置文件中配置时必须与该文件这里的名称对应起来。保持默认即可不用修改
prober: http #进行探测的协议,可以是 http、tcp、grpc、dns、icmp等
http:
preferred_ip_protocol: "ip4"
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
grpc:
prober: grpc
grpc:
tls: true
preferred_ip_protocol: "ip4"
grpc_plain:
prober: grpc
grpc:
tls: false
service: "service1"
ssh_banner:
prober: tcp
tcp:
query_response:
- expect: "^SSH-2.0-"
- send: "SSH-2.0-blackbox-ssh-check"
ssh_banner_extract:
prober: tcp
timeout: 5s
tcp:
query_response:
- expect: "^SSH-2.0-([^ -]+)(?: (.*))?$"
labels:
- name: ssh_version
value: "${1}"
- name: ssh_comments
value: "${2}"
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
icmp_ttl5:
prober: icmp
timeout: 5s
icmp:
ttl: 5
http_3xx:
prober: http
http:
preferred_ip_protocol: "ip4"
enable_http3: true
enable_http2: false
valid_http_versions: ["HTTP/3.0"]
postgresql:
prober: tcp
tcp:
query_response:
- send: !!binary AAAACATSFi8= # 0x00, 0x00, 0x00, 0x08, 0x04, 0xD2, 0x16, 0x2F - PostgreSQL SSLRequest
- expect_bytes: S # 0x53 - Reply will be 'S' if SSL is enabled, and 'N' if it is not.
- starttls: true
二、在prometheus中添加blackbox_exporter监控
bash
#在prometheus中添加blackbox_exporter监控
#1-
cd /usr/local/prometheus-3.5.0/
vi prometheus.yml
#【prometheus.yml】的最后【scrape_configs】下添加多个不同黑盒类型的【job_name】
#下面这个是配置get请求检测
- job_name: 'blackbox_http_2xx'
scrape_interval: 30s
metrics_path: /probe
params:
#这里的http_2xx要跟blackbox.yml文件中的定义对应起来。
module: [http_2xx]
static_configs:
#下面这个targets是通过http get请求的地址,可以写多个,探测是否正常
- targets:
- 192.168.1.37:80
- http://192.168.1.37:8088/nginx-status
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
#这里的replacement是指定访问blackbox-exporter服务所在的机器和端口
replacement: 127.0.0.1:9115
- job_name: 'blackbox_http_post_2xx'
scrape_interval: 30s
metrics_path: /probe
params:
#这里定义通过http post方式探测
module: [http_post_2xx]
static_configs:
#这里定义通过http post方式探测的地址和端口
- targets:
- 192.168.1.39:9100
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
#这里的replacement是指定访问blackbox-exporter服务所在的机器和端口
replacement: 127.0.0.1:9115
- job_name: 'blackbox_http_ping'
scrape_interval: 30s
metrics_path: /probe
params:
#这里是定义通过imcp方式进行探测
module: [icmp]
static_configs:
#这里定义通过icmp方式探测的地址
- targets:
- coffeemilk.blog.csdn.net
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
- job_name: 'blackbox_tcp_connect'
scrape_interval: 30s
metrics_path: /probe
params:
#这里定义通过tcp方式进行服务或端口的探测
module: [tcp_connect]
static_configs:
#这里定义通过tcp进行探测的服务和端口
- targets:
- 192.168.1.37:80
- 192.168.1.39:22
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
#验证修改后的prometheus.yml文件的语法是否正确(结果显示SUCCESS则表示正确)
./promtool check config prometheus.yml
#验证prometheus.yml文件中的语法正确后热重载让配置生效
curl -XPOST localhost:9090/-/reload
#然后打开浏览器进入Prometheus Server的Web界面【IP:9090】查看【Status-->Target health】即可看到添加的【blackbox_http_2xx】【blackbox_http_ping】【blackbox_http_post_2xx】【blackbox_tcp_connect】节点及其状态【up】表示在线【down】表示离线。






三、Grafana中配置prometheus的blackbox_exporter数据可视化
(若已经添加过数据源了则不用重复这个操作)登录到Grafana中(IP:3000)选择【连接】-->【添加新连接】-->【搜索Prometheus】后点击Prometheus-->点击右上角的【添加新数据源】则进入设置界面,在设置界面可以填写名称、与prometheus server的URL地址后点击最底部的【保存并测试】。
然后配置仪表盘(到【Grafana dashboards | Grafana Labs】官网获取更多的仪表盘模板。在Grafana的仪表盘界面中间输入框输入blackbox_exporter即可列出所有blackbox_exporter相关模板(如:我们选择【Blackbox_Exporter Overview】模板进入后,获取到该模板的编号是【11175】【18896】【18538】【16292】【13659】)然后在浏览器上进入我们服务器上部署好的Grafana界面的【仪表盘】-->【新建】-->【导入】界面输入模板的编号或者JSON文件内容后点击【加载】后弹出的界面上可以修改模板名称、数据源为prometheus后点击【Import】)如下图所示:









