使用 azure 命令行工具根据自定义日志创建警报

Posted

技术标签:

【中文标题】使用 azure 命令行工具根据自定义日志创建警报【英文标题】:Create alert based on custom logs by using azure command line tool 【发布时间】:2021-02-28 14:32:42 【问题描述】:

我尝试使用 az 命令行工具根据自定义日志查询创建指标警报。到目前为止,我所做的是;

保存自定义日志查询 创建用于发送警报信息的操作组

我没有做的是使用 az monitor metrics alert create 命令创建警报,以便它基于保存的 loq 查询返回的结果数。是否可以使用 az 命令行工具根据自定义日志查询创建指标警报?

【问题讨论】:

【参考方案1】:

自定义日志搜索警报的类型为 microsoft.insights/scheduledqueryrules。因此,您可以使用az monitor scheduled-query 命令集来管理您的计划查询规则(资源)。

要创建计划查询,请使用az monitor scheduled-query create 命令:

az monitor scheduled-query create --condition
                                  --name
                                  --resource-group
                                  --scopes
                                  [--action]
                                  [--description]
                                  [--disabled false, true]
                                  [--evaluation-frequency]
                                  [--location]
                                  [--mad]
                                  [--severity]
                                  [--tags]
                                  [--target-resource-type]
                                  [--window-size]

查看Azure CLI command reference 了解可用参数及其定义。

本文档中描述了创建日志警报的其他一些方法:Create, view, and manage log alerts using Azure Monitor

【讨论】:

【参考方案2】:

如果你知道命令,帮助信息通常非常有用和详细:

az monitor scheduled-query create --help

这是一个基于对我有用的查询的示例。它假定您已经创建了资源组、工作区和操作组:

RESOURCE_GROUP="ResourceGroupName"
WORKSPACE_NAME="LogAnalyticsWorkspaceName"
ACTION_GROUP_NAME="ActionGroupName"

QUERY='AzureDiagnostics
| where Message contains "Connection successful"
| where TimeGenerated > ago(5m)
| order by TimeGenerated desc'

WORKSPACE_ID=$(az monitor log-analytics workspace show \
    --resource-group $RESOURCE_GROUP \
    --workspace-name $WORKSPACE_NAME \
    --query id --out tsv)

az monitor scheduled-query create \
    --name "TestScheduledQuery" \
    --resource-group $RESOURCE_GROUP \
    --scopes $WORKSPACE_ID \
    --description "Test rule" \
    --action $ACTION_GROUP_NAME \
    --evaluation-frequency 5m \
    --mute-actions-duration PT30M \
    --severity 3 \
    --condition "count 'QRY1' > 0" \
    --condition-query QRY1="$QUERY"

这个例子将:

每 5 分钟运行一次 (--evaluation-frequency) 寻找符合过去 5 分钟内生成的约束的新诊断 (QUERY) 如果匹配计数大于零 (--condition): 它将激活警报(发送邮件等,具体取决于--action 中的操作组) 一旦警报触发,它将被静音 30 分钟,这样重复的警报就不会向任何人发送垃圾邮件 (--mute-actions-duration)

无论如何,这些设置中的大多数都是默认设置,为了清楚起见,我只是对它们进行了定义。

【讨论】:

以上是关于使用 azure 命令行工具根据自定义日志创建警报的主要内容,如果未能解决你的问题,请参考以下文章

为从门户创建的 Azure 日志分析警报导出 ARM 模板

Azure 自动解决基于查询的警报的能力

使用Go语言在MacOS创建一个自定义的命令行工具

根据检查文件中的前一个日志行监控警报

Azure 监视器规则的自定义条件不显示预期数据

带有自定义窗口的 Azure 流分析