提问人:DaveC 提问时间:6/16/2023 最后编辑:DaveC 更新时间:6/16/2023 访问量:191
KQL Azure Log Analytics 无法从正则表达式分析日期时间
KQL Azure Log Analytics can't parse datetime from regex expression
问:
给定一个包含列“RawData”和“_ResourceId”(即 Azure ARM ID)的表,我想从服务器日志文件中分析字符串,例如:
"09:08:52,198 INFO [web.org.perfmon4j.extras.jbossweb7.P....."
并将部分字符串提取到我的自定义表中以供以后分析。
Azure Log Analytics 编辑器中的 Kusto KQL 查询:The Kusto KQL query in the Azure Log Analytics editor:
suggest_CL
| project dt = todatetime(extract("^([\\:0-9]+)\\,([0-9]+)", 1,
"09:08:52,198 INFO [web.org.perfmon4j.extras.jbossweb7.P")),
dtstr = extract("^([\\:0-9]+)\\,([0-9]+)", 1,
"09:08:52,198 INFO [web.org.perfmon4j.extras.jbossweb7.P"),
statictimestr = "09:09:52",
statictime = todatetime("09:09:52"),
_ResourceId, RawData
其中 是自定义表suggest_CL
该列显示正则表达式有效并返回正确的时间值。dtstr
我包括一些测试字符串:
statictimestr = "09:09:52",
这是一个简单的仅限时间的字符串。该文档表示,如果不包括该日期,它将使用今天的日期。
statictime = todatetime("09:09:52"),
这是上面的字符串转换为datetime
输出为
dt [UTC] | DTSTR | 静态时间str | 静态时间 [UTC] |
---|---|---|---|
09:08:52 | 09:09:52 | 2023-06-15T09:09:52Z |
并且该列为空,表示表达式的计算结果为 null。该列被记录为 ,因此对字符串文本的仅时间表达式的解析是成功的。输出节目。dt
todatetime(...)
statictime
[UTC]
isnull(todatetime(...))
true
表达式的输出未正确解析。extract(regex)
另一个 SO 问题的回答是格式不正确。这里似乎还有更多的问题,比如将函数表达式作为参数处理的错误。在另一个问题中表达了这种可能性。todatetime()
有什么想法吗?
答:
todatetime()
常量值和计算值具有不同的实现 - 两者不支持相同的格式集。此处记录了官方支持的格式集(适用于两者)。
这就是为什么对于不受支持的格式,当您提供常量值时,它可能对您有用,但其他情况可能不适用。
对于不支持的格式,您可以尝试的一件事是使用 parse
运算符解析单独的日期部分,然后使用 make_datetime()
函数从中创建一个日期时间值。
例如:
print input = "09:08:52,198 INFO [web.org.perfmon4j.extras.jbossweb7.P....."
| parse input with hours:int ":" minutes:int ":" seconds:double "," *
| extend dt = make_datetime(datetime_part("Year", now()), datetime_part("Month", now()), datetime_part("Day", now()), hours, minutes, seconds)
评论