【转】API接口监控那些事儿



1. 背景

在联盟广告业务中,广告投放接口的主要功能是给各大中小网站提供广告物料,该接口日pv量在百亿级别,部署在多个机房内。在测试该接口的过程中,可能会出现以下几种情况:

    1.接口的不稳定导致APP/WEB端上的超时、抛错,而资源级监控不能达到业务健康状况监控的目的。

    2.服务器众多,手工部署war包时存在漏上应用或者没有部署成功。

    3.某一服务宕机之后不能及时发现。

    4.获取不同机房同一接口的响应时间。

    5.依赖的其他接口异常导致己方系统不可用。

为了保证线上服务的稳定运行,除了线上关键服务的资源类监控外,各服务之间的对应接口也非常重要。对于接口异常这类问题的排查往往比服务异常更耗时费力,那么如何对线上关键接口进行监控呢?

【转】API接口监控那些事儿_第1张图片

2.解决思路

编写脚本进行监控

通过python、shell脚本定义监控规则,对线上日志进行实时过滤,进而获取监控频率、错误告警提示、错误结果统计等。这种方式实现成本较低,但是应用对象仅仅局限于熟悉脚本的同学,可继承性及可维护性太差。

【转】API接口监控那些事儿_第2张图片

运用开源工具进行监控

