当前位置: 首页 > news >正文

DolphinDB异常检测引擎:实时告警

目录

    • 摘要
    • 一、异常检测引擎概述
      • 1.1 什么是异常检测引擎
      • 1.2 异常检测引擎特点
      • 1.3 适用场景
    • 二、创建异常检测引擎
      • 2.1 基本语法
      • 2.2 创建简单引擎
      • 2.3 输出格式
    • 三、异常检测规则
      • 3.1 阈值规则
      • 3.2 统计规则
      • 3.3 组合规则
      • 3.4 复杂规则
    • 四、窗口模式
      • 4.1 无窗口模式
      • 4.2 有窗口模式
    • 五、实战案例
      • 5.1 设备温度告警系统
      • 5.2 多指标组合告警
      • 5.3 统计异常检测
    • 六、引擎管理
      • 6.1 查看引擎状态
      • 6.2 删除引擎
      • 6.3 引擎监控
    • 七、告警通知
      • 7.1 告警推送
      • 7.2 告警聚合
    • 八、总结
    • 参考资料

摘要

本文深入讲解DolphinDB异常检测引擎。从引擎原理到创建配置,从规则定义到告警输出,从多规则组合到实战应用,全面介绍异常检测引擎的核心功能。通过丰富的代码示例,帮助读者掌握实时告警系统的核心技能。


一、异常检测引擎概述

1.1 什么是异常检测引擎

异常检测引擎是DolphinDB内置的流计算引擎,用于实时检测数据异常:

异常检测引擎

匹配

不匹配

数据流

异常规则

规则匹配

输出告警

正常数据

规则类型

阈值规则

统计规则

组合规则

1.2 异常检测引擎特点

特点说明
实时检测毫秒级延迟
多规则支持多规则组合
灵活配置Lambda表达式定义规则
自动输出异常数据自动输出

1.3 适用场景

场景说明
设备告警设备参数异常告警
阈值监控实时阈值监控
趋势异常数据趋势异常检测
组合告警多条件组合告警

二、创建异常检测引擎

2.1 基本语法

//创建异常检测引擎 agg=createAnomalyDetectionEngine("engine_name",//引擎名称 metrics,//异常检测规则(Lambda表达式列表) outputTable,//输出表 timeColumn,//时间列[keyColumn],//分组列(可选)[windowSize],//窗口大小[garbageSize]//垃圾回收阈值)

2.2 创建简单引擎

//创建输入流表 share streamTable(1:0,`device_id`timestamp`temperature,[INT,TIMESTAMP,DOUBLE])asinput_stream//创建输出表 share table(1:0,`device_id`timestamp`temperature`anomaly_type,[INT,TIMESTAMP,DOUBLE,SYMBOL])asoutput_table//创建异常检测引擎 agg=createAnomalyDetectionEngine("anomaly_engine",<[temperature>30,//规则1:温度>30temperature<10]>,//规则2:温度<10output_table,`timestamp,`device_id)//订阅流表 subscribeTable(,"input_stream","anomaly_detect",-1,agg,true)

2.3 输出格式

//异常检测输出格式//-device_id:分组列//-timestamp:时间列//-temperature:检测列//-anomaly_type:异常类型(规则索引)//例如://device_id|timestamp|temperature|anomaly_type//1|10:00:00|35.0|0(规则0匹配:温度>30)//2|10:00:01|5.0|1(规则1匹配:温度<10)

三、异常检测规则

3.1 阈值规则

//阈值规则:简单的阈值判断 agg=createAnomalyDetectionEngine("threshold_engine",<[temperature>30,//高温告警 temperature<10,//低温告警 humidity>80,//高湿度告警 humidity<20]>,//低湿度告警 output_table,`timestamp,`device_id)

3.2 统计规则

//统计规则:基于统计指标//需要配合窗口使用 agg=createAnomalyDetectionEngine("stats_engine",<[temperature>avg(temperature)+3*std(temperature),//超过3倍标准差 temperature<avg(temperature)-3*std(temperature)]>,//低于3倍标准差 output_table,`timestamp,`device_id,60000)//窗口大小60

3.3 组合规则

//组合规则:多条件组合 agg=createAnomalyDetectionEngine("combo_engine",<[temperature>30andhumidity>70,//高温高湿 temperature<10andhumidity<30,//低温低湿 temperature>35orhumidity>90]>,//高温或高湿 output_table,`timestamp,`device_id)

3.4 复杂规则

//复杂规则:使用函数 agg=createAnomalyDetectionEngine("complex_engine",<[abs(temperature-prev(temperature))>5,//温度突变>5度 temperature>30andtemperature>prev(temperature)*1.2]>,//温度突增20%output_table,`timestamp,`device_id)

四、窗口模式

4.1 无窗口模式

