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];
}

results matching ""

    No results matching ""