实施 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
如果您有任何其他问题,请告诉我们。
我正在使用传感器系统,其中每个传感器每 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
如果您有任何其他问题,请告诉我们。