KQL Azure Log Analytics 无法从正则表达式分析日期时间

KQL Azure Log Analytics can't parse datetime from regex expression

提问人:DaveC 提问时间:6/16/2023 最后编辑:DaveC 更新时间:6/16/2023 访问量:191

问:

给定一个包含列“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。该列被记录为 ,因此对字符串文本的仅时间表达式的解析是成功的。输出节目。dttodatetime(...)statictime[UTC]isnull(todatetime(...))true

表达式的输出未正确解析。extract(regex)

另一个 SO 问题的回答是格式不正确。这里似乎还有更多的问题,比如将函数表达式作为参数处理的错误。在另一个问题中表达了这种可能性。todatetime()

有什么想法吗?

azure datetime azure-data-explorer kql date-conversion

评论


答:

0赞 Yoni L. 6/16/2023 #1

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)