1. 接口监控
1.1. 功能介绍
统计应用对某个外部接口(特别是网络类的接口,如连接、登陆、下载等)的调用情况。当开发者用到某个外部接口,可调用该函数将一些指标进行上报,MTA将统计出每个接口的调用情况,并在接口可用性发生变化时进行告警通知; 对于调用量很大的接口,也可以采样上报,云监控统计将根据sampling参数在展现页面进行数量的还原。
1.2. Android接口监控代码集成
(1)代码说明
void StatService.reportAppMonitorStat (
Context ctx, StatAppMonitor monitor)
<span style="font-family:'sans serif', tahoma, verdana, helvetica;font-size:14px;line-height:1.5;"><strong>参数:</strong></span><span style="font-family:'sans serif', tahoma, verdana, helvetica;font-size:14px;line-height:1.5;"> </span>
ctx 页面的设备上下文
monitor 监控对象,需要根据接口情况设置接口名称、耗时、返回值类型、返回码、请求包大小、响应包大小和采样率等信息,详见doc/api目录下的文档
(2)调用位置:
被监控的接口
StatAppMonitor方法名列表
接口名 |
说明 |
setInterfaceName(String interfaceName) |
设置监控的接口名称 |
setReqSize(long reqSize) |
请求包大小,单位:byte |
setRespSize(long respSize) |
响应包大小,单位:byte |
setResultType(int resultType) |
SUCCESS_RESULT_TYPE; FAILURE_RESULT_TYPE; LOGIC_FAILURE_RESULT_TYPE |
setMillisecondsConsume(long millisecondsConsume) |
调用耗时,单位:毫秒(ms) |
setReturnCode(int returnCode) |
监控接口业务返回码 |
setSampling(int sampling) |
采样率: 默认为1,表示100%。如果是1/2,则填2,如果是1/4,则填4,若是1/n,则填n |
// 新建监控接口对象
StatAppMonitor monitor = new StatAppMonitor("ping:www.qq.com");
String ip = "www.qq.com";
Runtime run = Runtime.getRuntime();
java.lang.Process proc = null;
try {
String str = "ping -c 3 -i 0.2 -W 1 " + ip;
long starttime = System.currentTimeMillis();
// 被监控的接口
proc = run.exec(str);
proc.waitFor();
long difftime = System.currentTimeMillis() - starttime;
// 设置接口耗时
monitor.setMillisecondsConsume(difftime);
int retCode = proc.waitFor();
// 设置接口返回码
monitor.setReturnCode(retCode);
// 设置请求包大小,若有的话
monitor.setReqSize(1000);
// 设置响应包大小,若有的话
monitor.setRespSize(2000);
// 设置抽样率
// 默认为1,表示100%。
// 如果是50%,则填2(100/50),如果是25%,则填4(100/25),以此类推。
monitor.setSampling(2);
if (retCode == 0) {
logger.debug("ping连接成功");
// 标记为成功
monitor.setResultType(StatAppMonitor.SUCCESS_RESULT_TYPE);
} else {
logger.debug("ping测试失败");
// 标记为逻辑失败,可能由网络未连接等原因引起的
// 但对于业务来说不是致命的,是可容忍的
monitor.setResultType(StatAppMonitor.LOGIC_FAILURE_RESULT_TYPE);
}
} catch (Exception e) {
logger.e(e);
// 接口调用出现异常,致命的,标识为失败
monitor.setResultType(StatAppMonitor.FAILURE_RESULT_TYPE);
} finally {
proc.destroy();
}
// 上报接口监控
StatService.reportAppMonitorStat(ctx, monitor);
1.3. iOS接口监控使用指南
(1)接口
/**
接口统计的枚举值
*/
typedef enum {
/**
接口调用成功
*/
MTA_SUCCESS = 0,
/**
接口调用失败
*/
MTA_FAILURE = 1,
/**
接口调用出现逻辑错误
*/
MTA_LOGIC_FAILURE = 2
} MTAAppMonitorErrorType;
/**
接口统计的数据结构
*/
@interface MTAAppMonitorStat : NSObject
/**
监控业务接口名
*/
@property (nonatomic, retain) NSString *interface;
/**
上传请求包量,单位字节
*/
@property uint32_t requestPackageSize;
/**
接收应答包量,单位字节
*/
@property uint32_t responsePackageSize;
/**
消耗的时间,单位毫秒
*/
@property uint64_t consumedMilliseconds;
/**
业务返回的应答码
*/
@property int32_t returnCode;
/**
业务返回类型
*/
@property MTAAppMonitorErrorType resultType;
/**
上报采样率,默认0含义为无采样
*/
@property uint32_t sampling;
@end
/**
对网络接口的调用情况进行统计
参数的详细信息请看接口统计数据结构中的相关说明
@param stat 接口统计的数据,详情请看接口统计数据结构的相关说明
*/
+ (void)reportAppMonitorStat:(MTAAppMonitorStat *)stat;
/**
对网络接口的调用情况进行统计
并指定上报方式
参数的详细信息请看接口统计数据结构中的相关说明
@param stat 接口统计的数据,详情请看接口统计数据结构的相关说明
@param appkey 需要上报的appKey,若传入nil,则上报到启动函数中的appkey
@param isRealTime 是否实时上报,若传入YES,则忽略全局上报策略实时上报。否则按照全局策略上报。
*/
+ (void)reportAppMonitorStat:(MTAAppMonitorStat *)stat appkey:(NSString *)appkey isRealTime:(BOOL)isRealTime;
(2)示例
-(IBAction) clickNormaltButton:(id)sender{
MTAAppMonitorStat* stat = [[MTAAppMonitorStat alloc] init];
[stat setInterface:@"interface1"];
// ...
[stat setRetsultType: SUCCESS];
[MTA reportAppMonitorStat:stat];
}