借助网上的开源工具,如zabbix;在类似的开源监控平台上配置需要监控的API接口,具体可以参考网上blog(http://www.ttlsa.com/zabbix/zabbix-monitor-web-api/)。这种方式开源免费,入门简单,易于操作,但深层次需求需要非常熟悉zabbix并进行大量的二次开发,难度较大。

运用开源组件进行二次开发

利用Apache项目组下的Httpclient组件和Quartz组件进行二次开发,通过Httpclient对指定API发送请求并获取响应,通过Quartz组件按照设定频率发送请求。最终对响应结果进行过滤、处理判断,统计请求日志,当接口不正常时进行邮件报警。编写脚本的方式应用对象比较局限,没有直观的页面对接口进行管理。通过zabbix配置监控API接口时,深层次的需求需要进行大量的开发,成本也比较大。为了达到没有任何代码门槛进行接口监控的要求,通过运用开源组件进行二次开发,完成了Ialert监控系统。

3. Ialert系统API监控原理

Ialert系统是一套基于SSM开发的BS架构系统,通过集成Httpclient和Quartz组件实现实时监控,当接口出现异常时,通过java mail组件进行邮件报警。 接口的正确性主要通过响应状态码、响应内容和响应时间三个方面来进行判断,具体分为设定断言和没有断言两种情况:当设定了断言以后,按照断言的匹配来判断预期结果;当没有设定断言时,视为返回的都是正确的结果。本系统入门简单,上手比较容易,通过WEB页面录入API接口以后,仅仅需要点击按钮就能实现监控的操作,没有任何代码门槛。具体操作页面如下:

【转】API接口监控那些事儿_第3张图片

待接口创建完毕以后,就可以点击启动监控按钮对接口进行实时监控了。在监控过程中可以查看请求日志和报警日志,并且可以通过监控报表查看详细的统计信息,页面如下:

【转】API接口监控那些事儿_第4张图片

至此我们已经完成了一个API接口的实时监控,后续可以通过邮件报警的方式来实时了解接口的情况。

【转】API接口监控那些事儿_第5张图片

4.目前解决的问题

 Ialert系统目前试运行于联盟业务组中,能够基本满足当前业务的需求。那么该系统能够解决哪些问题呢?

    1.提供7*24小时的业务级监控,提供邮件等形式报警;

    2.了解服务器的性能及监控情况,以免漏上应用;

    3.跨机房集群中的某个服务宕机,通过用户反馈无法快速察觉。

5.未来能够解决的问题

众所周知,线上监控这块总是存在一定的局限性。在有些业务场景中,监控系统必须与相应的业务相结合,才能避免垃圾数据的产生。目前我们仅仅有了实时监控的最基本功能,对于接口而言,还有很多复杂的监控场景,比如: 

    1.线上接口需要动态token的情况,由于接口每次发送的请求中token值都不一样,所以我们在监控时要动态改变token值;

    2.移动端和服务端进行数据通讯时,需要使用加密传输,对于这类的接口监控,需要对参数进行加密;

    3.对http协议中的请求头和请求体实现的不完善,需要进一步的完善;

    4.对于断言需要进一步的细化 。     

1. 背景

在联盟广告业务中,广告投放接口的主要功能是给各大中小网站提供广告物料,该接口日pv量在百亿级别,部署在多个机房内。在测试该接口的过程中,可能会出现以下几种情况:

    1.接口的不稳定导致APP/WEB端上的超时、抛错,而资源级监控不能达到业务健康状况监控的目的。

    2.服务器众多,手工部署war包时存在漏上应用或者没有部署成功。

    3.某一服务宕机之后不能及时发现。

    4.获取不同机房同一接口的响应时间。

    5.依赖的其他接口异常导致己方系统不可用。

为了保证线上服务的稳定运行,除了线上关键服务的资源类监控外,各服务之间的对应接口也非常重要。对于接口异常这类问题的排查往往比服务异常更耗时费力,那么如何对线上关键接口进行监控呢?

【转】API接口监控那些事儿_第6张图片

2.解决思路

编写脚本进行监控

通过python、shell脚本定义监控规则,对线上日志进行实时过滤,进而获取监控频率、错误告警提示、错误结果统计等。这种方式实现成本较低,但是应用对象仅仅局限于熟悉脚本的同学,可继承性及可维护性太差。

【转】API接口监控那些事儿_第7张图片

运用开源工具进行监控

借助网上的开源工具,如zabbix;在类似的开源监控平台上配置需要监控的API接口,具体可以参考网上blog(http://www.ttlsa.com/zabbix/zabbix-monitor-web-api/)。这种方式开源免费,入门简单,易于操作,但深层次需求需要非常熟悉zabbix并进行大量的二次开发,难度较大。

运用开源组件进行二次开发

利用Apache项目组下的Httpclient组件和Quartz组件进行二次开发,通过Httpclient对指定API发送请求并获取响应,通过Quartz组件按照设定频率发送请求。最终对响应结果进行过滤、处理判断,统计请求日志,当接口不正常时进行邮件报警。编写脚本的方式应用对象比较局限,没有直观的页面对接口进行管理。通过zabbix配置监控API接口时,深层次的需求需要进行大量的开发,成本也比较大。为了达到没有任何代码门槛进行接口监控的要求,通过运用开源组件进行二次开发,完成了Ialert监控系统。

3. Ialert系统API监控原理

Ialert系统是一套基于SSM开发的BS架构系统,通过集成Httpclient和Quartz组件实现实时监控,当接口出现异常时,通过java mail组件进行邮件报警。 接口的正确性主要通过响应状态码、响应内容和响应时间三个方面来进行判断,具体分为设定断言和没有断言两种情况:当设定了断言以后,按照断言的匹配来判断预期结果;当没有设定断言时,视为返回的都是正确的结果。本系统入门简单,上手比较容易,通过WEB页面录入API接口以后,仅仅需要点击按钮就能实现监控的操作,没有任何代码门槛。具体操作页面如下:

【转】API接口监控那些事儿_第8张图片

待接口创建完毕以后,就可以点击启动监控按钮对接口进行实时监控了。在监控过程中可以查看请求日志和报警日志,并且可以通过监控报表查看详细的统计信息,页面如下:

【转】API接口监控那些事儿_第9张图片

至此我们已经完成了一个API接口的实时监控,后续可以通过邮件报警的方式来实时了解接口的情况。

【转】API接口监控那些事儿_第10张图片

4.目前解决的问题

 Ialert系统目前试运行于联盟业务组中,能够基本满足当前业务的需求。那么该系统能够解决哪些问题呢?

    1.提供7*24小时的业务级监控,提供邮件等形式报警;

    2.了解服务器的性能及监控情况,以免漏上应用;

    3.跨机房集群中的某个服务宕机,通过用户反馈无法快速察觉。

5.未来能够解决的问题

众所周知,线上监控这块总是存在一定的局限性。在有些业务场景中,监控系统必须与相应的业务相结合,才能避免垃圾数据的产生。目前我们仅仅有了实时监控的最基本功能,对于接口而言,还有很多复杂的监控场景,比如: 

    1.线上接口需要动态token的情况,由于接口每次发送的请求中token值都不一样,所以我们在监控时要动态改变token值;

    2.移动端和服务端进行数据通讯时,需要使用加密传输,对于这类的接口监控,需要对参数进行加密;

    3.对http协议中的请求头和请求体实现的不完善,需要进一步的完善;

    4.对于断言需要进一步的细化 。     

你可能感兴趣的:(【转】API接口监控那些事儿)