不期速成 日拱一卒 不期速成 日拱一卒
首页
技术
测试
分类
标签
归档
关于
首页
技术
测试
分类
标签
归档
关于
  • Hello Docker
  • 二进制文件安装Docker指南
  • Docker网桥导致网络故障分析
  • 使用Docker部署Python开发调试运行环境
  • Habor-轻量化容器服务自动部署工具
  • 当开发团队开始用Docker,测试团队应该做什么?
  • 如何把应用服务手动注册到Systemd
  • 探究inode耗尽导致的no space left on device报错原因
  • PyCharm远程开发配置攻略
  • 视频推流方案
  • Prometheus&Grafana打造性能测试监控服务
    • 一、Prometheus
      • Prometheus 组成及架构
    • 二、Grafana
    • 服务拓扑
    • 各组件说明和下载地址
    • 一、部署Exporter
      • (一)部署node_exporter
      • (二)部署nvidia-dcgm-exporter
      • (三)部署cadvisor
    • 二、部署&配置Prometheus
      • (一)配置`prometheus.yml`
      • (二)启动prometheus服务
      • (三)查看exporter信息是否拉取成功
      • (四)增加更多节点
      • (五) 热加载配置
    • 三、部署&配置Grafana
      • (一)修改配置文件
      • (二)启动grafana服务
      • (三)增加数据源
    • 四、配置Grafana报表
  • Pythoner的vim
  • RobotFramework字符转译之坑
  • JSONSchema常用关键字语法手册
  • 根据JSON Schema生成JSON样例数据
  • 一图看懂正则表达式
  • SQL中LIMIT和IFNULL的使用
  • 基于Druid的接口测试自动化方案
  • 技术
2020-07-09

Prometheus&Grafana打造性能测试监控服务

# Prometheus&Grafana打造性能测试监控服务

开场图

郭群 于 2020年07月09日

# 背景

智能化产品测试团队,各类算法项目(微服务+SDK)繁多,性能测试需求频繁,除了需要对常见的服务器硬件资源进行监控之外,还要对GPU使用情况,Docker容器资源情况进行监控,延用至今的监控手段较薄弱(nmon、docker-stat.sh),可持续性有待改进。

因此我们有了新的诉求:

  • 通过平台化的方式,统一监控服务器硬件资源(CPU、内存、磁盘、网络等),监控各GPU资源使用情况、监控各Docker容器使用情况,可以回溯某一时段的资源使用率;
  • 无需每次测试部署工具,监控信息易于查看和分析;

# 效果

经过预研实验,选取Prometheus+Grafana为核心组件,辅助以各类export信息采集客户端,完成资源监控平台搭建,部署简单易于操作(所有组件均为Docker+二进制程序),有完善的权限管理; 新增一台服务器监控,部署客户端+修改配置,仅需5分钟即可。 目前已经将算法测试服务器若干、FHTP服务器、测开服务器等纳入监控,并在算法性能测试中使用。

使用地址:http://172.16.24.3:3000 账号密码: guest/guest

# 核心组件介绍

# 一、Prometheus

Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。

作为新一代的监控框架,Prometheus 具有以下特点:

  • 强大的多维度数据模型:
    1. 时间序列数据通过 metric 名和键值对来区分。
    2. 所有的 metrics 都可以设置任意的多维标签。
    3. 数据模型更随意,不需要刻意设置为以点分隔的字符串。
    4. 可以对数据模型进行聚合,切割和切片操作。
    5. 支持双精度浮点类型,标签可以设为全 unicode。
  • 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。
  • 易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
  • 高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
  • 使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。
  • 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端。
  • 可以通过服务发现或者静态配置去获取监控的 targets。
  • 有多种可视化图形界面。
  • 易于伸缩。

需要指出的是,由于数据采集可能会有丢失,所以 Prometheus 不适用对采集数据要 100% 准确的情形。但如果用于记录时间序列数据,Prometheus 具有很大的查询优势,此外,Prometheus 适用于微服务的体系架构。

# Prometheus 组成及架构

