本文以Kubernetes监控数据为例,介绍如何配置机器学习服务巡检时序数据并可视化展示异常巡检结果。

前提条件

已采集时序数据,详情请参见在日志服务中开启时序指标的智能巡检

背景信息

本文以Kubernetes监控数据为例,使用数据采集工具(例如:Python SDK)按照一个固定的频率(60秒)将200台服务器的多维度指标(Region、Machine、Index_name和Value)分别写入到日志服务Logstore中。然后您可以开启机器学习服务对时序数据进行智能巡检,并将巡检结果可视化展示。
本案例中,用于存放时序数据的Logstore名称为etl-k8s-monitor,用于存储巡检结果的目标Logstore名称为ml-detector-res。源Logstore中采集到的时序数据日志样例如下图所示。时序数据日志
重要字段说明如下表所示。
字段 说明
region 表示一个集群。
machine 表示一台机器。
index_name 表示一个指标,例如负载,8个常用指标请参见表 1
value 具体指标的数值。

步骤1:配置时序数据的索引

采集到时序数据后,您需要为相关字段配置字段索引。

  1. 登录日志服务控制台
  2. Project列表中,单击源Project。
  3. 日志管理 > 日志库页签中,单击源Logstore。
  4. 在查询分析页面,配置字段索引。
    index_namemachineregionvalue字段配置索引,如下图所示,详细操作步骤请参见开启并配置索引配置索引

步骤2:配置机器学习服务

您可以在保存数据加工时,配置机器学习服务。

  1. 在查询分析页面,打开数据加工开关,进入数据加工模式。
  2. 单击加工结果
  3. 加工结果页签中,单击保存数据加工
  4. 创建数据加工规则页面,配置相关参数,并单击确定
    重要参数说明如下所示,其他参数配置请参见保存数据加工规则参数说明
    • AccessKey IDAccessKey Secret参数中配置具有当前Logstore读权限且能创建消费组权限的AK信息,权限授权请参见RAM自定义授权场景
    • 模型参数配置参数中,配置机器学习服务。
      此处以配置流式图算法异常检测为例,具体配置如下图所示。模型参数配置
      机器学习服务的相关参数说明如下表所示。
      参数 说明
      时间列 用于标记时间的名称,所对应字段的值为Unix时间戳,只支持索引类型为long类型的字段。本案例选择__time__字段。
      时间粒度 数据写入的粒度,即同一个实例中最小的数据间隔,单位:秒。本案例为60秒。
      实例列 选择实例列,该字段标记了一条时序曲线的名称,只支持索引类型为text类型的字段。本案例选择regionmachineindex_name,表示某地域中某台机器的某个指标。
      选择数值列 某实例在某时刻的数值。本案例选择value
      上界 自定义阈值,如果您所选择的数值列的值大于该值,则直接判断为异常。
      下界 自定义阈值,如果您所选择的数值列的值小于该值,则直接判断为异常。
      算法类型 选择流式统计算法异常检测。其他算法配置详情请参见流式树算法异常检测流式统计算法异常检测
      仅保留异常结果 开启仅保留异常结果开关后,只保留异常结果到目标Logstore中。
      算法检测间隔 指定发起算法检测异常的时间间隔,该值需小于等于时间粒度,单位:秒。本案例为60秒。
      数值划分粒度 根据值域划分数据,单位:段,取值范围为[2,20],默认值为5。

      分段越多,算法对异常越敏感,检测出的异常点越多。

      周期时长 指定时序数据的周期长度,单位:小时,取值范围为[60, +∞),默认为时间粒度下,2880个时间点所对应的小时数。本案例为48小时。

完成配置后,日志服务启动机器学习服务,对时序数据进行巡检,将结果写入到目标Logstore。

步骤3:配置巡检结果数据的索引

  1. Project列表中,单击目标Project。
  2. 日志管理 > 日志库页签中,单击目标Logstore。
  3. 查看巡检结果日志。
    加工结果
    类型 字段 说明
    entiy 无固定字段 表示一条时序曲线的实例列信息。
    meta project_name 时序数据来源的Project。
    logstore_name 时序数据来源的LogStore。
    results dim_name 您所指定的数值列。
    is_anomaly 流式图算法判断时序数据是否异常,Bool类型。

    流式图算法默认以0.5为界线,如果score值大于0.5,则为异常,显示为true。

    score 流式图算法输出的异常程度的量化分数,范围为[0,1],分数越大越异常。-1表示数据缺失。-2表示疑似异常(可能是因为流式图算法还未学习充分)。
  4. 配置索引。
    __tag__:job_name__entityindex_namemachineregionresultin_anomalyscore字段配置索引,如下图所示,操作步骤详情请参见开启并配置索引字段索引

