当前位置: 首页 > 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.jsqmd.com/news/922079/

相关文章:

  • 告别混乱周计划!用WeekToDo在麒麟KYLINOS上打造你的专属任务看板(附数据备份技巧)
  • 别再只盯着Transformer了!用Python复现DSIN模型,带你亲手验证它的Session划分到底有没有用
  • openEuler桌面环境二选一:深度DDE vs 麒麟UKUI,我的实际体验与选择建议
  • 多智能体系统开发:从架构设计到工程实践的挑战与应对
  • 常州市瑞铭恒玻璃装饰:常州有实力的钢化玻璃施工公司推荐几家 - LYL仔仔
  • 鞍山外贸网站建设定制,WaiMaoYa 外贸鸭告别平台低价内卷,自建品牌私域流量阵地 - 外贸独立站运营
  • 模拟IC设计避坑指南:从电流镜负载差分放大器的仿真异常说起(Cadence 617)
  • 如何免费增强WeMod体验:开源游戏增强工具完整指南
  • 铸铝门十大品牌靠谱吗?2026年实测3家源头铸铝门工厂 - 门业测评
  • Kali Linux 2024.2 新手避坑指南:从换源到DDos-Attack工具安装,保姆级教程
  • 乌鲁木齐外贸建站怎么选?WaiMaoYa 外贸鸭解决海外访问慢、排名低、无询盘核心难题 - 外贸独立站运营
  • 不只是编译:手把手教你配置OSG 3.6.5开发环境,并运行第一个地球模型(osgEarth 3.1)
  • 保姆级教程:用Home Assistant把追觅扫地机器人接入苹果家庭,实现Siri语音分区打扫
  • 含复铰可连续变弯度机翼机构设计与优化方案【附仿真】
  • 反拖延硬件:从行为干预到专注力管理的新兴市场与技术实现
  • 2026年4月沈阳市评价好的汽车保养厂家推荐分析,轿车轮胎/汽车维修/客车轮胎/轿车保养,汽车保养门店口碑推荐 - 品牌推荐师
  • 别再死记硬背了!用Python实战带你搞懂Adaboost和随机森林的区别(附代码)
  • 手把手教你绕过微软商店,用官方链接下载Drawboard PDF 5.4.10旧版(附开发模式开启指南)
  • 一小时构建RAG系统:从零搭建检索增强生成应用实战指南
  • AI辅助编程时代:用可执行测试替代外部注释,构建自解释代码
  • 呼伦贝尔外贸网站开发哪家靠谱?WaiMaoYa 外贸鸭量身定制外贸独立站,即刻开启品牌出海之路 - 外贸独立站运营
  • 牵引变流器的故障预测与健康管理(PHM)及可靠性评估技术解析【附数据】
  • 告别Windows依赖:用Remmina在Linux上直连公司堡垒机(附文件互传终极方案)
  • 别再手动下载了!Linux服务器上JDK 17的三种高效安装方式对比(含APT/YUM/Docker)
  • YOLOv8论文党必备:如何科学设计并自动化执行你的消融实验?
  • sif亚马逊流量洞察工具,sif优惠折扣码怎么获得? - 跨境电商卖家出海官方
  • 景德镇外贸网站建设服务,WaiMaoYa 外贸鸭专业官方站点,承接每一位海外意向客户 - 外贸独立站运营
  • 告别手动评分!ImageJ IHC Profiler插件保姆级安装与避坑指南(附GitHub修复版)
  • XUnity.AutoTranslator:打破语言障碍,免费实现Unity游戏实时翻译的终极指南
  • AI生成法律报告的证据力审计:从编译句法到可追溯路径