Prometheus 生态圈中包含了多个组件,其中许多组件是可选的:

  • Prometheus Server: 用于收集和存储时间序列数据。
  • Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
  • Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
  • Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus。
  • Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
  • 一些其他的工具。

下图 为 Prometheus 官方文档中的架构图:

Prometheus架构图

从上图可以看出,Prometheus 的主要模块包括:Prometheus server, exporters, Pushgateway, PromQL, Alertmanager 以及图形界面。

其大概的工作流程是:

  1. Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
  2. Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
  3. Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
  4. 在图形界面中,可视化采集数据。

# 二、Grafana

Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:

  1. 展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
  2. 数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
  3. 通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
  4. 混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
  5. 注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
  6. 过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

文章开头的图片,就是Grafana的WEB页面截图。

# 部署过程简介

此处的部署说明,主要为满足算法效果性能测试资源监控需求:

  • 服务器CPU、MEM、NETWORK、GPU等资源使用率
  • Docker容器资源使用率

# 服务拓扑

服务器角色 IP 部署服务 说明
服务端 172.16.114.1 Prometheus + Grafana 核心组件服务,提供数据库存储和可视化分析服务,需要一定的存储空间
客户端 172.16.108.8 node_exporter + nvidia-dcgm-exporter + cadvisor 被监控的服务器节点,部署各类exporter

因此除了Prometheus和Grafana之外,我们还需要对应的Exporter,经过调研试验,相关组件如下:

  • node_exporter
  • nvidia-dcgm-exporter
  • cadvisor

# 各组件说明和下载地址

序号 组件名称 作用 下载地址 MD5
1 Prometheus 用于收集和存储时间序列数据 prometheus-2.19.0.linux-amd64.tar.gz (opens new window) 0ac93274398c92cbc9c6ec8d6439d9f4
2 Grafana 数据展示,可视化分析 grafana-7.0.3.linux-amd64.tar (opens new window) a97216ef6e3d79d523161048f58304d9
3 node_exporter 采集CPU、MEM、NETWORK、DISK等信息,提供metrics信息 node_exporter-1.0.0.linux-amd64.tar.gz (opens new window) 0ac93274398c92cbc9c6ec8d6439d9f4
4 nvidia-dcgm-exporter 采集英伟达GPU信息,提供metrics信息 nvidia-dcgm-exporter_latest.tar (opens new window) 6a9e1e69e6f179a1c2834cf7050c3aeb
5 cadvisor 采集Docker容器信息,提供metrics信息 google-cadvisor_latest.tar (opens new window) b2fe6c012078656c04781326dbc23a12

# 一、部署Exporter

# (一)部署node_exporter

将node_exporter-1.0.0.linux-amd64.tar.gz上传到需要监控的服务器任意目录并解压:

检查9100端口是否被占用

若被占用的化,请参考--help命令修改启动端口。

启动服务

nohup ./node_exporter &
1

如何将服务设置为开机启动,注册为系统服务,请查阅《如何把应用服务注册到Systemd》一文

检查服务是否启动正常

部署完成!

# (二)部署nvidia-dcgm-exporter

将nvidia-dcgm-exporter_latest.tarDocker镜像上传到需要监控的服务器任意目录,导入镜像:

docker load < nvidia-dcgm-exporter_latest.tar
1

检查9400端口是否被占用,若占用了,选个你喜欢的端口就好。

创建docker-compose.yml文件,内容如下:

version: "3"

services:
  dcgm:
    image: nvidia/dcgm-exporter:latest
    container_name: nvidia-dcgm-exporter
    ports:
    - 9400:9400
    restart: always
1
2
3
4
5
6
7
8
9

启动nvidia-dcgm-exporter容器

docker-compose up -d
1

检查服务是否启动正常

部署完成!

# (三)部署cadvisor

将google-cadvisor_latest.tarDocker镜像上传到需要监控的服务器任意目录,导入镜像:

docker load < google-cadvisor_latest.tar
1

检查8080端口是否被占用,若占用了,选个你喜欢的端口就好。

创建docker-compose.yml文件,内容如下:

version: "3"

