一.背景
由于前段时间线上业务接口经常崩溃,而又无法第一时间发现,被领导定义为生产事故,随后开会三番两次提及要构建生产接口监控系统,最好能有预警功能。线上的业务是15年基于jdk1.7开发的springmvc+ant编译打包的应用,无法集成普罗米修斯这些性能强大但是较重的业务监控系统。
二.思路
收到这个需求后,第一时间的想法是使用定时任务去跑各个业务接口,但是线上如此多的业务接口,光写这些定时任务很明显不现实。经过调研,随后采用Jenkins(定时构建)+ant(脚本构建)+Jmeter(接口请求)的方式进行简易业务监控系统的搭建。
如果对Jenkins还不太熟悉的,可参考这篇文章
ant简单了解是个比较古老的打包编译工具即可。
Jmeter是阿帕奇组织下的性能并发测试工具。
三.实战
1.Jenkins安装
Jenkins安装使用教程,本篇不再进行赘述,详细可参考。
2.ant安装与配置
(1)、从http://ant.apache.org 上下载tar.gz版ant
(2)、复制到/usr下
(3)、tar -vxzf apahce-ant-1.9.2-bin.tar.gz 解压
(4)、vi /etc/profile 修改系统配置文件
#set Ant enviroment
export ANT_HOME=/usr/apache-ant-1.9.2
export PATH=$PATH:$ANT_HOME/bin
使配置生效:source /etc/profile
(5)验证是否安装配置
ant -version
3.Jmeter安装与配置
(1).下载:apache-jmeter-5.1.1.zip,上传到服务器
(2).然后解压到当前传的目录:jmeter
(3).然后把解压的文件配置到对应的环境变量:
export JMETER_HOME=/root/jmeter
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin
(4).source /etc/profile 目的让配置文件生效
(5) 验证配置是否成功 jmeter -v
可以先在本地windows环境安装好jenkins并编写好脚本,如果对Jmeter压测工具还不太熟悉的话,就去找一篇资料去系统学习下
4.整合Jenkins、Ant、Jmeter
(1).将jmeter的ant-jmeter-1.1.1.jar复制到ant的lib目录
(2).ant脚本配置
<?xml version="1.0" encoding="UTF-8"?>
<project name="JmeterTest" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyy/MM/dd HH:mm" />
</tstamp>
<!--Jmeter主目录-->
<property name="jmeter.home" value="/home/software/apache-jmeter-5.1.1" />
<!--存放Jmeter生成的报告文件的文件夹-->
<property name="jmeter.result.dir" value="/home/software/apache-jmeter-5.1.1/result" />
<!--Jmeter文件名-->
<property name="ReportName" value="TestReport" />
<!--jtl文件-->
<property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
<!--html报告文件-->
<property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" />
<!--汇总标签-->
<target name="all">
<antcall target="clean" />
<antcall target="test" />
<antcall target="report" />
</target>
<!--每次清除Jmeter生成的结果目录-->
<target name="clean">
<delete includeemptydirs="true">
<fileset dir="${jmeter.result.dir}" includes="**/*"/>
</delete>
</target>
<!--运行Jmeter脚本文件-->
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<testplans dir="${jmeter.home}/jmx" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<!--生成测试报告-->
<target name="report">
<xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" >
<param name="dateReport" expression="${time}"/>
</xslt>
<!--复制报告所需图标-->
<copy todir="${jmeter.result.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
(3).Jenkins创建监控任务
(4).构建之前将ant的脚本文件,build.xml放到【测试监控】任务的workspace目录中,如果你的Jenkins是使用rpm安装,则任务默认放在 /var/lib/jenkins目录下的workspace目录中。
(5).定时构建之后可以在Jenkins的文件夹中看到Html文件
(6)如果想要有报警和发送邮件提醒
需要建立一个和【测试监控】任务关联的子任务,通过解析Html文件中的接口成功率来配置发送给开发人员,以达到预警的木的。