0

我有一个带有诊断设置的 DataFactory 激活并将日志发送到 Log Analytics 工作区。

如果事件触发器在上午 9 点之后没有运行,我想创建一个仅触发一次的警报。

我认为一些这样的查询:

let StartTime =startofday(now());
let EndTime =now();
let CheckHour = 9;
ADFTriggerRun
| where ResourceId contains toupper("DataFactory_Name")
| where TriggerName == "Trigger_Name"
| where TimeGenerated > StartTime and TimeGenerated < EndTime
| extend Hour = datetime_part("hour", TimeGenerated)
| where Hour < CheckHour

但是,如果我将以下设置设置为警报,我会发现一些问题:

  • 结果数小于 0
  • 周期 = 30 分钟
  • 频率 = 30 分钟

(如果触发器正确运行)警报将在上午 9 点之前触发 18 次。

(如果触发器没有运行)警报将在一天内触发 48 次。

是否有一些查询可以避免这种情况?也许有一些条件

4

1 回答 1

0

没有这样的解决方案可以直接解决这个问题。

我建议您可以设置 2 个警报:

警报 1:如果触发器全天未运行,则发送警报。您可以在您的问题中使用您的查询,只需设置Period = 1440 minutes, Frequency = 1440 minutes, Number of results less than 0。然后,如果触发器根本没有运行,它只会发送一封警报电子邮件。

警报 2:通过添加iff() 函数使用以下查询:

let StartTime =startofday(now());
let EndTime =now();
let CheckHour = 9;
ADFTriggerRun
| where ResourceId contains toupper("DataFactory_Name")
| where TriggerName == "trigger1"
| where TimeGenerated > StartTime and TimeGenerated < EndTime
| extend Hour = datetime_part("hour", TimeGenerated)
| extend isFailed = iff(Hour < CheckHour, "Success","Failed")
| where isFailed == "Failed"

然后设置Period = 30 minutes, Frequency = 30 minutes, Number of results Equal to 1. 通过使用此查询/设置,如果触发器在上午 9 点之后运行,您最多会收到 2 封电子邮件警报(例如,如果触发器在上午 10:07 运行,并且警报在上午 10:20 / 10:50 扫描,则仅在这 2次,它会发送警报;如果触发器在上午 9 点之前运行,则不会发送警报)。

于 2021-03-23T09:24:51.550 回答