Azure Log Analytics - 警报建议

Posted

技术标签:

【中文标题】Azure Log Analytics - 警报建议【英文标题】:Azure Log Analytics - Alerts Advice 【发布时间】:2019-03-25 10:06:27 【问题描述】:

我有一个关于 azure 日志分析警报的问题,因为我不太了解在基于聚合值设置警报的上下文中时间框架是如何工作的。

我有以下代码:

Event | where Source == "EventLog" and EventID == 6008 | project TimeGenerated, Computer | summarize AggregatedValue = count(TimeGenerated) by Computer, bin_at(TimeGenerated,24h, datetime(now()))
For time window : 24/03/2019, 09:46:29 - 25/03/2019, 09:46:29

在上面关于添加“bin_at(TimeGenerated,24h, datetime(now()))”的警报配置界面见解中,我添加了函数,将参数传递为 24 小时时间段。如果您已经添加此内容,那么时间范围的重点是什么。

基本上,我正在寻找的结果是在 24 小时内捕获此事件并在事件计数超过 2 时发出警报。我不明白为什么除此之外还需要时间窗口,因为我只想每五分钟运行一次代码,并在检测到此事件的两个以上实例时发出警报。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

AFAIK 您可以使用如下所示的查询来满足您在 24 小时内捕获所需事件的要求。

Event 
| where Source == "EventLog" and EventID == 6008 
| where TimeGenerated > ago(24h)
| summarize AggregatedValue= any(EventID) by Computer, bin(TimeGenerated, 1s)

此示例查询中的“1”是我们聚合并从 Log Analytics 工作区存储库获取输出的时间范围。更多信息请参考https://docs.microsoft.com/en-us/azure/kusto/query/summarizeoperator

要创建警报,您可能必须转到 Azure 门户 -> YOURLOGANALYTICSWORKSPACE -> 监控磁贴 -> 警报 -> 管理警报规则 -> 新警报规则 -> 添加条件 -> 自定义日志搜索 -> 粘贴任何在“搜索查询”部分下的上述查询中-> 在“警报逻辑”部分的“阈值”参数下键入“2”-> 单击“完成”-> 在“操作组”部分下,选择现有操作组或创建一个如下面提到的文章中所述的新的->更新“警报详细信息”->单击“创建警报规则”。

https://docs.microsoft.com/en-us/azure/azure-monitor/platform/action-groups

希望这会有所帮助!!干杯!! :)

【讨论】:

下面的查询有效,因为我得到了过去 24 小时内的事件计数,警报坚持添加 bin 功能,所以会超过 24 小时吗? 活动 |其中 Source == "EventLog" 和 EventID == 6008 |其中 TimeGenerated > ago(24h) |按计算机汇总 AggregatedValue= count(EventID) 非常感谢您在这方面的帮助,我将尝试不同的设置,看看我能得到什么结果。 在这种情况下,我们是否可以根据在 20 分钟内所说的时间范围内的故障百分比来获取警报,而不是仅按计数计算【参考方案2】:

要在 cmets 部分回答您的问题,是的,警报坚持添加 bin 函数,这就是我通过使用“1s”提供相关查询以及 bin 函数并试图在我之前的回答中解释它的原因。

如果您将“1s”放入 bin 函数中,那么您将通过在 1 秒的时间跨度内聚合任何 EventID 的值来从 Log Analytics 获取输出。所以输出看起来如下所示,其中 aaaaaaa 被视为 VM 名称,x 被视为特定时间。

如果您在 bin 函数中放置“24h”而不是“1s”,那么您将通过在 24 小时的时间跨度内聚合任何 EventID 的值从 Log Analytics 获取输出。所以输出看起来如下所示,其中 aaaaaaa 被视为 VM 名称,x 被视为特定时间。

所以在这种情况下,我们不应该在 bin 函数中使用 '24h' 和 'any' 聚合,因为如果我们使用它,我们会在 24 小时的时间跨度内只看到一次输出,这对您没有帮助使用上面提供的具有“任何”聚合的查询来找出事件发生计数。相反,如果您想在 bin 函数中使用“24h”,则可以使用“count”聚合而不是“any”。那么这个查询将如下所示。

Event 
| where Source == "EventLog" and EventID == 6008 
| where TimeGenerated > ago(24h)
| summarize AggregatedValue= count(EventID) by Computer, bin(TimeGenerated, 24h)

此查询的输出如下所示,其中 aaaaaaa 被视为 VM 名称,x 被视为特定时间,y 和 z 被视为一些数字。

另一个注意事项是,上述所有查询和输出都是在基于聚合值设置警报的上下文中,即在基于部分的警报逻辑下选择“度量测量”时设置警报。换句话说,当您在基于部分的警报逻辑下选择“度量测量”时,警报查询中需要聚合值列。但是当你说“你得到了事件的计数”时,这意味着如果我没记错的话,可能是你在基于部分的警报逻辑下选择了“结果数”,这不需要查询中的任何聚合列。

希望这可以澄清!干杯!!

【讨论】:

我想我需要类似 Event |其中 Source == "EventLog" 和 EventID == 6008 |项目时间生成,计算机 |通过计算机汇总 AggregatedValue = count(TimeGenerated) |其中 AggregatedValue > 2 并设置为按超过一的结果数发出警报。我会玩弄这些设置。 我明白了!因此,您可以通过转到 Azure 门户 -> LAWORKSPACE -> 监控磁贴 -> 警报 -> 管理器警报规则 -> 新警报规则 -> 添加条件 -> 自定义日志搜索 -> 在“搜索查询”下粘贴以下查询来创建警报' 部分 -> 在基于部分的警报逻辑下选择“度量测量”,然后在“警报逻辑”部分的“阈值”参数下键入“2” -> 单击“完成”-> 在“操作组”部分下,选择操作组-> 更新“警报详细信息”-> 单击“创建警报规则”。 "Event | where Source == "EventLog" and EventID == 6008 | where TimeGenerated > ago(24h) | 按计算机汇总 AggregatedValue= count(EventID),bin(TimeGenerated, 24h)" 非常感谢您在这方面的帮助,我将尝试不同的设置,看看我能得到什么结果。

以上是关于Azure Log Analytics - 警报建议的主要内容,如果未能解决你的问题,请参考以下文章

Azure Log Analytics - SQL 托管实例日志

将 Azure DevOps 管道日志定向到 Log Analytics?

根据数据类型增加Azure Log Analytics的数据保留时间

如何从 Azure Log Analytics 中找到附加到 Azure Linux 虚拟机的每个磁盘的总大小?

如何将 Log Analytics / Azure Monitor 挂接到角色分配中?

将日志从一个 Azure Log Analytics 工作区传送到另一个