文档首页/ 应用平台 AppStage/ 最佳实践/ 运维中心最佳实践/ 使用AI异常检测技术实现业务故障分钟级定位及恢复
更新时间:2025-07-24 GMT+08:00
分享

使用AI异常检测技术实现业务故障分钟级定位及恢复

随着企业规模的增长,业务稳定性面临更多挑战,如何确保企业业务的稳定运行成为企业需要深思的问题。AppStage运维中心提供的AI异常检测技术,能够实现业务故障分钟级定位。通过运用AI异常检测的动静态算法监控业务指标,结合告警通知和业务报表功能,可以及时发现并处理故障,迅速恢复业务的稳定运行。

前提条件

步骤一:使用异常检测功能配置告警

使用快速配置功能完成不同级别告警的配置,下面以紧急告警为例,说明如何配置告警。完成紧急告警配置后,可以参考该操作完成严重告警、一般告警、提示告警的配置,需要修改任务名称、告警名、告警级别、固定阈值的上限和下限,其他配置不变。

  • 严重告警:任务名称“request_sucratetest_major_alarm”、告警名“request_sucratetest_严重告警”、告警级别“major”、固定阈值-上限“1”、固定阈值-下限“0.93”。
  • 一般告警:任务名称“request_sucratetest_minor_alarm”、告警名“request_sucratetest_一般告警”、告警级别“minor”、固定阈值-上限“1”、固定阈值-下限“0.95”。
  • 提示告警:任务名称“request_sucratetest_notice_alarm”、告警名“request_sucratetest_提示告警”、告警级别“notice”、固定阈值-上限“1”、固定阈值-下限“0.97”。
  1. 登录AppStage运维中心
  2. 在顶部导航栏选择服务。
  3. 单击,选择“运维 > 监控服务(ServiceInsight)”。
  4. 在监控服务左侧导航栏选择AI辅助诊断 > 异常检测,进入“异常检测”页面。
  5. 单击“快速配置”,进入任务基础信息快速配置页面。
  6. 配置任务参数,如图1所示,参数说明如表1所示。

    图1 基础信息配置
    表1 配置任务参数说明

    参数

    示例

    说明

    指标

    演示指标测试 / 请求成功率测试

    选择指标仓库的指标。

    任务名称

    request_sucratetest_critical_alarm

    根据所选指标自动生成,可以自定义任务名称,只能包含字母、数字、下划线。

    告警名

    request_sucratetest_紧急告警

    根据所选指标自动生成,可以自定义告警名。

    异常检测生成的告警会展示在告警列表中,并展示告警名字段“AlertName”。

    数据源类型

    -

    默认显示所选指标所属的数据源类型,不可修改。

    告警级别

    critical

    设置告警级别,与告警模块级别相对应。

    描述

    -

    输入任务描述。

    维度列表

    request_url

    来自于指标的逻辑实体上的维度,选择异常检测需要对哪些维度做检测。

    ALL维度列表

    -

    维度列表中,某个维度需要关注整体的趋势时,可以配置该维度,数据汇聚结果这个维度的值为“ALL”,其指标值为整体指标的总量或平均值。

    例如,做接口请求量告警时,一共有三个接口,每个接口的请求量分别是100、200、300,配置了ALL维度后,会增加一个接口名为ALL的数据,其请求量为三个接口的请求量总和,也就是600。这里的请求量换成成功率、时延等指标时,ALL的取值即为所有接口的平均值。

    维度过滤设置

    -

    只关注维度部分取值时,可以设置该参数对维度取值进行过滤。

    指标类型

    success_rate

    指标的类型,针对指标的定义进行选择。

    算法类型

    固定阈值

    选择异常检测算法,支持固定阈值和动态阈值。

    • 固定阈值:简单设置上限或者下限值。一旦数据超过上限或是低于下限则发生异常。
    • 动态阈值:通过训练历史数据,实现对数据特征的学习,构建数据的模型。并利用模型来预测数据的趋势走向。当实际值和预测值相差过大,认为异常。

    上限

    1

    当算法类型选择固定阈值时,需要设置上限。

    下限

    0.9

    当算法类型选择固定阈值时,需要设置下限。

    预估维度数

    1

    当算法类型选择固定阈值时,可以预估维度数量。

  7. 配置完成后,单击“保存”,弹出任务状态窗口,如图2所示,按照异常检测任务模块生成一个完整的异常检测任务,自动创建训练数据表,并且参数均为默认参数。

    图2 任务状态

  8. 任务执行完成后,关闭任务状态窗口,弹出基础配置页面,关闭该页面。
  9. 在任务列表,单击已创建的任务所在行“操作”列的“基础”。

    单击“字段配置”,单击“获取动态值”,如图3所示,在“维度名-值筛选器”页面单击“保存”,动态获取维度值,获取完成后单击“确认”。

    图3 获取动态值

  10. 单击任务所在行“操作”列的“模型”。

    1. 在“算法配置”页签可以修改告警算法配置,如将“annomaly_in_mins”修改为1,将“annomaly_out_mins”修改为5,即当异常持续1分钟则上报告警,当相关指标恢复正常5分钟则退出告警,单击“确定”。
    2. 在“训练配置”页签,单击“立即训练”。

      单击“训练历史”,生成训练任务,等待训练完成,状态变为“FINISH”表示模型训练任务正常完成,然后单击“确定”。

    3. 在“算法配置”页签,单击“当前模型”后的“刷新”,然后选择已生成的训练模型,单击“确定”。
    4. 在“Judge配置”页签,将“调度(固定间隔)”修改为1分钟,“汇聚时间提前”修改为3分钟,单击“启动任务”,单击“确认”。

      单击“Judge历史”,生成Judge任务,等待Judge判断完成,状态变为“FINISH”表示Judge任务正常完成,然后单击“确定”。

  11. (可选)单击任务所在行“操作”列的“告警”,查看快速配置生成的告警任务。

    已自动开启告警推送,如图4所示,将产生的告警数据推送至监控服务告警模块,按照配置的告警名称、告警级别生成告警数据。

    图4 告警配置

