我送customEvents
到Azure应用程序的见解,是这样的:警报使用Azure的见解和/或分析差错率超过阈值的
timestamp | name | customDimensions
----------------------------------------------------------------------------
2017-06-22T14:10:07.391Z | StatusChange | {"Status":"3000","Id":"49315"}
2017-06-22T14:10:14.699Z | StatusChange | {"Status":"3000","Id":"49315"}
2017-06-22T14:10:15.716Z | StatusChange | {"Status":"2000","Id":"49315"}
2017-06-22T14:10:21.164Z | StatusChange | {"Status":"1000","Id":"41986"}
2017-06-22T14:10:24.994Z | StatusChange | {"Status":"3000","Id":"41986"}
2017-06-22T14:10:25.604Z | StatusChange | {"Status":"2000","Id":"41986"}
2017-06-22T14:10:29.964Z | StatusChange | {"Status":"3000","Id":"54234"}
2017-06-22T14:10:35.192Z | StatusChange | {"Status":"2000","Id":"54234"}
2017-06-22T14:10:35.809Z | StatusChange | {"Status":"3000","Id":"54234"}
2017-06-22T14:10:39.22Z | StatusChange | {"Status":"1000","Id":"74458"}
假设状态3000
为错误状态,我想在过去一小时内某个百分比的Ids
最终处于错误状态时收到警报。
据我所知,Insights默认情况下不能这样做,所以我想尝试approach described here来编写可能触发警报的Analytics(分析)查询。这是我已经能够拿出最好的:
customEvents
| where timestamp > ago(1h)
| extend isError = iff(toint(customDimensions.Status) == 3000, 1, 0)
| summarize failures = sum(isError), successes = sum(1 - isError) by timestamp bin = 1h
| extend ratio = todouble(failures)/todouble(failures+successes)
| extend failure_Percent = ratio * 100
| project iff(failure_Percent < 50, "PASSED", "FAILED")
但是,我警告正常工作,查询应:
- 返回“通过”即使没有活动在一小时内(另一个警报将照顾没有事件)
- 只在每小时内考虑每个Id的最终状态。
由于写入请求,如果没有事件,查询既不返回“PASSED”也不返回“FAILED”。
它还考虑到任何记录与Status == 3000
,这意味着,上面的例子将返回“失败”(5超过了10记录具有状态3000),而在现实中只是出于1 4个IDS在结束了错误状态。
有人可以帮我找出正确的查询吗?
(和可选的辅助问题:有没有人安装使用洞察的类似警告这是一个正确的做法?)
为了将来的参考,如果我不'bin'的时间戳,查询总是返回一些东西(因为总和返回0),所以综合结果没有帮助。因此,要么保持垃圾箱,要么,正如我最终所做的那样,如果失败==成功== 0,则返回“PASSED”。无论如何,谢谢你的好解释 – madd0