日志服务提供了强大的告警和分析能力,可以帮助用户快速分析和定位到发生异常的具体的子维度。在时序指标发生异常时,根因分析函数可以快速分析出是哪些相关维度属性发生异常而导致监控指标发生异常。
LOG机器学习最佳实战:根因分析(一)
rca_kpi_search
函数格式
select rca_kpi_search(varchar_array, name_array, real, forecast, level)
参数说明如下:
参数 | 说明 | 取值 |
varchar_array | 属性维度字段。 | 数组形式,例如:array[col1, col2, col3]。 |
name_array | 属性名字字段。 | 数组形式,例如:array['col1', 'col2', 'col3']。 |
real | varchar_array对应的实际值。 | double 类型,取值范围:全体实数。 |
forecast | varchar_array对应的预测值。 | double 类型,取值范围:全体实数。 |
level | 输出的根因集合对应的维度属性的数量,其中level=0表示输出找到的全部根因集合。 | long类型,取值范围:0<=level<=分析维度数(对应varchar_array的长度)。 |
示例:
查询分析:
先利用子查询去组织每个细粒度属性对应的实际值和预测值,然后直接调用rca_kpi_search函数去分析异常时刻的根因。
* not Status:200 | select rca_kpi_search( array[ ProjectName, LogStore, UserAgent, Method ], array[ 'ProjectName', 'LogStore', 'UserAgent', 'Method' ], real, forecast, 1) from ( select ProjectName, LogStore, UserAgent, Method, sum(case when time < 1552436040 then real else 0 end) * 1.0 / sum(case when time < 1552436040 then 1 else 0 end) as forecast, sum(case when time >=1552436040 then real else 0 end) *1.0 / sum(case when time >= 1552436040 then 1 else 0 end) as real from ( select '("__time__" - ("__time__" % 60))' as time, ProjectName, LogStore, UserAgent, Method, COUNT(*) as real from log GROUP by time, ProjectName, LogStore, UserAgent, Method ) GROUP BY ProjectName, LogStore, UserAgent, Method limit 100000000)
输出结果:
返回结果结构说明:
显示项如下:
显示项 | 说明 |
rcSets | 根因集合,value对应一个数组。 |
rcItems | 具体对应一个根因集合。 |
kpi | 根因集合中的一项,数据按照数组形式存储,数组中的每一项是一个JSON类型的数据,attr表示维度名称,val表示当前维度下对应的属性名称。 |
nleaf | 根因集合中某一项(KPI)在原始数据中覆盖的叶子节点数。 说明 叶子节点:表示最细粒度属性组合的日志。 |
change | 根因集合中某一项(KPI)对应的叶子节点集合的异常变化量占同一时刻总体异常变化量的比例。 |
score | 当前kpi对应的异常程度(0 <= score <= 1)。 |
输出结果是一个JSON,具体格式如下:
{
"rcSets": [
{
"rcItems": [
{
"kpi": [
{
"attr": "country",
"val": "*"
},
{
"attr": "province",
"val": "*"
},
{
"attr": "provider",
"val": "*"
},
{
"attr": "domain",
"val": "example.com"
},
{
"attr": "method",
"val": "*"
}
],
"nleaf": 119,
"change": 0.3180687806279939,
"score": 0.14436007709620113
}
]
}
]
}