步骤二:配置告警总览报表

  1. 在监控服务左侧导航栏选择“监控 > 报表开发”。
  2. 在业务报表编辑页面,单击左下角的“设置和帮助”,会显示“设置和帮助”菜单栏下的内容。
  3. 单击“新增页面”,如图5所示,页面参数说明如表2所示,参数配置完成后单击“确定”。

    图5 新增页面
    表2 新增页面参数说明

    参数

    示例

    说明

    类型

    页面

    选择“页面”类型,新增业务报表页面。

    如需对页面进行分组,可以在此处新增分类。

    名称

    演示_告警总览

    输入页面名称,长度在1~20个字符。

    英文名称

    show_alarm

    输入页面英文名称,可以输入英文字符以及英文符,数字。

    添加到分类

    -

    可以选择无分类,或者已新增的分类。

    页面类型

    告警总览页面

    选择需要创建的页面类型。

    • 瀑布流页面:最常用的页面类型,即常见的报表页面。
    • 自由布局页面:支持创建自由布局页面。
    • 页面跳转:日志检索常用类型,需要设置一个url地址。
    • 轮播页面:轮播大屏,可以将已创建的页面进行轮播。需要设置轮播间隔,并在轮播页面选择已创建页面。
    • Tab页页面:可以将已创建的页面以标签页进行呈现。在页面选择下单击“添加”,设置标签页名称并选择相关页面,多次添加完成标签页设置。
    • 共享页面:支持添加其他服务已共享的页面。选择已共享的页面并输入url参数。
    • mdrca页面:支持创建mdrca页面。
    • 告警总览页面:支持将异常检测任务生成的告警数据进行大屏展示。
    • 根因诊断页面:支持将根因诊断数据进行大屏展示。
    • UEO页面:支持创建UEO页面。
    • 自定义页面:支持自定义页面,可以选择对应的页面id。
    • 华为云资源监控大盘:支持查看华为云已购买资源实例的数量、状态及费用。

  4. 单击“管理页面”,单击已新增页面“演示_告警总览”所在行“操作”列的“发布”。

    发布后,可在“监控 > 业务报表”页面查看。

