prometheus 黑盒监控和docker检测
prometheus 黑盒监控和docker检测
黑盒监控
前提:
有些时候我们想监听服务器的某个端口是否存在,监听http的请求是否正确,这个时候就可以使用blackbox_exporter来实现。
blackbox_exporter
是prometheus官方提供的exporter之一,可以提供http,dns,tcp,icmp的监控数据的采集blakbox_exporter应用的场景主要有以下几个
- Http测试
- 定义Request Header信息
- 判断Http status / Http Response Header / Http Body 内容
- Tcp测试
- 业务组件端口状态监听
- 应用层协议定义和监听
- Icmp测试
- 主机探活机制
- Post测试
- 接口连通性
- sll证书过期时间
blackbox_exporter的安装部署
从https://prometheus.io/download/ 下载最新版本,我这里下载的是blackbox_exporter-0.24.0.linux-amd64.tar.gz
[root@prometheus-66 local]# tar -xf blackbox_exporter-0.27.0.linux-amd64.tar.gz
[root@prometheus-66 local]# mv blackbox_exporter-0.27.0.linux-amd64 /usr/local/blackbox_exporter
[root@prometheus-66 local]# cd /usr/local/
[root@prometheus-66 blackbox_exporter]# ll
total 30792
-rwxr-xr-x 1 1001 1002 31509376 Jun 30 20:46 blackbox_exporter
-rw-r--r-- 1 1001 1002 1209 Jun 30 20:47 blackbox.yml
-rw-r--r-- 1 1001 1002 11357 Jun 30 20:47 LICENSE
-rw-r--r-- 1 1001 1002 94 Jun 30 20:47 NOTICE
-
这个目录下,默认有一个配置文件blackbox.yml.不需要修改,直接用即可,
-
介绍这个文件的参数含义
modules:http_2xx: # 这个名字是定义模块名称,可以随便写,但是需要在prometheus.yml配置文件中对应起来,保持默认即可prober: http # 进行探测的协议,可以是http,tcp,dns,icmp等等http:preferred_ip_protocol: "ip4"http_post_2xx:prober: httphttp:method: POSTtcp_connect: # tcp检测,比如检测某个端口是否在线prober: tcppop3s_banner:prober: tcptcp:query_response:- expect: "^+OK"tls: truetls_config:insecure_skip_verify: falsegrpc:prober: grpcgrpc:tls: truepreferred_ip_protocol: "ip4"grpc_plain:prober: grpc
...............
使用systemctl启动blackbox_exporter服务
添加blackbox_exporter服务
[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
最后启动这个blackbox_exporter服务配置完成
[root@prometheus-66 blackbox_exporter]# systemctl daemon-reload
[root@prometheus-66 blackbox_exporter]# systemctl restart blackbox_exporter
[root@prometheus-66 blackbox_exporter]# systemctl status blackbox_exporter [root@prometheus-66 blackbox_exporter]# systemctl status blackbox_exporter
● blackbox_exporter.service - blackbox_exporterLoaded: loaded (/usr/lib/systemd/system/blackbox_exporter.service; disabled; vendor preset: disabled)Active: active (running) since Sun 2025-07-20 13:29:30 CST; 5s agoMain PID: 20101 (blackbox_export)CGroup: /system.slice/blackbox_exporter.service└─20101 /usr/local/blackbox_exporter/blackbox_exporter --config.file=/usr/l...Jul 20 13:29:30 prometheus-66 systemd[1]: Started blackbox_exporter.
Jul 20 13:29:30 prometheus-66 blackbox_exporter[20101]: time=2025-07-20T13:29:30.287+..."
Jul 20 13:29:30 prometheus-66 blackbox_exporter[20101]: time=2025-07-20T13:29:30.287+..."
Jul 20 13:29:30 prometheus-66 blackbox_exporter[20101]: time=2025-07-20T13:29:30.288+..."
Jul 20 13:29:30 prometheus-66 blackbox_exporter[20101]: time=2025-07-20T13:29:30.289+...5
Jul 20 13:29:30 prometheus-66 blackbox_exporter[20101]: time=2025-07-20T13:29:30.289+...5
Hint: Some lines were ellipsized, use -l to show in full.
- 查看端口信息 ip:9115
blackbox_exporter数据的可视化
添加到prometheus.yml中
#下面这个是配置get请求检测- job_name: 'blackbox_http_2xx'scrape_interval: 30smetrics_path: /probeparams:#这里的http_2xx要跟blackbox.yml文件中的定义对应起来。module: [http_2xx]static_configs:#下面这个targets是通过http get请求的地址,可以写多个,探讨是否正常- targets:- 10.0.0.66:80- https://www.baidu.comrelabel_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: 30smetrics_path: /probeparams:#这里定义通过http post方式探测module: [http_post_2xx]static_configs:#这里定义通过http post方式探测的地址和端口- targets:- 10.0.0.66:8048relabel_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: 30smetrics_path: /probeparams:#这里是定义通过imcp方式进行探测module: [icmp]static_configs:#这里定义通过icmp方式探测的地址- targets:- www.baidu.comrelabel_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: 30smetrics_path: /probeparams:#这里定义通过tcp方式进行服务或端口的探测module: [tcp_connect]static_configs:#这里定义通过tcp进行探测的服务和端口- targets:- 10.0.0.66:80- 10.0.0.66:8048relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: 127.0.0.1:9115
- 一定要语法对齐
- 然后访问ip:9090
看到up的话,表示可以探测到主机和ip的状态的
然后进行查询
使用grafana数据可视化
grafana官方网站Grafana 仪表板 |Grafana 实验室
我们导入这个id,就可以看到这个
docker监控
cadvisor介绍
要监控docker的状态,需要一个软件CAdvisot(Container Advisor)这个是谷歌开源的容器监控和性能分析工具,它是专门为了容器而生,可以用于收集运行的容器资源使用和性能信息。
- Cadvisor 不仅可以收集一台机器上所有运行的容器信息,还能提供基础的查询界面和http接口,方便其他组件使用如prometheus进行数据的抓取。
- Cadvisor 可以对节点机器上的资源及容器进行实时监控和性能数据采取,包括cpu的使用情况,内存使用情况,网络吞吐以及系统文件使用情况。
- Cadvisor使用的是go语言的开发,利用linux的cgroups获取容器的资源信息,在k8s中集成作为默认的启动项官方标配使用。
用docker方式部署Cadvisor
- 运行单个Cadvisor来控制整个Docker主机,被监控安装完Docker后就可以添加Cadvisor容器,这里假设被监控主机的ip是10.0.0.100
[root@docker-110 ~]# docker run \
> --volume=/:/rootfs:ro \
> --volume=/var/run:/var/run:ro \
> --volume=/sys:/sys:ro \
> --volume=/var/lib/docker/:/var/lib/docker:ro \
> --volume=/dev/disk/:/dev/disk:ro \
> --publish=8080:8080 \
> --detach=true \
> --name=cadvisor \
> --restart=always \
> google/cadvisor:latest
06ece2dbfee43b9db090211dd5c9085ab841db80e203821dd1cebabaa4c96942
- 这样,Cadvisor容器服务就部署完毕,Cadvisor查询页面和http接口,可以访问ip:8080打开web界面
- Cadvisor也提供了prometheus访问的接口,可以访问10.0.0.110:8080/metrics
为了监控172.16.213.31主机基础服务状态,还需要安装node-exporter服务,对node-exporter的安装
- 部署完后node-exporter服务默认监听在9100端口
配置prometheus
- 修改配置文件prometheus.yml,默认job断中添加新的主机
static_configs:- targets: ["localhost:9090"]- job_name: "aliyun.com"static_configs:- targets: ["10.0.0.66:9100","10.0.0.110:9100"]
其中10.0.0.110:9100是新增添的监控主机
接下来在最后一行添加
- job_name : 'docker'static_configs:- targets: ['10.0.0.110:8080']labels:instance: docker-test
- 检测一下prometheus.yml配置语法是否正确
[root@prometheus-66 prometheus]# ./promtool check config prometheus.yml
Checking prometheus.ymlSUCCESS: prometheus.yml is valid prometheus config file syntax
grafana和prometheus实现监控可视化
- Grafana是一个开源的指标监测和可视化工具。官方网站为:https://grafana.com/, 常用于展示基础设施的时序数据和应用程序运行分析。Grafana的dashboard展示非常炫酷,绝对是运维提升可视化监控的一大利器。
- Grafana还专门为了Dashboard 提供啦一个共享服务。https://grafana.com/dashboards通过该服务用户可以轻松实现Dashboard的共享,同时我们也能够快速的从中找到我们希望的Dashboard实现,并且导入到自己的Grafana中
-
Enterprise是企业版要收费的
-
oss是开源版本也就是我们俗称的社区版本,主要是免费
-
Grafana的安装非常简单,官方就有软件仓库可以直接使用,也可以通过docker镜像等方式直接本地启动。还可以直接下载rpm包、二进制包进行安装。
-
大家可以从 https://grafana.com/get 下载Grafana安装包,然后根据需要的系统平台及性能下载即可,官方给出了非常详细的安装方法,例如,要通过rpm包安装在Redhat & Centos平台,可直接执行如下命令:
[root@localhost ~]# wget https://dl.grafana.com/oss/release/grafana-8.3.3-1.x86_64.rpm
[root@localhost ~]# yum localinstall grafana-8.3.3-1.x86_64.rpm
(3)、安装grafana插件
grafana提供了很多扩展插件,可通过https://grafana.com/grafana/plugins/查看,如果要和zabbix集成,就需要先安装grafana-zabbix插件,grafana官方已经包含了这个插件,直接使用即可。安装之前可以通过grafana-cli plugins list-remote 命令来查看都有什么插件可以安装。操作如下:
[root@localhost ~]# grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 4.2.4
可以看到,有一个名为alexanderzobnin-zabbix-app的zabbix 插件,接着直接在grafana上安装zabbix插件即可,执行如下命令:
[root@localhost ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
执行这个命令需要grafana服务器能够上网,因为它会从外网下载插件包,安装成功之后会提示我们需要重启grafana 服务,以使插件生效。接着,再安装一个clock-panel插件,这个插件是个时钟插件,可以在dashboard上显示时间用。命令如下:
[root@localhost ~]# grafana-cli plugins install grafana-clock-panel
所有需要的插件安装完成后,执行如下命令重启grafana服务:
[root@localhost ~]# systemctl restart grafana-server
获取docker可视化Dashboard
Grafana社区用户分享了大量的Dashboard,可以通过访问 https://grafana.com/dashboards 网站,找到大量可直接使用的Dashboard。推荐几个非常不错的Dashboard,可直接导入Grafana使用。
模板ID | 模板用途 |
---|---|
1860 | Node Exporter Full |
9965 | Blackbox Exporter 0.14 for Prometheus 监控展示看板 |
8919 | 1 Node Exporter for Prometheus Dashboard CN v20201010 |
10619 | Docker Container & Host Metrics |
193 | Docker monitoring |
14841 | Docker monitoring |
其中,模板ID为https://grafana.com/grafana/dashboards/ID,将上面ID替换为具体的数字即可访问Dashboard。
修改这个pql查询
- 这个8919这个uid的模板我认为是很好的一个模板
看到这里记得给我点一个赞哦
完结撒花🌸🌸🌸🌸🌸🌸🌸