一.背景

       由于前段时间线上业务接口经常崩溃,而又无法第一时间发现,被领导定义为生产事故,随后开会三番两次提及要构建生产接口监控系统,最好能有预警功能。线上的业务是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

     

jenkins 脚本交互插件 jenkins构建脚本_jar

可以先在本地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创建监控任务

jenkins 脚本交互插件 jenkins构建脚本_Jenkins_02

 

jenkins 脚本交互插件 jenkins构建脚本_jar_03

 

jenkins 脚本交互插件 jenkins构建脚本_Jenkins_04

jenkins 脚本交互插件 jenkins构建脚本_jar_05

 

(4).构建之前将ant的脚本文件,build.xml放到【测试监控】任务的workspace目录中,如果你的Jenkins是使用rpm安装,则任务默认放在 /var/lib/jenkins目录下的workspace目录中。

(5).定时构建之后可以在Jenkins的文件夹中看到Html文件

jenkins 脚本交互插件 jenkins构建脚本_apache_06

jenkins 脚本交互插件 jenkins构建脚本_jar_07

 

(6)如果想要有报警和发送邮件提醒

     需要建立一个和【测试监控】任务关联的子任务,通过解析Html文件中的接口成功率来配置发送给开发人员,以达到预警的木的。