实施Azure流分析通知/警报服务的正确方法

实施Azure流分析通知/警报服务的正确方法,azure,azure-stream-analytics,Azure,Azure Stream Analytics,我使用的是传感器系统,每个传感器每15秒发送一个新的读数 每种传感器类型还定义了触发时将生成报警输出的规则-例如,“温度”类型的传感器发送的值高于允许的最高温度 Event in: 01/10/2018 12:00:00 { id:"XXX_01", value: 90, "temperature" } Event in: 01/10/2018 12:15:00 { id:"XXX_01", value: 95, "temperature" } 假设ID为“XXX_01”的传感器在30秒内

我使用的是传感器系统,每个传感器每15秒发送一个新的读数

每种传感器类型还定义了触发时将生成报警输出的规则-例如,“温度”类型的传感器发送的值高于允许的最高温度

Event in: 01/10/2018 12:00:00
{ id:"XXX_01", value: 90, "temperature" } 

Event in: 01/10/2018 12:15:00
{ id:"XXX_01", value: 95, "temperature" }
假设ID为“XXX_01”的传感器在30秒内发送2个读数,每个读数的值都高于允许的最大值

Event in: 01/10/2018 12:00:00
{ id:"XXX_01", value: 90, "temperature" } 

Event in: 01/10/2018 12:15:00
{ id:"XXX_01", value: 95, "temperature" }
现在,我想通知最终用户有警报-我必须向最终用户发送某种通知。问题和困惑在于我不想发出两次警报

假设我使用像Twilio这样的东西来发送短信或只是发送电子邮件通知,我不想每隔15秒向我的最终用户发送一个新的通知,假设传入的传感器读数保持在允许的最大值以上

Event in: 01/10/2018 12:00:00
{ id:"XXX_01", value: 90, "temperature" } 

Event in: 01/10/2018 12:15:00
{ id:"XXX_01", value: 95, "temperature" }
我可以使用什么样的Azure服务、体系结构或设计范例来避免此类问题?

我必须指出,A(不想向用户发送垃圾邮件通知)和B(一旦触及最高线即报警高温)存在一些矛盾。很难实施它

在我看来,您可以以固定的频率向用户发送通知

1.在该频率周期内,例如1分钟,使用Azure stream analytics服务每15秒接收一次传感器数据

2.然后将数据输出到Azure存储队列

3.然后使用每1分钟获取当前消息中的最新温度值。如果它触及MAX line,则向最终用户发送通知。如果您想通知用户,无论它是否已删除,它都已触碰了MAX line,则只需按值对消息进行排序并进行判断即可


4.最后,清空队列。

我也同意杰伊关于矛盾的回答

但还有一种方法我们可以处理它,我在一次作业中也遇到了类似的问题,我尝试的是通过缓存(即redi缓存、memcache等)跟踪一次发送的警报,每次检查警报是否已发送,然后再不发送。很明显,每次我们都需要检查,但这是你需要决定的问题

如果最高温度被重置为正常值,我们还可以扩展该功能以通知用户


希望这有帮助。

使用Azure Stream Analytics,您可以在超过阈值时触发警报,例如,如果这是过去30年中的第一次

我为您提供了此示例的示例SQL:

 SELECT *
 FROM input
 WHERE ISFIRST(second, 30) OVER (WHEN value> 90)=1
如果您有任何进一步的问题,请告诉我们