实施 Azure 流分析 notifications/alarms 服务的正确方法

Proper way of implementing Azure Stream Analytics notifications/alarms service

我正在使用传感器系统,其中每个传感器每 15 秒发送一个新读数。

每种传感器类型还定义了触发时会生成警报输出的规则 - 例如"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 之类的东西来发送 SMS 或只是发送电子邮件通知,我不想每 15 秒向我的最终用户发送垃圾邮件,假设传入的传感器读数保持在允许的最大值以上。

我可以使用什么样的 Azure 服务、体系结构或设计范例来避免此类问题?

不得不说A(不想垃圾用户通知)和B(一碰到MAX线就报警高温)有些矛盾。好难实现。

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

1.In那个频率周期,比如1分钟,使用Azure流分析服务每15秒接收一次传感器数据。

2.Then 将数据输出到 Azure 存储队列。

3.Then 每 1 分钟使用 Azure Queue Time Trigger to get latest temperature value in the Azure Storage Queue 个当前消息。如果触及 MAX 线,则向最终用户发送通知。如果你想通知用户它触及了MAX线,不管它已经下降了,那么只需要按值排序并判断它。

4.Finally,清空队列。

我也同意周杰伦关于矛盾的回应

但是我们还有一种方法可以处理它,我在我的一项任务中也遇到了类似的问题,我尝试的是通过缓存(即 redi 缓存、memcache 等)跟踪一次发送的警报,并且每次检查是否警报已经发送,那么不要发送。显然权衡是每次我们都需要检查,但这是你需要决定的问题

如果最高温度重置为正常,我们也可以扩展相同的通知用户。

希望对您有所帮助。

使用 Azure 流分析,您可以在超过阈值时触发警报,例如,如果这是最近 30 秒内的第一次。

我给你这个例子的样本SQL:

 SELECT *
 FROM input
 WHERE ISFIRST(second, 30) OVER (WHEN value> 90)=1

如果您有任何其他问题,请告诉我们。