//无窗口:每条数据独立判断 agg=createAnomalyDetectionEngine("no_window_engine",<[temperature>30]>,output_table,`timestamp,`device_id)//适用场景://-简单阈值判断//-不需要历史数据

4.2 有窗口模式

//有窗口:基于窗口内数据判断 agg=createAnomalyDetectionEngine("window_engine",<[temperature>avg(temperature)+3*std(temperature)]>,output_table,`timestamp,`device_id,60000)//60秒窗口//适用场景://-统计规则//-需要历史数据

五、实战案例

5.1 设备温度告警系统

//==========1.创建流表==========share streamTable(100000:0,`device_id`timestamp`temperature`humidity`pressure,[INT,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])assensor_stream//==========2.创建告警输出表==========share table(1:0,`device_id`timestamp`value`anomaly_type`alert_level,[INT,TIMESTAMP,DOUBLE,SYMBOL,INT])asalert_table//==========3.创建异常检测引擎==========agg=createAnomalyDetectionEngine("temp_alert_engine",<[temperature>35,//规则0:严重高温 temperature>30,//规则1:一般高温 temperature<5,//规则2:严重低温 temperature<10]>,//规则3:一般低温 alert_table,`timestamp,`device_id)//==========4.订阅流表==========subscribeTable(,"sensor_stream","temp_alert",-1,agg,true)//==========5.添加告警级别==========share table(1:0,`device_id`timestamp`value`anomaly_type`alert_level,[INT,TIMESTAMP,DOUBLE,SYMBOL,INT])asfinal_alert_table subscribeTable(,"alert_table","level_handler",-1,def(msg){result=select device_id,timestamp,value,anomaly_type,casewhen anomaly_typein["0","2"]then2//严重else1endasalert_levelfrommsg final_alert_table.append!(result)},true)//==========6.模拟数据==========defsimulateAlert(){for(iin1..100){sensor_stream.append!(table(take(1..10,100)asdevice_id,take(now(),100)astimestamp,rand(0.0..40.0,100)astemperature,//包含异常温度 rand(40.0..60.0,100)ashumidity,rand(1000.0..1020.0,100)aspressure))sleep(100)}}simulateAlert()//查看告警 select*fromfinal_alert_table order by timestamp desc limit20

5.2 多指标组合告警

//==========1.创建流表==========share streamTable(100000:0,`device_id`timestamp`temperature`humidity`vibration,[INT,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])assensor_stream//==========2.创建告警输出表==========share table(1:0,`device_id`timestamp`anomaly_type`description,[INT,TIMESTAMP,SYMBOL,STRING])ascombo_alert_table//==========3.创建组合告警引擎==========agg=createAnomalyDetectionEngine("combo_alert_engine",<[temperature>30andhumidity>70,//高温高湿 temperature>30andvibration>5,//高温高振动 humidity>80andvibration>3,//高湿高振动 temperature>35orvibration>10]>,//严重异常 combo_alert_table,`timestamp,`device_id)//==========4.订阅流表==========subscribeTable(,"sensor_stream","combo_alert",-1,agg,true)

5.3 统计异常检测

//==========1.创建流表==========share streamTable(100000:0,`device_id`timestamp`temperature,[INT,TIMESTAMP,DOUBLE])assensor_stream//==========2.创建告警输出表==========share table(1:0,`device_id`timestamp`temperature`avg_temp`std_temp`anomaly_type,[INT,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE,SYMBOL])asstats_alert_table//==========3.创建统计异常引擎==========agg=createAnomalyDetectionEngine("stats_alert_engine",<[temperature>avg(temperature)+3*std(temperature),temperature<avg(temperature)-3*std(temperature)]>,stats_alert_table,`timestamp,`device_id,300000)//5分钟窗口//==========4.订阅流表==========subscribeTable(,"sensor_stream","stats_alert",-1,agg,true)

六、引擎管理

6.1 查看引擎状态

//查看所有引擎状态 getStreamEngineStat()//查看特定引擎 getStreamEngineStat("anomaly_engine")

6.2 删除引擎

//删除引擎 dropStreamEngine("anomaly_engine")

6.3 引擎监控

//引擎监控函数defmonitorAnomalyEngine(){stat=getStreamEngineStat()for(rowinstat){if(row.type=="AnomalyDetectionEngine"){print("异常检测引擎: "+row.name)print(" 状态: "+row.status)print(" 规则数: "+string(row.numMetrics))print(" 处理行数: "+string(row.processedRows))print(" 告警数: "+string(row.outputRows))}}}monitorAnomalyEngine()

七、告警通知

7.1 告警推送

//告警推送函数defpushAlert(alert){//发送邮件//sendEmail(alert)//发送短信//sendSMS(alert)//发送微信//sendWeChat(alert)print("告警推送: "+alert.device_id+" - "+alert.anomaly_type)}//订阅告警表 subscribeTable(,"alert_table","push_handler",-1,def(msg){for(rowinmsg){pushAlert(row)}},true)

