分享个人 Full-Stack JavaScript 项目开发经验
本文将介绍如何在 CentOS7 下安装 InfluxDB 和 Grafana,用于图像化展示 k6.io 的测试数据。虽然官方已经提供了便捷的 docker 方案,但是仍有必要了解它们三者之间是如何配合工作的。
k6 可以帮我们完成什么,比如?
k6 有哪些优势?
基于 JS ES6 的 API。
简单的 CLI,可用于本地和云执行。这也可集成到自己的 CLI 工具的子功能中。
可以在 Linux、Mac、Windows、Docker 中使用。
有丰富的数据可视化输出方案,并且输出数据带有很多筛选过滤标签。
在 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 的最新稳定版本为 v1.7.10。
在 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 是一个时序数据库,默认使用端口为 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 命令下工具中不要使用分号作为结束语。
下面为测试本博客首页的示例代码:
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 的官方安装步骤,请点击这里。
在 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 的 web 服务时,需要输入初始化帐号 admin 和密码 admin 登录。此后,系统会提示你重置密码:
在 k6 创建了数据库,并把测试数据写入后,就可以为 Grafana 添加数据源。这里的数据源选择 InfluxDB 的:
选择后,为数据源配置名称、数据库地址、数据库名等参数,保存时 Grafana 会自动校验数据源的可用性:
k6 官方推荐了一款由用户贡献的实用模板,https://grafana.com/grafana/dashboards/2587。
在导入模板时,只需要填上上面的模板地址,并选择刚才添加的数据源:
导入成功后,就能看到刚才测试的数据情况面板了:
到此为止,我们已经完成了从 k6 的安装到 Grafana 上展示测试数据的所有基本步骤。后续文章会继续继续介绍如何合理编写测试程序,分析测试数据,及服务器程序调优等。