性能测试工具 JMeter+Influxdb2 搭建性能监控环境

东东_Miller · 2021年04月15日 · 最后由 闲云野鹤 回复于 2021年04月17日 · 6301 次阅读

JMeter Integrate Influxdb2

原文链接:https://github.com/miller-shan/notes/blob/master/Technology/Testing/Performance/JMeter/JMeterIntegrateInfluxdb2.md

  • 环境:CentOS7, JMeter 5.4.1
  • 文章背景:网上资料都是基于 influxdb1.x+grafana 的搭建监控方案,但是关于 Influxdb2 资料比较少,最近正好在学习性能测试所以就记录下来,分享给大家。使用Influxdb2 已经集成了图形界面可以无需使用 grafana
  • 文章目的:一步一步教你如果使用 Influxdb2 完成服务器的指标监控。
  • 正文内容:主要包含几个部分"官网介绍、工具安装、配置文件、基本使用、数据验证".
  • 总结经验:要确保电脑可以连接上"真正的互联网"。

JMeter Install

  1. 使用 JMeter5.4.1 版本, 下载地址:JMeterDownload

Influxdb2 Install

  • Influxdb 是一个开源的分布式时序、时间和指标数据库,使用 Go 语言编写,无需外部依赖。Influxdb 有如下三大特性:
    • 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);
    • 可度量性:你可以实时对大量数据进行计算;
    • 基于事件:它支持任意的事件数据;
  1. 官网下载及安装方法:https://portal.influxdata.com/downloads/ 。我服务器是 CentOS 7 所以我选择的是 RedHat&CentOS,目前官网最新版本为 2.0.4。

    wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4.x86_64.rpm
    sudo yum localinstall influxdb2-2.0.4.x86_64.rpm
    wget https://dl.influxdata.com/telegraf/releases/telegraf-1.18.0-1.x86_64.rpm
    sudo yum localinstall telegraf-1.18.0-1.x86_64.rpm
    
  2. Github 下载地址及安装方法:官网如果下载不了可以尝试从 github 上下载

    1. https://github.com/influxdata/influxdb/releases/tag/v2.0.4
    2. https://github.com/influxdata/telegraf/releases/tag/v1.18.0
    wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4.x86_64.rpm
    rpm -iv influxdb2-2.0.3.x86_64.rpm
    wget https://dl.influxdata.com/telegraf/releases/telegraf-1.18.0-1.x86_64.rpm
    rpm -iv telegraf-1.18.0-1.x86_64.rpm
    
    
  3. 启动服务:sudo service influxdb start

  4. 访问:http://192.168.163.11:8086/ 第一次初始化需要输入账号、密码、组织、bucket 等信息。

  5. 如果需要通过 CLI(command line interface),官网建议我们做一个设置以避免每次都需要进行身份验证。在终端输入一下信息,-o:为组织名称,-t 是 token。

    influx config create -n default \
       -u http://192.168.163.11:8086 \
       -o MillerOrg \
       -t ripoNMQhBlscArM7Nr_mGnjroq_dltBUxAqf5eI4zXsSIRion_eu0_f-DYIeZIFQ5Rc5zztVD34FEUNQQETNLQ== \
       -a
    

Influxdb 整合 JMeter

  1. JMeter 数据写入 Influxdb 需要在 influxdb 中生成一个 token 用于外部系统写入数据库。

  2. 在 Influxdb 中选择 Data > Tokens, 点击 Generate > Read/Write Token .

  3. 生成之后返回"Tokens"Tab 页,点击"JMeterToken"弹出 token 页面点击"Copy to Clipboard"复制 token 到剪切板。

  4. 启动 JMeter。在测试计划下添加一个"Thread Group",添加一个"Java Request",添加一个"View Results Tree",一个"Summary Report"。

  5. 添加一个 BackendListener 用于将 JMeter 的数据发送给 Influxdb,"Thread Group --> Add -->Listener-->Backend Listener", Backend Listener 选择"org.apache.jmeter.visualizers.backend.influxdb.InfluxDB*RawBackendListenerClient*".

- influxdbMetricsSender: org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
- influxdbUrl:http://192.168.163.11:8086/api/v2/write?org=MillerOrg&bucket=JMeter
- influxdbToken:填写 Influxdb 网站中 Data-->Tokens-->刚才创建的"JMeterToken"中的 token 值。
- measurement:jmeter

