GX博客

分享个人 Full-Stack JavaScript 项目开发经验

使用InfluxDB和Grafana图像化展示k6.io的测试数据

本文将介绍如何在 CentOS7 下安装 InfluxDB 和 Grafana,用于图像化展示 k6.io 的测试数据。虽然官方已经提供了便捷的 docker 方案,但是仍有必要了解它们三者之间是如何配合工作的。



k6.io 的安装与简介

k6.io 简介

k6 可以帮我们完成什么,比如?

  • 自动化性能测试,快速发现性能问题,核实负载能力。
  • 可灵活定义自己的性能目标,也为成本控制、团队协作等提供便利。
  • 持续测试,为每次代码版本迭代提提供性能数据,使产品上线更加可靠。

k6 有哪些优势?

  • 基于 JS ES6 的 API。

    • 让你可以集成到自己的工作流和自动化管道中。
    • 让你可以使用同一份 JS 代码来加密请求数据、获取客户端 token 等。
    • 可以模块化、参数化执行编程操作。

  • 简单的 CLI,可用于本地和云执行。这也可集成到自己的 CLI 工具的子功能中。

  • 可以在 Linux、Mac、Windows、Docker 中使用。

  • 有丰富的数据可视化输出方案,并且输出数据带有很多筛选过滤标签。


k6.io 的安装

在 CentOS7 下通过 yum 安装:

wget https://bintray.com/loadimpact/rpm/rpm -O bintray-loadimpact-rpm.repo
sudo mv bintray-loadimpact-rpm.repo /etc/yum.repos.d/
sudo yum install k6

在 Windows 下可以直接下载 msi 程序安装。

在 MacOS 中,官方表示可以通过 brew 安装:

brew install k6

但是实际中,尝试多次也因网络原因中断,所以这里建议在 MacOS 中直接使用预编译的二进制程序。在它的 github 发布页面就能下载

下载完成之后,我们还可以把程序保存的路径添加到用户环境变量中,使它可以直接在终端中使用。创建或编辑用户环境变量文件:

vi ~/.bash_profile

文件内容如(分隔符使用冒号):

export PATH=/Users/leeguangxing/:$PATH

其中 /Users/leeguangxing/ 为 k6 程序保存实际的路径。最后载入配置文件:

source ~/.bash_profile

查看 k6 命令帮助:

k6 -h
要查看 k6.io 的最新官方安装步骤,请点击这里

InfluxDB 的安装与简介

本文在撰写时,InfluxDB 的最新稳定版本为 v1.7.10。


InfluxDB 的安装

在 CentOS7 中可以使用 yum 安装 InfluxDB。添加仓库配置文件:

vi /etc/yum.repos.d/influxdb.repo

仓库的配置如下:

[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

使用 yum 安装:

sudo yum install influxdb

启动 InfluxDB 服务:

sudo systemctl start influxdb

通过这种方式安装,InfluxDB 会自动配置开机启动,我们可以这样查看:

systemctl list-unit-files | grep influx

上面命令的输出结果为:

influxd.service      enabled
influxdb.service     enabled

查看当前 InfluxDB 的版本:

influxd version
要查看 InfluxDB 的最新官方安装步骤,请点击这里

InfluxDB 简介

InfluxDB 是一个时序数据库,默认使用端口为 8086。InfluxDB 线路协议中的点遵循以下格式:

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

以上格式包含几个重要的概念,官方入门教程中的描述如下:

  • points

    时间序列上的点,用于度量每个离散样本中的值。

  • measurement

    测量,可视为 SQL 表。

  • tags

    标签,相当于表中的列,并且它会被索引,用于标识测试值的元数据。

  • field

    测量值,相当于表中的列,但不会被索引,用于记录样本的数据值。

可以通过 CLI 连接本地 InfluxDB 实例:

influx -precision rfc3339

其中,参数 precision 用于指定返回时间戳的格式/精度。(rfc3339 格式即为:YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)

连接数据库后,我们可以查看 InfluxDB 有哪些初始化数据库:

SHOW DATABASES

从结果可以看到,只有一个系统库 _internal。

下面我们可以创建自己的数据库,试着插入和查询值:

CREATE DATABASE mydb
USE mydb
INSERT load,host=serverA cpu=34,ram=40
SELECT * FROM load

输出结果如下:

name: load
---------
time		    	        host         cpu   ram
2020-02-28T19:28:07.580664347Z  serverA	     34	   40
注意,跟 MySQL 不一样,InfluxDB 命令下工具中不要使用分号作为结束语。

k6.io 数据的导出

下面为测试本博客首页的示例代码:

import http from "k6/http";
import {group, check} from "k6";

export let options = {
  stages: [
    {duration: '30s', target: 5},
    {duration: '30s', target: 20},
    {duration: '30s', target: 50},
  ]
};

export default function () {

  group('html page', function () {
    const res = http.get("https://www.leeguangxing.cn");
    check(res, {
      "status was 200": (r) => r.status === 200
    });
  });

};

k6 内置支持将结果直接输出到 InfluxDB 数据库,命令如下:

k6 run --out influxdb=http://172.20.10.10:8086/leeguangxing_load_test index.js

上面命令告诉 k6 连接到指定地址的 InfluxDB 实例,并将测试数据发送到名为 leeguangxing_load_test 的数据库。如果数据库不存在,k6 会自动创建它。当 InfluxDB 数据库获得 k6 测试结果后,即可使用 Grafana 查看可视化结果。

要查看 k6.io 使用 InfluxDB + Grafana 的官方安装步骤,请点击这里

Grafana 的安装与模板导入

Grafana 的安装

在 CentOS7 下同样可以通过 yum 安装 Grafana,其 web 服务默认使用的端口为 3000。

添加 yum 仓库配置文件:

vi /etc/yum.repos.d/grafana.repo

开源版 Grafana 的仓库配置如下:

[grafana]
name=grafana
baseurl=https://packages.grafana.com/enterprise/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

使用 yum 安装:

sudo yum install grafana

这种方式安装,在实际中由于网络原因会比较耗时,所以建议使用rpm 包安装:

wget https://dl.grafana.com/oss/release/grafana-6.6.2-1.x86_64.rpm
sudo yum localinstall grafana-6.6.2-1.x86_64.rpm
要查看 Grafana 的最新官方安装步骤,请点击这里

Grafana 的模板导入

登录

首次访问 Grafana 的 web 服务时,需要输入初始化帐号 admin 和密码 admin 登录。此后,系统会提示你重置密码:

Grafana重置密码

添加数据源

在 k6 创建了数据库,并把测试数据写入后,就可以为 Grafana 添加数据源。这里的数据源选择 InfluxDB 的:

选择数据源

选择后,为数据源配置名称、数据库地址、数据库名等参数,保存时 Grafana 会自动校验数据源的可用性:

InfluxDB数据源配置

导入模板

k6 官方推荐了一款由用户贡献的实用模板,https://grafana.com/grafana/dashboards/2587

在导入模板时,只需要填上上面的模板地址,并选择刚才添加的数据源:

导入Grafana模板

导入成功后,就能看到刚才测试的数据情况面板了:

测试数据展示

到此为止,我们已经完成了从 k6 的安装到 Grafana 上展示测试数据的所有基本步骤。后续文章会继续继续介绍如何合理编写测试程序,分析测试数据,及服务器程序调优等。

版权声明:

本文为博主原创文章,若需转载,须注明出处,添加原文链接。

https://leeguangxing.cn/blog_post_76.html