步骤三:配置告警值班人员

  1. 在监控服务左侧导航栏选择告警 > 值班配置,进入语音值班配置页面。
  2. 单击“模板管理”,切换至“模板管理”页签,单击“新增模板”。
  3. 配置值班模板,如图6所示,模板参数说明如表3所示,配置完成后,单击“保存”。

    图6 配置值班模板
    表3 模板参数说明

    参数

    示例

    说明

    模板名称

    演示_值班模板

    自定义模板名称。

    模板类型

    按班次

    • 按班次:班次配置指的是一天内(00:00 - 24:00)的配置。如果一天只有一个配置,则不需要对时间进行分片;如果一天内根据不同的时间段有不同的限制,则可以对一天(00:00 - 24:00)进行分片处理,分为几个时间段再进行配置。
    • 按周:按周的模板是按天的进阶版,在按天的基础上,按照自然周的形式增加了对于周工作日的判断。和一天的配置一样,周配置的每个周工作日也可以根据时间片进行配置且比较灵活。
    • 按月:按月的模板跟周类似,将配置的周期改为按自然月划分。

    值班信息

    • 00:00 Hrs~24:00 Hrs
    • 责任人:根据实际情况配置责任人
    • 处理方式:立即通知
    • 开始时间、结束时间:设置具体值班时间。
    • 第一责任人、第二责任人、扩展人员:设置值班时间段告警的值班责任人。
    • 处理方式:选择处理方式。选择立即通知时,会根据语音值班配置开启的通知方式,立刻触发通知流程,进行通知。选择不通知时,语音值班配置开启了语音呼叫时,选择该方式将不会进行语音呼叫,短信和welink正常通知。

  4. 单击“值班管理”,切换至“值班管理”页签,单击“新增配置”。
  5. 配置语音值班参数,参数说明如表4所示,配置完成后,单击“保存”。

    当出现紧急告警或严重告警时,所选模板中设置的责任人会收到语音呼叫、短信和welink通知告警信息。
    表4 语音值班配置参数说明

    参数

    示例

    说明

    自有服务

    与顶部导航栏选择的服务一致

    选择数据所在服务名称。

    reminder通知

    开启

    告警未处理会触发reminder通知,短信、welink、邮箱会重复通知一次。

    开启reminder通知后,致命级别告警1个小时未处理会重新通知一次,严重级别告警2个小时未处理会重新通知一次。

    短信通知

    开启

    选择是否开启短信通知。

    开启短信通知后,当产生告警时,所选模板中设置的第一责任人、第二责任人和前两个扩展人员会收到短信。

    短信规则:短信最多显示134个字,当内容超过134个字时,剩余内容会被省略,短信规则根据告警来源不同,拼接规则不同,具体如下:

    • appstage内部上报:【华为云应用平台】服务名|告警级别|发生时间|指标名称|details。例如【华为云应用平台】MessageSMS |notice|2024-04-01 10:35:00|30S及时率_分运营商_10分钟_动态_GZ|details。
    • 云监控服务CES上报:【华为云应用平台】服务名|告警级别|告警时间|命名空间|资源名称|指标名称|当前值(阈值)|Region。例如 【华为云应用平台】WebCommunityService|重要|2024/04/01 09:49:46|ECS|openlab_MasterNode02|CPU使用率|99.35 %(阈值80 %)|华北-乌兰察布一。
    • 应用运维服务AOM上报(上报的告警体须为json格式):【华为云应用平台】服务名|告警级别|告警时间|集群名称|指标名称|依据的告警规则|当前值(阈值)。例如【华为云应用平台】Service|重要|2024/08/28 10:23:34|cce-wiseeyetest-bj4-turbo-opsagent-001|diskUsedRate|异常告警|10.02(阈值:5)。

    welink通知

    开启

    配置对接华为云WeLink后会显示该参数,可以选择是否开启welink通知。

    开启welink通知后,当产生告警时,所选模板中设置的第一责任人、第二责任人和扩展人员(已配置WeLink属性)会收到welink通知。

    邮箱通知

    开启

    选择是否开启邮箱通知。

    开启邮箱通知时,请确保所选模板内的所有人员已配置邮箱信息,如未配置,请联系组织管理员添加邮箱信息。

    责任人

    根据实际情况选择责任人

    选择告警责任人。

    级别

    严重&紧急

    选择需要通知的告警级别。

    语音呼叫

    开启

    选择是否开启语音呼叫。

    开启后会按照所选模板配置的处理方式确定是否进行呼叫。

    语音呼叫规则如下

    • 语音呼叫会依次呼叫第一责任人、第二责任人、告警责任人(所选的责任人),每个责任人最多呼叫3次,每次间隔2分钟,如均未接听,则不会再次呼叫。
    • 如果告警责任人与第一责任人相同,呼叫至告警责任人时会拨打一次,其他重复场景时会跳过下一个责任人。

    关键字

    -

    默认关键字为“/”,表示匹配所有的告警。

    增加模板匹配时,可以单击关键字后的“编辑”,匹配消息、主机名、主机IP、serviceId等告警关键字。

    模板

    演示_值班模板

    选择模板,可选模板范围为当前服务所在产品下的所有模板。

