树莓派4B基于jenkins+jmeter+granfa+influxdb搭建接口实时监控平台
硬件:Raspberry Pi 4B-8g版本
系统:Ubuntu 20.04 LTS
最近有个客户化本地实施的项目需要对接口实时监控,以便即时发现问题,我们在树莓派Pi4(IP:192.168.5.21)上基于jenkins+jmeter+granfa+influxdb搭建了一个简易的接口实时监控平台,下面简单介绍搭建过程和实用效果,供有兴趣的同学参考。
相关安装文件
https://dl.influxdata.com/chronograf/releases/chronograf-1.8.10_linux_armhf.tar.gz
https://dl.grafana.com/oss/release/grafana_7.4.2_arm64.deb
https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.1.tgz
安装influxdb
# cd /opt/server
# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.4_linux_armhf.tar.gz
# tar -zxvf influxdb-1.8.4_linux_armhf.tar.gz
# mv influxdb-1.8.4-1 influxdb
# cd inflxdb
# mkdir /etc/influxdb
# cp etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf
修改配置文件
配置文件位置:/etc/influxdb/influxdb.conf
主要是启用graphite配置,并修改数据库名为jmeter
[[graphite]]
# Determines whether the graphite endpoint is enabled.
enabled = true
database = "jmeter"
retention-policy = ""
bind-address = ":2003"
protocol = "tcp"
consistency-level = "one"
# These next lines control how batching works. You should have this enabled
# otherwise you could get dropped metrics or poor performance. Batching
# will buffer points in memory if you have many coming in.
# Flush if this many points get buffered
batch-size = 5000
# number of batches that may be pending in memory
batch-pending = 10
# Flush at least this often even if we haven't hit buffer limit
batch-timeout = "1s"
# UDP Read buffer size, 0 means OS default. UDP listener will fail if set above OS max.
udp-read-buffer = 0
设置启动文件
# vi /usr/lib/systemd/system/influxdb.service
[Unit]
Description=influxdb
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/server/influxdb/usr/bin/influxd --config /etc/influxdb/influxdb.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动服务
# systemctl daemon-reload
# systemctl start influxdb
设置自启动
# systemctl enable influxdb
创建jmeter数据库
# cd /opt/server/influxdb
# ./usr/bin/influx
Connected to http://localhost:8086 version 1.8.4
InfluxDB shell version: 1.8.4
> create database jmeter
安装grafana
# cd /opt/software
# wget https://dl.grafana.com/oss/release/grafana_7.4.2_arm64.deb
# dpkg -i grafana_7.4.2_arm64.deb
## 启动服务
# systemctl daemon-reload
# systemctl start grafana-server
## 设置自启动
# systemctl enable grafana-server
访问http://192.168.5.21:3000/login
输入默认用户名/密码 admin/admin ,点log in,首次登录需要修改密码如下
配置influxdb数据源
接入grafana系统后,我们首先配置数据库,如上图所示,我们从左边菜单区依次点Configuration、选中“Datasource”,进入配置管理的数据源标签页面如下
grafana因为是新装的缘故,目前还没有一个数据源,点击“Add data source”进入添加数据源页面如下
可以看到grafana支持安装好多种类的数据库,这里我们不过多阐述,我们选择添加InfluxDB类型的数据源
http区域的URL填入 http://localhost:8086
InfluxDB Details 区域的 Database 填入 jmeter
点“Save & Test”,提示“Data source is working”,到此我们的第一个数据源就添加完毕了。
导入jmeter面板
接下来我们导入jmeter面板
如上图所示,我们从左边菜单区依次点“+”、选中“Import”,进入导入面板页面如下
输入5496,点Load
DB name选择InfluxDB,其它输入框保持默认值,点“Import”,进入Jmeter面板如下
安装jenkins
这里我们使用apt安装方式,所以不需要安装文件
## 安装jdk
# apt install openjdk-8-jdk
# java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-8u282-b08-0ubuntu1~20.04-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)
## 安装jenkins
# wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
# sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
# apt update
# apt install jenkins
访问http://192.168.5.21:8080
输入管理员密码,点“继续”按钮,进入自定义Jenkins页面如下
“选择插件来安装”,进入选择插件界面如下,我这里安装的jenkins版本是2.263.4,默认选择了20个插件如下
点“安装”按钮,等待插件安装完成后,会显示“创建第一个管理员用户”页面如下
如上我们新建一个管理员账户“admin”,点击“保存并完成”,进入“实例配置”页面如下
继续点击“保存并完成”,进入“Jenkins已就绪”页面如下
继续点击“开始使用Jenkins”,进入Jenkins首页如下
进入插件管理,搜索两个插件,分别安装。一个叫Performance
一个叫Git Parameter
安装jmeter
jmeter也需要jdk环境,我们在装jenkins的时候已经安装了jdk,所以这里只需要下载jmeter安装包,并解压到相关目录下即可
## 下载jmeter
# cd /opt/tools
# wget https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.1.tgz
# tar -zvf apache-jmeter-5.4.1.tgz
实例演示
到这里,我们的接口实时监控平台就搭建好了,只要在jenkins上配置一个简单的流水线,后续我们就可以对我们的系统接口进行实时监控了。这里提供了一个简单的jmx脚本,我们接下来就以这个脚本来演示实时监控平台效果。
建立jenkins任务loadTest
jenkins控制台新建Item,进入新建任务页面如下
任务名称输入“loadTest”,选择项目类型为流水线,点“确定”按钮,进入任务配置页面,直接拉到流水线定义片段如下
输入pipeline script脚本如下
pipeline {
agent any
parameters {
gitParameter name: 'TAG',
type: 'PT_TAG',
defaultValue: 'v0.1'
}
stages {
stage('git chekout v0.1') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: "${params.TAG}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
gitTool: 'Default',
submoduleCfg: [],
userRemoteConfigs: [[url: 'https://gitee.com/pi4k8s/jmxs.git']]
])
}
}
stage('load test') {
steps {
sh '/opt/tools/apache-jmeter-5.4.1/bin/jmeter -n -t demoHome/demoHome.jmx'
}
}
stage('publish report') {
steps {
perfReport filterRegex: '', sourceDataFiles: '**/*.log'
}
}
}
}
直接点保存按钮,该任务建立成功
执行jenkins任务loadTest
进入loadTest任务页面如下
点Build Now链接,会触发首次构建
构建结果如上图显示,刷新loadTest任务页面,会发现Build Now链接变成了Build with Parameters
点Build with Parameters链接,会进入选择tag页面如下
这里我们继续选择v0.1,点“开始构建”按钮。等任务结束后,我们继续刷新loadTest任务页面,如果我们安装过程中如果没有没有偏差,这时候我们会发现这次两次任务应该都执行成功了,显示如下
查看任务执行情况
jenkins控制台看任务执行情况
loadTest任务页面点Performance Trend,可以直接看历次接口的性能趋势报告,这里主要是显示了吞吐量、响应时间和错误率三个指标的折线图。另外通过点Last Report链接和Filter trend data链接可以直接看最近一次的详细测试报告和配置生成性能趋势报告用到什么的测试记录,另外从构建历史中可以打开每次任务的执行结果页面,从结果页面,也可以进入历次执行结果的详细测试报告页面。
如上是loadTest某次执行结果的详细测试报告页面。
grafana控制台看任务执行情况
jenkins控制台看到的任务执行情况统计的指标少,显示效果也一般,这里我们可以看下grafana中的jmeter面板,显示如下
grafana中的jmeter面板显示了更多的信息,除了吞吐量、响应时间、错误率外,还有请求数、收到字节数、发送字节数、网络流量等更多指标。显然比jenkins控制台显示更胜一筹。
配置任务定时执行
到这里,我们的实例就演示完了,读者只要把这里的jmx换成自己的接口监控脚本,这个简单的接口实时监控平台就大功告成了。如果想做到无人值守,那么只需要将任务loadTest配置成定时执行即可,具体配置参考如下
参考