我在Azure Log Analytics中有一个记录消息的表。 实际上并没有很多不同的消息,但是每个消息中都有一个可变的部分,例如用户ID或时间戳。 我需要计算按一个小时间隔分组的不同消息类型,而忽略每条消息中的变量元素(在这种情况下为UUID和时间戳)。 我不知道所有消息类型。 我别无选择,我被迫使用这张桌子。
示例数据:
timestamp | message
----------|--------------------------------------------------------
| Message type A for user id 993215f6-c42a-4957-bd55-78d71306a8d0
| Message type A for user id 60e7d02c-770a-4641-b379-6bd33fcd563c
| Message type A for user id 5bf7646c-092b-4e20-ba43-de7fe01010ea
| Another message type containing timestamp hh:mm:ss
| Another message type containing timestamp hh:mm:ss
| Another message type containing timestamp hh:mm:ss
| Type C message <variable_string>
所需的输出:
timestamp | distinct_message | count
----------------------------|--------------------------------------------|------
10/2/2019, 10:00:00.000 AM | Message type A for user id | 25
10/2/2019, 10:00:00.000 AM | Another message type containing timestamp | 13
10/2/2019, 10:00:00.000 AM | Type C message | 0
10/2/2019, 11:00:00.000 AM | Message type A for user id | 4
10/2/2019, 11:00:00.000 AM | Another message type containing timestamp | 6
10/2/2019, 11:00:00.000 AM | Type C message | 2
这是我设法创建的,但是我对KQL的了解非常有限。
let regex_uid = "[[:xdigit:]]+-[[:xdigit:]]+-[[:xdigit:]]+-[[:xdigit:]]+-[[:xdigit:]]+";
traces
| where timestamp > ago(1d)
| extend message = replace(regex_uid, "", message)
| extend message = replace("[0-9]+", "", message)
| extend message = iif(message startswith "Type C message", "Type C message", message )
| project timestamp, message, operation_Name
| summarize count(operation_Name) by bin(timestamp, 1h), message
还有更好的方法吗?
答案 0 :(得分:1)
您可以考虑使用的另一种选择是使用reduce
运算符:https://docs.microsoft.com/en-us/azure/kusto/query/reduceoperator
输出将与您的问题不同。但是如果我正确理解您的意图,它会遵循相同的原则。