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: http
    http:
    method: POST
    tcp_connect: # tcp检测,比如检测某个端口是否在线
    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
    ...............

使用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_exporter
   Loaded: 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 ago
 Main 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: 30s
    metrics_path: /probe
    params:
    #这里的http_2xx要跟blackbox.yml文件中的定义对应起来。
      module: [http_2xx]
    static_configs:
    #下面这个targets是通过http get请求的地址,可以写多个,探讨是否正常
      - targets:
        - 10.0.0.66:80
        - https://www.baidu.com
    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:
        - 10.0.0.66:8048
    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:
        - www.baidu.com
    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:
        - 10.0.0.66:80
        - 10.0.0.66:8048
    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
  • 一定要语法对齐
  • 然后访问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.yml
    SUCCESS: prometheus.yml is valid prometheus config file syntax

grafana和prometheus实现监控可视化

  • Grafana是一个开源的指标监测和可视化工具。官方网站为:https://grafana.com/, 常用于展示基础设施的时序数据和应用程序运行分析。Grafana的dashboard展示非常炫酷,绝对是运维提升可视化监控的一大利器。
  • 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的模板我认为是很好的一个模板

看到这里记得给我点一个赞哦

完结撒花🌸🌸🌸🌸🌸🌸🌸

相关推荐
Suchadar41 分钟前
Docker基础命令(二)——数据卷管理端口映射与容器互联
运维·docker·容器
firstacui1 小时前
Docker容器网络管理与容器数据卷管理
运维·docker·容器
codeRichLife2 小时前
docker拷贝,导入/导出等常用命令
docker
努力搬砖的咸鱼3 小时前
部署你的第一个应用到 K8s
微服务·云原生·容器·kubernetes
lpruoyu4 小时前
【Docker进阶-01】Docker隔离原理与可视化界面-Portainer
docker
舰长1154 小时前
使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(一)
云原生·容器·kubernetes
Swift社区5 小时前
Docker 构建 Python FastAPI 镜像最佳实践
python·docker·fastapi
API开发5 小时前
CentOS 单独安装Docker Compose v2
linux·docker·centos·docker compose
hwj运维之路5 小时前
Docker面试题汇总系列
运维·docker·云原生·容器
chao_7895 小时前
双设备全栈开发最佳实践[mac系统]
git·python·macos·docker·vue·全栈