Skip to content

Latest commit

 

History

History
534 lines (403 loc) · 14 KB

api_userguide.md

File metadata and controls

534 lines (403 loc) · 14 KB

API接口文档

时间序列异常检测接口

用户可根据场景选择使用API接口对时间序列进行异常检测:

1、量值检测:适用于大多数KPI指标数据的检测,使用无监督和有监督联合检测,会加载检测模型

2、率值检测:适用于正态分布类型数据的检测,使用无监督算法进行检测,如成功率等生死指标数据的检测

  • HTTP接口调用请使用搭建的后端服务地址;Python接口可直接调用
  • 当前检测时间窗口选取为3小时,每分钟1个数据点,即窗口值为180
  • 同比数据日期和时间段的选择可根据实际情况调整,文档中两个同比数据分别取昨日和一周前的同比

针对当前一个值的检测,需要依赖过去三段数据,数据选取规则参考示例图: data_info

一、HTTP接口

1、量值检测

  • API: POST /{ip}:{port}/PredictValue
  • 功能说明:根据参考数据检测最近一个数据点是否异常
  • 请求参数request:
{
    "viewId":"2012",
    "viewName":"登陆功能",
    "attrId":"19201",
    "attrName":"ptlogin登陆请求总量",
    "taskId":"1530608070706",
    "window":180,
    "time":"2018-10-17 17:28:00",
    "dataC":"9,10,152,...,255,...,16",
    "dataB":"9,10,152,...,255,...,18",
    "dataA":"9,10,152,...,458"
}
  • request字段说明:
名称 类型 必填 默认值 说明
viewId string 指标集ID
viewName string 指标集名称
attrId string 指标ID
attrName string 指标名称
taskId string 使用的检测模型,如不传,则采用系统默认模型
window int 窗口值,目前支持180
time string 待检测点的时间标识,即dataA的最后一个点,格式:"yyyy-MM-dd HH:mm:ss"
dataC string 待检测的1个点对应一周前同时刻的点 + 前后各180个数据,361个数据点按时间顺序拼接,英文逗号分隔
dataB string 待检测的1个点对应昨日同时刻的点 + 前后各180个数据,361个数据点按时间顺序拼接,英文逗号分隔
dataA string 待检测的1个点+前180个数据,共181个数据点,181个数据点按时间顺序拼接,英文逗号分隔
  • 详情参数response:
{
    "code":0,
    "msg":"操作成功",
    "data":
    {
        "ret":0,
        "p":"0.05",
    }
}
  • response 字段说明:
名称 类型 说明
code int 返回码。0:成功;非0:失败
msg string 返回消息
ret int 检测结果是否异常。0:异常;1:正常
p string 概率值,值越小,判定为异常的置信度越高,目前p<0.15,判决为异常

2、率值检测

  • API: POST /{ip}:{port}/PredictRate
  • 功能说明:根据参考数据检测最近一个数据点是否异常
  • 请求参数request:
{
    "viewId":"2012",
    "viewName":"登陆功能",
    "attrId":"19201",
    "attrName":"ptlogin登陆成功率",
    "window":180,
    "time":"2018-10-17 17:28:00",
    "dataC":"100,99.8,100,...,100,...,100",
    "dataB":"99.5,100,100,...,99.6,...,100",
    "dataA":"100,98.5,100,...,85.9"
}
  • request字段说明:
名称 类型 必填 默认值 说明
viewId string 指标集ID
viewName string 指标集名称
attrId string 指标ID
attrName string 指标名称
window int 窗口值,目前支持180
time string 待检测点的时间标识,即dataA的最后一个点,格式:"yyyy-MM-dd HH:mm:ss"
dataC string 待检测的1个点对应一周前同时刻的点 + 前后各180个数据,361个数据点按时间顺序拼接,英文逗号分隔
dataB string 待检测的1个点对应昨日同时刻的点 + 前后各180个数据,361个数据点按时间顺序拼接,英文逗号分隔
dataA string 待检测的1个点+前180个数据,共181个数据点,181个数据点按时间顺序拼接,英文逗号分隔
  • 详情参数response:
{
    "code":0,
    "msg":"操作成功",
    "data":
    {
        "ret":0,
        "p":"0",
    }
}
  • response 字段说明:
名称 类型 说明
code int 返回码。0:成功;非0:失败
msg string 返回消息
ret int 检测结果是否异常。0:异常;1:正常
p string 概率值,值越小,判定为异常的置信度越高