services:
  cadvisor:
    image: google/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    restart: always
    volumes:
    - /:/rootfs:ro
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
    - /var/run:/var/run:ro
    - /dev/disk/:/dev/disk:ro
    - /cgroup:/cgroup:ro
    devices:
     - /dev/kmsg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

启动cadvisor容器

docker-compose up -d
1

检查服务是否启动正常

部署完成!

# 二、部署&配置Prometheus

将prometheus-2.19.0.linux-amd64.tar.gz上传至服务器任意目录下并解压

# (一)配置prometheus.yml

配置prometheus.yml文件的scrape_configs节点

scrape_configs:
  - job_name: 'cadvisor'
    scrape_interval: 30s
    static_configs:
    - targets: ['172.16.108.8:8080']
  - job_name: 'dcgm'
    scrape_interval: 30s
    static_configs:
    - targets: ['172.16.108.8:9400']

  - job_name: 'node'
    scrape_interval: 30s
    static_configs:
    - targets: ['172.16.108.8:9100']
1
2
3
4
5
6
7
8
9
10
11
12
13
14

检查9090端口是否被占用,若占用请参考./prometheus --help命令的提升修改启动端口。

# (二)启动prometheus服务

nohup ./prometheus --web.enable-admin-api --web.enable-lifecycle &
1

如何将服务设置为开机启动,注册为系统服务,请查阅《如何把应用服务注册到Systemd》一文

检查服务是否启动成功

# (三)查看exporter信息是否拉取成功

等待30秒后,查看各个节点的信息上报情况

此处由于网络故障,114.1服务端和108.8的exporter节点网络不通,显示节点故障

# (四)增加更多节点

若有多个被监控服务器节点的exporter需要配置,按需添加即可,举个例子:

# (五) 热加载配置

执行如下命令即可让修改的配置文件生效,注意IP和端口根据实际情况修改

curl -X POST http://172.16.114.1:9090/-/reload
1

记得查看新增的exporter是否成功。

# 三、部署&配置Grafana

将grafana-7.0.3.linux-amd64.tar包上传至服务器任意目录下,并解压

# (一)修改配置文件

进入conf目录下,修改defaults.ini配置文件,如下内容:

# (二)启动grafana服务

进入bin目录下,启动服务:

nohup ./grafana-server &
1

如何将服务设置为开机启动,注册为系统服务,请查阅《如何把应用服务注册到Systemd》一文

打开浏览器检查是否启动成功

第一次登陆,默认管理员账号密码为:admin/admin

# (三)增加数据源

进入主页后,增加数据源配置:

# 四、配置Grafana报表

接下来离成功只有一步之遥了,配置DashBoard。 虽然Grafana很灵活,支持各类空间,各种维度,各种筛选条件,但纯手工打造DashBoard有一定的难度,我们走捷径,用最简单的办法最高的效率实现需求目标。

将热心群众配置好的文件导入即可。

DashBoard序号 名称 配置文件 下载地址
1 服务器资源监控看板 服务器资源监控看板-1593417269630.json http://172.16.111.6:40000/share/MITaVXhh
2 NVIDIA GPU 资源监控看板 NVIDIA GPU 资源监控看板-1594689242384.json http://172.16.111.6:40000/share/7zjPhoyS
3 Docker资源监控看板 Docker资源监控看板-1657684860817.json http://172.16.111.6:40000/share/zW0sF8bi

下面以服务器资源监控看板为例演示下导入操作:

上传下载好的JSON配置文件

查看导入的DashBoard

大功告成!

# 注意事项

本文档的演示案例,没有进行相关服务守护配置,正式使用请注意配置,可以用的方法很多,比如使用Systemd,请参阅《如何把应用服务注册到Systemd》一文。
请注意Prometheus服务端的存储空间是否充足,避免写满磁盘。

#监控运维#Prometheus#Grafana#性能测试#工具
上次更新: 7/26/2026, 3:17:15 PM
视频推流方案
Pythoner的vim

← 视频推流方案 Pythoner的vim→

最近更新
01
测试覆盖度量全景图
11-30
02
Prism测试覆盖度量
11-30
03
AITDBClient使用文档
11-15
更多文章>
Theme by Vdoing | Copyright © 2021-2026 toddlerya | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式