步骤4:联合查询

您可以通过联合查询将异常结果整合到源Logstore中,帮助您快速了解算法模型的巡检结果。

  1. 在目标Logstore的查询分析页面,执行如下查询分析语句,查询某地域中某台机器的某个指标异常巡检结果。

    其中0.75为异常分数阈值,代表算法判断出的异常情况,支持自定义。

    * | select time, score, index_name, machine, region from
    (select time, cast(score as double) as score, index_name, machine, region from(
        (select __time__ as time, 
               json_extract_scalar(result, '$.score') as score, 
               json_extract_scalar(entity, '$.index_name') as index_name, 
               json_extract_scalar(entity, '$.machine') as machine, 
               json_extract_scalar(entity, '$.region') as region, 
               job_name from ml-detector-res) 
        HAVING score > ) where region = 'aysls-pub-cn-beijing-k8s' and 
                                   machine = '192.168.***.***:***' and 
                                   index_name = 'mem_usage'
  2. 切换为源Logstore的查询分析页面。
  3. 联合查询源Logstore和目标Logstore。
    1. 执行如下查询分析语句,查询对应的时序数据。
      说明 为了避免有重复数据,日志服务对时序数据按一定时间做一次聚合,此处时间间隔为60s,支持自定义。
      SELECT __time__ - __time__ % 60 AS time, AVG(value) AS value
      FROM log
      GROUP BY time
    2. 执行如下查询分析语句,联合查询源Logstore和目标Logstore。
      region: "aysls-pub-cn-beijing-k8s" and 
      machine: "192.168.***.***:***" and index_name: "mem_usage" | 
      select time, value, 
                   case when score is null then 0 else score end as score, 
                   case when score is null then 0 else 1 end as label from 
              (select A.time, A.value, B.score, 1 as label from 
                   ((select __time__ - __time__ % 60 as time, avg(value) as value from log 
                  group by time ) as A left join 
                 (select time, cast(score as double) as score, 
                           index_name, machine, region from 
                         (select __time__ as time, 
                                 json_extract_scalar(result, '$.score') as score, 
                                 json_extract_scalar(entity, '$.index_name') as index_name, 
                                 json_extract_scalar(entity, '$.machine') as machine, 
                                 json_extract_scalar(entity, '$.region') as region, 
                                 job_name from ml-detector-res) 
                         HAVING score > 0.75) where region = 'aysls-pub-cn-beijing-k8s' and 
                                     machine = '192.168.***.***:***' and 
                                     index_name = 'mem_usage') as B 
             on A.time = B.time) 
              ) order by time limit 100000
  4. 统计图表中,单击折线图

    通过折线图展示异常点时序曲线,其中X轴配置为time左Y轴配置为value散点列配置为value散点数值列配置为label,其他参数配置请参见折线图

    折线图
  5. 单击添加到仪表盘
    根据页面提示,完成添加。

步骤5:可视化展示

您还可以在分析数据时配置交互行为和过滤器,丰富仪表盘展示。

  1. 设置变量。
    1. 单击数据源
    2. 划选关键字并单击生成变量
    3. 配置变量信息。

      此处分别设置regionmachinetarget_logtoreindex_namescorejob_name变量,如下图所示,参数详情请参见设置占位符变量

      设置变量信息
  2. 配置交互行为。
    此处以配置region变量的交互行为为例。
    1. 执行如下查询语句,查询分析Kubernetes集群。
      * | select DISTINCT region from log
    2. 统计图表页签中,单击交互行为
    3. 配置交互行为。
      相关参数配置如下图所示,详情请参见下钻分析下钻分析
  3. 单击添加到仪表盘
    根据页面提示,完成添加。
  4. 添加过滤器。
    此处以设置异常分数过滤器为例,您可以自定义设置异常分数,实现不同敏感程度的智能巡检。
    1. 在目标仪表盘页面,单击编辑
    2. 在操作栏中,单击仪表盘过滤器-过滤器图标
    3. 添加过滤器页面,配置相关参数,并单击确定
      相关参数配置如下图所示,详细操作步骤请参见添加过滤器过滤器
    4. 单击保存
  5. 查看仪表盘。
    获取针对Kubernetes集群的智能巡检分析仪表盘。仪表盘

步骤6:告警

您可以根据业务需求设置告警,获取智能化的告警通知,详情请参见设置告警