prometheus 黑盒监控和docker检测

发布于:2025-07-22 ⋅ 阅读:(20) ⋅ 点赞:(0)

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展示非常炫酷,绝对是运维提升可视化监控的一大利器。

在这里插入图片描述

  • 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的模板我认为是很好的一个模板

在这里插入图片描述

在这里插入图片描述

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

完结撒花🌸🌸🌸🌸🌸🌸🌸


网站公告

今日签到

点亮在社区的每一天
去签到