二、Python API

Metis工程目录下time_series_detector目录为时间序列异常检测学件,可以在python代码中直接调用

1、量值检测

  • 功能说明:根据参考数据检测最近一个数据点是否异常

  • 调用方法:

# Python
from time_series_detector import detect

detect_obj = detect.Detect()
detect_obj.value_predict(data)
  • 传入参数:python字典
{
    "window":180,
    "dataC":"9,10,152,...,255,...,16",
    "dataB":"9,10,152,...,255,...,18",
    "dataA":"9,10,152,...,458"
}
  • 传入参数说明:
名称 类型 必填 默认值 说明
taskId string 使用的检测模型,如不传,则采用系统默认模型
window int 窗口值,目前支持180
dataC string 待检测的1个点对应一周前同时刻的点 + 前后各180个数据,361个数据点按时间顺序拼接,英文逗号分隔
dataB string 待检测的1个点对应昨日同时刻的点 + 前后各180个数据,361个数据点按时间顺序拼接,英文逗号分隔
dataA string 待检测的1个点+前180个数据,共181个数据点,181个数据点按时间顺序拼接,英文逗号分隔
  • 返回参数:
    code, {
        "ret":0,
        "p":"0.05",
    }

  • 返回参数说明:
名称 类型 说明
code int 返回码。0:成功;非0:失败
ret int 检测结果是否异常。0:异常;1:正常
p string 概率值,值越小,判定为异常的置信度越高,目前p<0.15,判决为异常
  • 调用案例:

data_info

2、率值检测

  • 功能说明:根据参考数据检测最近一个数据点是否异常

  • 调用方法:

# Python
from time_series_detector import detect

detect_obj = detect.Detect()
detect_obj.rate_predict(data)
  • 传入参数:python字典
{
    "dataC":"9,10,152,...,255,...,16",
    "dataB":"9,10,152,...,255,...,18",
    "dataA":"9,10,152,...,458"
}
  • 传入参数说明:
名称 类型 必填 默认值 说明
dataC string 待检测的1个点对应一周前同时刻的点 + 前后各180个数据,361个数据点按时间顺序拼接,英文逗号分隔
dataB string 待检测的1个点对应昨日同时刻的点 + 前后各180个数据,361个数据点按时间顺序拼接,英文逗号分隔
dataA string 待检测的1个点+前180个数据,共181个数据点,181个数据点按时间顺序拼接,英文逗号分隔
  • 返回参数:
    code, {
        "ret":0,
        "p":"0",
    }

  • 返回参数说明:
名称 类型 说明
code int 返回码。0:成功;非0:失败
ret int 检测结果是否异常。0:异常;1:正常
p string 概率值,值越小,判定为异常的置信度越高,目前p<0.15,判决为异常
  • 调用案例:

data_info

三、LIB库

Metis工程目录下time_series_detector/lib为学件动态库目录,库文件可以在代码中加载调用

libdetect.so目前支持在CentOs7.2+系统环境下使用

Python代码中调用:

1、量值检测
  • 功能说明:根据参考数据检测最近一个数据点是否异常

  • 调用方法:

加载so库:

# Python
so = cdll.LoadLibrary
metis_lib = so("./libdetect.so")
handle = metis_lib.load_model("./xgb_default_model")

构造传入数据:

# Python
from ctypes import *

class ValueData(Structure):
    _fields_ = [('data_a', POINTER(c_int)), ('data_b', POINTER(c_int)), ('data_c', POINTER(c_int)),
                ('len_a', c_int), ('len_b', c_int), ('len_c', c_int)]

# test data
data_c = [1] * 361
data_b = [1] * 361
data_a = [1] * 180
data_a.append(10)

paarray = (c_int * len(data_a))(*data_a)
pbarray = (c_int * len(data_b))(*data_b)
pcarray = (c_int * len(data_c))(*data_c)
data_value = ValueData(paarray, pbarray, pcarray, len(data_a), len(data_b), len(data_c))  

调用计算函数:

#python
result = c_int()
prob = c_float()
ret_code = metis_lib.value_predict(handle, byref(data_value), byref(result), byref(prob))
if ret_code != 0:
    print "value_predict error code = %d" % ret_code
print result, prob
  • 传入参数:C结构体