步骤四:插入异常数据触发告警推送

  1. 在监控服务左侧导航栏选择EAP&JOB > 脚本执行
  2. 在 “业务工具”页面,单击“新建工具”。
  3. 配置工具参数,参数说明如表5所示,配置完成后,单击“保存”。

    表5 新建工具参数说明

    参数

    示例

    说明

    工具名称

    show_log_generate_user

    自定义工具名称,最大长度为128,可包含中文、字母、数字、下划线“_”、中划线“-”和中文括号()。

    工具描述

    -

    输入工具描述,最大长度为512。

    工具参数

    -

    输入工具参数,不能包含><`&$;#。

    脚本类型

    shell

    选择脚本类型,目前支持shell和python。

    脚本内容

    #!/bin/bash
    
    # 可在脚本执行成功时调用,输出成功信号
    function success()
    {
        echo "###Atom.result.success####end"
        echo "###end"
    }
    
    function serach()
    {
        echo "###Atom.result.success####end"
        echo "###已查询到文件"
    }
    
    # 可在脚本执行失败时调用,输出失败信号
    function failure()
    {
        echo "###Atom.result.failure####end"
        echo "###end"
    }
    
    # 可在脚本需要"导出结果"时调用。多个导出结果用\n隔开
    # 如果想输出多行消息可以多次调用该函数,或者加入换行符。 例如, output "aaaaa\nbbbbb\nccccc\nddddd"
    # 注意:1.如果通过调用接口的方式创建作业,脚本只能通过调用output函数才可以在output字段中获取脚本输出
    # 注意:2.页面上"导出结果"按钮导出的仅仅是output输出的消息
    function output()
    {
        echo "###Atom.output####end"
        echo -e "$*"
        echo "###end"
    }
    
    
    function log_generate()
    {
        echo "####日志构造开始####end"
    
        # 获取当前时间
        count=0        #记录循环次数
        max_count=120  #最大执行次数
    
        while [ $count -lt $max_count ]; do
    
            random_number=$(( $RANDOM % 100 ))
            # 设置日志级别
            if [ $random_number -lt 70 ]; then
                log_type="INFO"
            elif [ $random_number -lt 90 ]; then
                log_type="DEBUG"
            else
                log_type="ERROR"
            fi
    
            # 设置LogRecordPostFilter
            log_messages=("(InterfaceTsak.java:26)" "(InterfaceTsak.java:92)" "(InterfaceTsak.java:78)" "(InterfaceTsak.java:44)")
            log_message=${log_messages[$RANDOM % ${#log_messages[@]}]}
    
    
            request_services=("WiseEyePOCMicroServiceA01Userget" "WiseEyePOCMicroServiceA01Userpost")
            request_service=${request_services[$RANDOM % ${#request_services[@]}]}
            request_services="WiseEyePOCMicroServiceA01User"
    
            #设置接口url
            request_get_urls=("http://orgidLogin.huawei.com/user" "http://orgidLogin.huawei.com/user/list" "http://orgidLogin.huawei.com/user/88" "http://orgidLogin.huawei.com/user/66" "http://orgidLogin.huawei.com/user/102")
            request_post_urls=("http://orgidLogin.huawei.com/user/add" "http://orgidLogin.huawei.com/user/33")
    
    
            if [ $request_service == "WiseEyePOCMicroServiceA01Userget" ]; then
                request_url=${request_get_urls[$RANDOM % ${#request_get_urls[@]}]}
                request_type="GET"
            else
                request_url=${request_post_urls[$RANDOM % ${#request_post_urls[@]}]}
                request_type="POST"
            fi
    
    
            #设置接口错误码
            request_status_fail=("500" "302" "401" "402" "403")
            if [ $log_type == "ERROR" ]; then
                request_status=${request_status_fail[$RANDOM % ${#request_status_fail[@]}]}
            else
                request_status="200"
            fi
    
            # 获取当前时间
            timestamp=$(date +"%Y-%m-%d %H:%M:%S.%3N")
    
            # 写入日志数据
            echo "$timestamp|$log_type|$log_message|Request $request_services|$request_type|$request_url|$(( $RANDOM % 201 ))|$request_status" >> /opt/wiseeye/test/appstageshow.log
      # 插入主机异常日志
    
            #log_entry="2025-04-05 14:31:19.403|INFO|(LogRecordPostFilter.java:48)|Request APSTarzanApsMeetingUser|GET|http://orgidLogin.huawei.com/user/list|390|404"
    
            let count=$count+1
    
            #间隔多久触发一次
            #sleep_time=$(( $RANDOM % 8 + 3 ))
            #sleep $sleep_time
            sleep 2
        done
    
        echo "####日志构造完成####"
    }
    
    
    
    # 巡检作业专用输出函数,输出巡检结果。多个巡检结果用%隔开
    # 示例:inspect_output "$item_name1%$item_name2%$item_name3".(请预先定义好变量)
    # 注意:巡检任务定义使用的脚本必须使用inspect_output函数
    function inspect_output()
    {
        echo "###Atom.output####end"
        echo -e "inspect_output:$* end"
        echo "###end"
    }
    # 请在此处开始编写你的脚本内容。(如需要输出日志,直接echo "log_str"即可)
    # 注意:请务必确保最终调用success或者failure函数,否则系统无法捕获脚本输出信息
    log_generate
    success

    编辑脚本内容,可进入全屏模式编辑。

    如果脚本中包含高危指令需要进行二次确认。

    • shell类型高危指令:shutdown、reboot、rm 、/dev/sda、umount、poweroff、restart、 halt、 init、 undo。
    • python类型高危指令:shutdown、reboot、rm 、/dev/sda、umount、poweroff、restart、 halt、 init、 undo、poweroff、remove、rmtree。

  4. 在 “业务工具”页面,单击已创建的工具所在行“操作”列的“执行”。
  5. 在“虚拟机执行”页签,选择需要执行的运维账号,然后单击“资源”后的“选择资源”,选择已纳管的Linux主机,其他参数不变,然后单击“执行”,开始使用虚拟机执行作业脚本,插入异常日志。

步骤五:查看告警总览报表并处理告警数据

当出现紧急告警或严重告警时,所选模板中设置的责任人会收到通知,收到通知后,可以在“告警 > 告警列表”页面查看并处理告警,也可以按照如下操作查看告警总览报表并处理告警。

  1. 在监控服务左侧导航栏选择监控 > 业务报表
  2. 单击已新增报表“演示_告警总览”,可以查看到触发的告警信息,如图7所示。

    图7 告警总览报表

  3. 通过筛选告警名称和维度“request_url”,查看详细数据,如图8所示。

    图8 告警详细数据

  4. 异常日志推送停止后,等待5分钟(异常检测配置的告警退出时间),触发的告警自动消警成功,如图9所示。

    图9 自动消警

  5. (可选)单击告警所在行的“告警消除”,手动消除告警,或者单击“未处理”,对异常告警进行处理。

相关文档