zoukankan      html  css  js  c++  java
  • jmeter+influxdb+grafana搭建压测监控平台

    转自:https://www.cnblogs.com/mike-liu/p/10080351.html

    概述
      本文将介绍如何使用Jmeter+influxDB+Grafana搭建压测可视化实时监控


    痛点
      在使用jmeter做性能测试的时候,监控系统性能的时候,无论是使用插件还是报告生成,都比较麻烦,比如监控服务的tps信息

     

    为了能够及时看到实时,并且比较美观的图表,我们可以通过jmeter的AbstractBackendListenerClient类,使用Backend Listener发送数据到数据库的存储实时结果。
    从jmeter2.13开始,Backend Listener提供一下功能:

    • 实时数据
    • 漂亮图表
    • 能够对比2个以上的测试计划

    JMeter 3.2的Backend Listener中引入了 InfluxDBBackendListenerClient允使用UDP或HTTP协议将统计指标发送到InfluxDB

    此类提供的功能:

    • 实时数据
    • 漂亮图表
    • 能够对比2个以上的测试计划
    • 能够向图表添加注释
    • 只要jmeter产生相同的Backend,就可以存储监控数据

    Influxdb简介
     InfluxDB是用Go语言编写的高性能、高可用的分布式时序数据存储数据库,无其他依赖,安装简单快速。
      该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。
    InfluxDB特征:

    • 无结构(无模式):可以是任意数量的列
    • 可以设置metric的保存时间
    • 支持与时间有关的相关函数(如min、max、sum、count、mean、median等),方便统计
    • 支持存储策略:可以用于数据的删改。(influxDB没有提供数据的删除与修改方法)
    • 支持连续查询:是数据库中自动定时启动的一组语句,和存储策略搭配可以降低InfluxDB的系统占用量。
    • 原生的HTTP支持,内置HTTP API
    • 支持类似sql语法select * from mysql.user
    • 支持设置数据在集群中的副本数
    • 支持定期采样数据,写入另外的measurement,方便分粒度存储数据。

    schemaless: 结构型数据库类似Mysql需要先定义列,influxdb无需预先定义,无结构的
    与传统数据库中的名词比较

     influxDB中的名词  传统数据库的概念
     database  数据库
     measurement  数据库中的表
     points  表里面的一行数据

    influxdb的points数据说明

    • time:默认存储数据会有时间,时间无需关心,会帮我们自动插入
    • tags:用来存储数据标识,比如CPU.idle
    • fileds:用来存储数据 value=90

    influxdb下载安装
    下载:
    [root@jmeter ~]#wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm --no-check-certificate
    百度网盘下载地址:https://pan.baidu.com/s/13hKY22krYSLTs9_A2O7KVA
    提取码:sc9z
    安装
    [root@jmeter opt]# rpm -ivh influxdb-1.7.0.x86_64.rpm
    Preparing... ########################################### [100%]
    1:influxdb ########################################### [100%]
    安装完之后,生成默认的配置文件 /etc/influxdb/influxdb.conf

    修改influxDB配置文件
    在配置文件中找到graphite配置项,去掉前面的“#”号
    [root@jmeter opt]# vim /etc/influxdb/influxdb.conf

    复制代码
    [[graphite]]
    # Determines whether the graphite endpoint is enabled.
    enabled = true
    database = "jmeter"    # 数据库名称
    retention-policy = ""
    bind-address = ":2003"    # 端口
    protocol = "tcp"
    consistency-level = "one"
    
    修改以下信息
    [meta]
    dir = "/usr/local/influxdb/meta"    #存放最终存储的数据,文件以.tsm结尾
    [data]
    dir = "/usr/local/influxdb/data"    #存放数据库元数据 wal
    wal-dir = "/usr/local/influxdb/wal"    #存放预写日志文件
    
    修改HTTP端口信息
    [http]
    # Determines whether HTTP endpoint is enabled.
    enabled = true
    
    # The bind address used by the HTTP service.
    bind-address = ":8086"
    复制代码

    创建目录更新权限
    [root@jmeter ~]#mkdir -p /usr/local/influxdb/
    [root@jmeter ~]#chown -R influxdb:influxdb /usr/local/influxdb/
    修改完成之后,可以使用以下命令启动influxDB服务
    两种方法:
    1、[root@jmeter ~]# influxd -config /etc/influxdb/influxdb.conf

    2、添加到环境变量中(推荐)
    [root@jmeter ~]# vim /etc/profile
    export INFLUXDB_CONFIG_PATH=/etc/influxdb/influxdb.conf
    [root@jmeter ~]# source /etc/profile
    [root@jmeter ~]# influxd &
    influxDB的tcp端口:8088
    查看端口有没有起来
    [root@jmeter ~]# netstat -anp|grep 8088
    influxDB数据库操作

    复制代码
    [root@jmeter ~]# influx    # 登录数据库
    Connected to http://localhost:8086 version 1.6.0
    InfluxDB shell version: 1.6.0
    > show databases    # 查看数据库
    name: databases
    name
    ----
    _internal
    jmeter
    > create database "jmeter"    # 创建数据库
    > use jmeter    #切换数据库
    Using database jmeter
    > create user "admin" with password '123456' with all privileges    # 创建管理员权限的用户
    复制代码

    Jmeter配置

    • 创建一个测试计划,并添加Backend Listenter,Backend Listener implementation 选择org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient
    • 添加线程
    • 设置influxDB IP及端口
    • 运行测试,等待几秒看数据

     

     

    端口说明

    2003端口:Jmeter往数据库发数据的端口
    8086端口,Grafana从数据库取数据的端口

    查看Jmeter数据库的表信息

    复制代码
    [root@jmeter ~]# influx
    Connected to http://localhost:8086 version 1.6.0
    InfluxDB shell version: 1.6.0
    > show measurements
    ERR: database name required
    Warning: It is possible this error is due to not setting a database.
    Please set a database with the command "use <database>".
    > show databases
    name: databases
    name
    ----
    _internal
    jmeter
    > use jmeter
    Using database jmeter
    > show measurements
    name: measurements
    name
    ----
    jmeter.all.a.avg
    jmeter.all.a.count
    jmeter.all.a.max
    jmeter.all.a.min
    jmeter.all.a.pct90
    jmeter.all.a.pct95
    jmeter.all.a.pct99
    jmeter.all.h.count
    jmeter.all.ko.avg
    jmeter.all.ko.count
    jmeter.all.ko.max
    jmeter.all.ko.min
    jmeter.all.ko.pct90
    jmeter.all.ko.pct95
    jmeter.all.ko.pct99
    jmeter.all.ok.avg
    jmeter.all.ok.count
    jmeter.all.ok.max
    jmeter.all.ok.min
    jmeter.all.ok.pct90
    jmeter.all.ok.pct95
    jmeter.all.ok.pct99
    jmeter.all.rb.bytes
    jmeter.all.sb.bytes
    jmeter.test.endedT
    jmeter.test.maxAT
    jmeter.test.meanAT
    jmeter.test.minAT
    jmeter.test.startedT
    复制代码

    这个时候已经可以将统计数据成功发送到InfluxDB

    Grafana和influxDB数据源配置
    什么是Grafana
    Grafana是一款可视化工具,大多使用在时序数据的监控方面,如同Kibana类似。Grafana的UI更加灵活,有丰富的插件,功能强大,数据源可以使用zabbix、influxdb等
    grafana的下载和安装
    官网:https://grafana.com/grafana/download
    下载地址:https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.1-1.x86_64.rpm
    安装:rpm -ivh grafana-5.2.1-1.x86_64.rpm

    启动
    [root@jmeter ~]# service grafana-server start
    Starting Grafana Server: ... [ OK ]

    浏览器访问:http://IP:3000/login
    grafana的默认用户名密码都是admin,第一次登录会要求更改密码

    创建influxDB数据源

     

    单击save & Test,提示:data source is working,说明保存和连接成功

    创建dashboard

    新建Graph面板

    数据绑定

     

    选择influxdb的数据源库名,jmeter的相关表

    查看SQL语句

    定义显示的名称

    保存数据模板
    直接按ctrl+s或点击保存按钮

     

    说明:想要了解这些监控都代表什么意思,可以访问Jmeter的官网地址去查看阅读“http://jmeter.apache.org/usermanual/realtime-results.html”

    复制代码
    线程数/用户相关指标
    test.minAT-Min active threads:最小活跃线程数
    test.maxAT-Max active threads:最大活跃线程数
    test.meanAT-Mean active threads:活跃线程数
    test.startedT-Started threads:启动线程数
    test.endedT-Finished threads:结束线程数
    响应时间指标
    .ok.count:采样器的成功响应数
    .h.count:每秒点击数
    .ok.min:采样器成功最短响应时间
    .ok.max:采样器成功最长响应时间
    .ok.avg:采样器成功平均响应时间
    .ok.pct:采样器成功响应百分比
    .ko.count:采样器失败响应数
    .ko.min:采样器失败的响应最短时间
    .ko.max:采样称失败最长响应时间
    .ko.avg:采样器失败平均响应时间
    .ko.pct:采样器失败响应百分比
    .a.count:采样器响应数(ok.count和ko.count的总和)
    .a.min:采样器最小响应时间(ok.count和ko.count的最小值)
    .a.max:采样器最大响应时间(ok.count和ko.count的最大值)
    .a.avg:采样器平均响应时间(ok.count和ko.count的平均值)
    .a.pct:采样器响应百分比(根据和失败样本的总数计算)
    Backend Listener的默认百分位设置为“90;95;99”,即百分位数为90%,95%和99%。
    Graphite使用点(“.”)去拆分的元素,这可能与十进制百分位值混淆。JMeter转换任何此类值,用下划线(“ - ”)替换点(“.”)。例如,“99.9 ”变为“99_9 ”
    默认情况下,JMeter发送在samplerName“all”下累计的所有采样器的指标。 如果配置了 BackendListenerSamplersList,那么JMeter还会发送匹配样本名称的指标,前提是配置 summaryOnly=true
    复制代码

    压测中的效果

    导入Dashboard模版
    从Grafana官网下载相应的模板
    官网模版库:https://grafana.com/dashboards
    搜索看板模版

    下载:jmeter load test

     

    下载的jar包复制到jmeter的/lib/ext下面

    导入模板

    加载模板文件

    选择模板数据源

    重启jmeter,选择rocks.nt.apm.jmeter.JMeterinfluxDBBackendListenerClient,输入influxDB的host和端口,之前创建用户名和密码

    压测的效果图

  • 相关阅读:
    html基础知识
    Python yield 使用浅析
    XSS跨站攻击
    box-sizing的用法(笔记)
    编译原理中DFA最小化
    提醒自己!!!
    Eclipse下运行maven项目失败且Tomcat服务器也启动不了
    Descriptio Resource Path LocationType Archive for required library: 'D:/apache-maven/apache-maven-3.6.0/mavenrepository/org/springframework/spring-aspects/4.3.7.RELEASE/spring-aspects-4.3.7.RELEASE.
    Eclispe创建maven工程缺失web.xml报web.xml is missing and <failOnMissingWebXml> is set to true的错误
    ssm 出现 Method threw 'org.apache.ibatis.binding.BindingException' exception.Invalid bound statement (not found)……
  • 原文地址:https://www.cnblogs.com/linwenbin/p/13967486.html
Copyright © 2011-2022 走看看