7.2 告警聚合

//告警聚合:避免告警风暴 share table(1:0,`device_id`anomaly_type`first_time`last_time`count,[INT,SYMBOL,TIMESTAMP,TIMESTAMP,LONG])asaggregated_alerts//聚合逻辑defaggregateAlerts(msg){for(rowinmsg){existing=select*fromaggregated_alerts where device_id=row.device_idandanomaly_type=row.anomaly_typeandlast_time>now()-60000//1分钟内if(existing.rows()>0){update aggregated_alertssetlast_time=row.timestamp,count=count+1where device_id=row.device_idandanomaly_type=row.anomaly_typeandlast_time>now()-60000}else{insert into aggregated_alerts values(row.device_id,row.anomaly_type,row.timestamp,row.timestamp,1)}}}subscribeTable(,"alert_table","aggregate_handler",-1,aggregateAlerts,true)

八、总结

本文详细介绍了DolphinDB异常检测引擎:

  1. 引擎原理:实时异常检测
  2. 创建方法:简单引擎、分组引擎
  3. 检测规则:阈值规则、统计规则、组合规则
  4. 窗口模式:无窗口、有窗口
  5. 实战应用:温度告警、组合告警、统计异常
  6. 告警通知:告警推送、告警聚合

思考题

  1. 如何设计合理的告警规则?
  2. 如何避免告警风暴?
  3. 统计异常检测适合什么场景?

参考资料

  • DolphinDB异常检测引擎
  • DolphinDB流计算

http://www.rkmt.cn/news/1433401.html

相关文章:

  • openEuler桌面环境二选一:深度DDE vs 麒麟UKUI,我的实际体验与选择建议
  • 多智能体系统开发:从架构设计到工程实践的挑战与应对
  • 鞍山外贸网站建设定制,WaiMaoYa 外贸鸭告别平台低价内卷,自建品牌私域流量阵地 - 外贸独立站运营
  • 常州市瑞铭恒玻璃装饰:常州有实力的钢化玻璃施工公司推荐几家 - LYL仔仔
  • 如何免费增强WeMod体验:开源游戏增强工具完整指南
  • 不只是编译:手把手教你配置OSG 3.6.5开发环境,并运行第一个地球模型(osgEarth 3.1)
  • 一小时构建RAG系统:从零搭建检索增强生成应用实战指南
  • 别再死记硬背了!用Python实战带你搞懂Adaboost和随机森林的区别(附代码)
  • 景德镇外贸网站建设服务,WaiMaoYa 外贸鸭专业官方站点,承接每一位海外意向客户 - 外贸独立站运营
  • sif亚马逊流量洞察工具,sif优惠折扣码怎么获得? - 跨境电商卖家出海官方
  • 从 Demo 到产品:为什么 90% 的 DPDK 项目最终死在工程化上?
  • Unity游戏原型开发:混乱哥布林工作流实战指南
  • 别再只用.mean()了!Pandas rolling的5个高阶玩法,让你的时间序列分析更专业
  • AI算力狂潮冲击美国老旧电网:能耗危机与破局路径
  • 从‘黑盒’到‘白盒’:用crash工具深入解读vmcore,像调试用户态程序一样分析Linux内核
  • 本地电脑跑不动SolidWorks?试试赞奇云工作站,实测渲染效率提升指南
  • 别再只用RRT*了!RRT*-Smart的“智能采样”如何让你的机器人路径规划快人一步
  • 告别黑屏!Ubuntu 22.04 LTS下NVIDIA驱动保姆级安装与避坑指南(含Secure Boot处理)
  • 深度解析阴阳师自动化脚本的每日任务异常修复实战
  • 游戏内存修改进阶:用CE多级指针破解动态地址的完整流程(附Tutorial-i386.exe实战)
  • STM32F103C8T6 全参数深度解析
  • [智能体-174]:LangChain 输出格式化 完整方案
  • Rocky Linux 9服务器装好后必做的几件事:从网络配置、SSH远程到基础监控
  • 构建个人知识管理系统:从信息过载到高效知识内化
  • 基座模型实战指南:从类型解析到应用部署的完整路径
  • AI新闻简报制作指南:从信息过载到价值提炼的完整流程
  • 不只是魔法上网:Win11 23H2 Copilot图标消失的深层原因与三种找回姿势
  • 巴音郭楞外贸建站推荐,WaiMaoYa 外贸鸭一次建站投入,长期持续收益,赋能品牌出海 - 外贸独立站运营
  • HsMod深度解析:基于BepInEx的炉石传说功能增强框架实战指南
  • 从零到一:基于eNSP构建企业级网络原型