- 注意:如果 JMeter 是 5.4 以前的版本可以没有 Raw 这个监听器,那选择"org.apache.jmeter.visualizers.backend.influxdb.InfluxDBBackendListenerClient".然后添加一个参数 Add-->Name:influxdbToken, Value:MyToken。

  1. 线程组-->勾选 “Loop Count Infinite” 循环发送请求,点击 start 开始测试。JMX 脚本文件可以在 GitHub 上下载,地址https://github.com/miller-shan/notes/tree/master/Technology/Testing/Performance/JMeter

  1. 登入 Influxdb 查看数据表

  1. 看到这张图就是完成了 Influxdb 和 JMeter 的数据打通了。

Influxdb 使用 Telegraf

  • Telegraf 是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 InfluxDB 数据库。内存占用小,通过插件系统可轻松添加支持其他服务的扩展。Telegraf 可以采集多种组件的运行信息,而不需要自己手写脚本定时采集,降低数据获取的难度。
  1. 下载安装:略,上面安装 Influxdb 时已经介绍过了下载地址及安装方法。

  2. 创建配置文件:左侧菜单 Data-->Telegraf-->Create Configuration-->Bucket 选择 JMeter-->指标选择 System-->Continue-->

  1. 创建完会提示让你验证你的配置,直接"Finish"即可。创建完之后会在 Tokens 页自动创建用于读写 telegraf 的 token。

  2. 拷贝配置文件内容

  1. 备份 telegraf.conf 并且使用我们刚刚新生成的配置文件内容, 需要修改配置文件里面的 token。logfile 可以根据自行选择进行添加路径,目前我设置的是 logfile = "/var/log/telegraf/telegraf.log"。

    [root@perf src]# cd /etc/telegraf/
    [root@perf telegraf]# mv telegraf.conf telegraf.conf.back
    [root@perf telegraf]# vi telegraf.conf
    

  1. 启动服务:service telegraf start

  2. 添加 dashboard,从模板中创建。

  3. 点击刚刚创建的 System 模板,添加一条过滤规则,根据主机名进行过滤。(不知道主机名的在命令行敲:hostname)

from(bucket: v.bucket)
  |> range(start: v.timeRangeStart)
  |> filter(fn: (r) => r._measurement == "system")
  |> filter(fn: (r) => r._field == "uptime")
  |> filter(fn: (r) => r["host"] == "perf这里输入你自己的主机名") 
   |> last()
   |> map(fn: (r) => ({r with _value: r._value / 86400}))
  |> yield(name: "last")
  1. 到此就完成了主机基本信息的监控了。

Influxdb 命令行

使用 influx 进行查询

  1. 查询指定表的数据

    influx query -o MillerOrg 'from(bucket:"JMeter")|>range(start:-1m)'
    
  2. 通过界面查看 sql 语句.点击 “Script Editor“

FAQ

Influxdb 如何修改密码

  1. 官网:https://docs.influxdata.com/influxdb/v2.0/users/change-password/
  2. 终端输入:influx user password -n 用户名
  3. 终端会提示让你输入两次新密码。

Reference

https://portal.influxdata.com/downloads/

https://docs.influxdata.com/influxdb/v2.0/query-data/flux/

https://qainsights.com/jmeter-integration-with-influxdb-2-0/

https://blog.csdn.net/qq_29648139/article/details/104071486

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

前两天也搭了一下 Influxdb 2.0,不过 jmeter 请求量大了之后,自带监控页面卡死了,不知大佬有没有遇到😀

闲云野鹤 回复

你说的这个情况我没有遇到过。你可以看下服务器的资源使用情况。然后调整一下 JMeter 同步 influxdb 的时间。我记得默认应该是 5 秒一次。

选择 RawBackendListenerClient,jmeter 还需要配置什么,才能看到详细指标

只好用老的那个 listener,TPS 好像多了 5 倍,要除以 5,😂

佳佳 回复

不需要配置了,JMX 的脚本我也上传了,可以下载下来看下。

东东_Miller 回复

看了下源码中的备注,raw 会把每个请求都发送到数据库,所以还要自己在数据库里聚合,终于理解 raw “未加工” 的含义了 😂

东东_Miller 回复

好的,感谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册