azure 如何解决appinsight alert中的日期问题?

dpiehjr4  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(135)

我的kusto查询有问题。此kusto查询在警报调用内运行。我尝试通过电子邮件向我们的客户端发送通知。
场景:
我尝试在周六早上7点到13点之间发送消息。(只有周六)但我周日也收到消息。查询下方没有任何内容。我认为这与应用洞察警报有关。

requests 
| extend Customer= trim_end('/', tostring(split(customDimensions.source, '//')[1]))
| extend alarmOK=iif(datetime_diff('minute', now(), timestamp) > 20, 1, 0) 
| extend issaturday=iif(dayofweek(timestamp) == 6d, 1, 0) 
| extend workinghour = hourofday(timestamp) 
| extend
    sendnotify1=iif(workinghour >= 7 and workinghour < 13, 1, 0),
    sendnotify2=iif(hourofday(now()) >= 7 and hourofday(now()) < 13, 1, 0)
| extend alarmmessage = "alert message"
| where timestamp > ago(24h) and Customer == "mycustomer"
| where issaturday == 1
| where workinghour >= 7 and workinghour < 13
| top 1 by timestamp desc
czq61nw1

czq61nw11#

Kusto中的所有日期时间都存储为UTC。
使用datetime_utc_to_local获取本地时区的时间戳,例如:

let timestamp = now();
print datetime_utc_to_local(timestamp, "Australia/Melbourne")

Fiddle
| 打印_0|
| - ------|
| 2023年1月10日上午21时10分08秒|
附言
您的查询可以大大简化。

  • KQL支持布尔数据类型(bool)。
  • KQL支持日期时间和时间跨度算法。

即使出于某种原因,您希望添加一个名为 * issunday * 的列,然后按它进行过滤,也可以像这样轻松地完成:
| extend issaturday = dayofweek(timestamp) == 6d | where issaturday

// Sample data generation. Not part of the solution.
let requests = materialize(
    range i from 1 to 100 step 1 
    | extend timestamp = ago(7d * rand())
);
// Solution starts here
requests 
| where     dayofweek(timestamp) == 6d
        and timestamp % 1d between (7h .. 13h)
        and now() - timestamp > 20m

| 我|时间戳|
| - ------|- ------|
| 五个|2023年1月7日星期一08:37:39.3449345Z|
| 八十|2023年1月7日上午9时7分36.4794478秒|
| 八十三|2023年1月7日上午10时51分19秒|
Fiddle

相关问题