typedef struct {
    int* data_a;
    int* data_b;
    int* data_c;
    int len_a;
    int len_b;
    int len_c;
} ValueData;
  • 传入参数说明:
名称 类型 必填 默认值 说明
handle int 模型句柄,由load_model返回
data_value ValueData 待检测数据
  • 返回参数:
ret_code
result
prob
  • 返回参数说明:
名称 类型 说明
ret_code int 返回码。0:成功;非0:失败
result c_int 检测结果是否异常。0:异常;1:正常
prob c_float 概率值,值越小,判定为异常的置信度越高,目前prob<0.15,判决为异常
2、率值检测
  • 功能说明:根据参考数据检测最近一个数据点是否异常

  • 调用方法:

加载so库:

# Python
so = cdll.LoadLibrary
metis_lib = so("./libdetect.so")

构造传入数据:

# Python
from ctypes import *

class RateData(Structure):
_fields_ = [('data_a', POINTER(c_double)), ('data_b', POINTER(c_double)), ('data_c', POINTER(c_double)),
            ('len_a', c_int), ('len_b', c_int), ('len_c', c_int)]

# test data
data_c = [1.0] * 361
data_b = [1.0] * 361
data_a = [1.0] * 180
data_a.append(0.9)

paarray = (c_double * len(data_a))(*data_a)
pbarray = (c_double * len(data_b))(*data_b)
pcarray = (c_double * len(data_c))(*data_c)
data_value = RateData(paarray, pbarray, pcarray, len(data_a), len(data_b), len(data_c))

调用计算函数:

#python
result = c_int()
prob = c_float()
ret_code = metis_lib.rate_predict(byref(data_value), byref(result), byref(prob))
if ret_code != 0:
    print "value_predict error code = %d" % ret_code
print result, prob
  • 传入参数:C结构体
typedef struct {
    double* data_a;
    double* data_b;
    double* data_c;
    int len_a;
    int len_b;
    int len_c;
} RateData;
  • 传入参数说明:
名称 类型 必填 默认值 说明
data_value RateData 待检测数据
  • 返回参数:
 ret_code
 result
 prob
  • 返回参数说明:
名称 类型 说明
ret_code int 返回码。0:成功;非0:失败
result c_int 检测结果是否异常。0:异常;1:正常
prob c_float 概率值,值越小,判定为异常的置信度越高

C代码中调用:

在C中调用检测函数,需要include头文件detect.h,在编译时链接libdetect.so文件

1、量值检测
  • 功能说明:根据参考数据检测最近一个数据点是否异常

  • 调用方法:

调用load_model加载模型,然后调用value_predict进行预测:

#include "detect.h"

if (NULL == (handle = load_model("./xgb_default_model")))
{
    printf("load model error\n");
    return 0;
}
int ret = value_predict(handle, &value_data, &sample_result, &prob); 
printf ("ret=%d result = %d prob = %f\n", ret, sample_result, prob); 
  • 传入参数:C结构体
typedef struct {
    int* data_a;
    int* data_b;
    int* data_c;
    int len_a;
    int len_b;
    int len_c;
} ValueData;
  • 传入参数说明:
名称 类型 必填 默认值 说明
handle int 模型句柄,由load_model返回
value_data ValueData 待检测数据
  • 返回参数:
ret
sample_result
prob
  • 返回参数说明:
名称 类型 说明
ret int 返回码。0:成功;非0:失败
sample_result c_int 检测结果是否异常。0:异常;1:正常
prob c_float 概率值,值越小,判定为异常的置信度越高,目前prob<0.15,判决为异常
2、率值检测
  • 功能说明:根据参考数据检测最近一个数据点是否异常

  • 调用方法:

#include "detect.h"
float prob;
int sample_result;
int ret = rate_predict(&rate_data, &sample_result, &prob);
printf ("ret=%d result =%d prob = %f \n", ret, sample_result, prob);
  • 传入参数:C结构体
typedef struct {
    double* data_a;
    double* data_b;
    double* data_c;
    int len_a;
    int len_b;
    int len_c;
} RateData;
  • 传入参数说明:
名称 类型 必填 默认值 说明
rate_data RateData 待检测数据
  • 返回参数:
ret
sample_result
prob
  • 返回参数说明:
名称 类型 说明
ret int 返回码。0:成功;非0:失败
result c_int 检测结果是否异常。0:异常;1:正常
prob c_float 概率值,值越小,判定为异常的置信度越高