【发布时间】:2017-06-28 08:58:19
【问题描述】:
我正在向 Azure Application Insights 发送 customEvents,如下所示:
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")
但是,为了让我的警报正常工作,查询应该:
- 即使一小时内没有事件,也返回“PASSED”(另一个警报会处理没有事件的情况)
- 只考虑一个小时内每个 ID 的最终状态。
在写入请求时,如果没有事件,则查询既不返回“PASSED”也不返回“FAILED”。
它还考虑了带有Status == 3000 的任何条记录,这意味着上面的示例将返回“FAILED”(10 条记录中有 5 条状态为 3000),而实际上只有 1 条记录4 个 ID 最终处于错误状态。
谁能帮我找出正确的查询?
(以及可选的次要问题:是否有人使用 Insights 设置了类似的警报?这是正确的方法吗?)
【问题讨论】:
标签: azure-application-insights ms-app-analytics aiql