Kusto-使用解析运算符将字符串字段提取到新列中

问题描述

我的kusto表中有一列,其中包含以下格式的日志消息

msg1

2020-10-29T12:57:08+00:00 dc1-k30-asw05.nw.domain.com cron: :- addNeighbor: Created neighbor ac:1f:6b:8b:09:99 on Vlan100

msg2

2020-10-29T15:55:20+00:00 dc1-k12-asw30.domain.com cron: :- validatePortSpeed: Unable to validate speed for port 100000000005c. Not supported by platform

现在,我想从中提取一些子字符串到单独的列中,我感兴趣的子字符串是时间戳值(2020-11-02T10:31:21+00:00),这基本上是行的开始,program在这种情况下发出的日志是cron,最后是实际的日志消息。因此,我使用parse运算符来执行此操作,而不是使用多个extract并多次评估模式。

parse kind = regex message with @".*?" syslogTime:string @"\s+.*domain.com .*?" program:string @": " msg

查询产生以下输出

"syslogTime": 2020-10-29T12:57:08+00:00,"program":   cron: :- addNeighbor,"msg": Created neighbor ac:1f:6b:8b:09:99 on Vlan100,
"syslogTime": 2020-10-29T15:55:20+00:00,"program":  cron: :- validatePortSpeed,"msg": Unable to validate speed for port 100000000005c. Not supported by platform,

如上所示,第一个字段已正确解析,但是对于第二列program匹配的值不正确,即使我使用了a,正则表达式引擎也会进行贪心匹配直到第二个:非贪婪量词@"\s+.*domain.com .*?"

对于解析查询,我还尝试使用不贪心标记U,但消息的最后部分没有被捕获。

parse kind = regex flags=U message with @".*" syslogTime:string @"\s+.*domain.com.*" program:string @": " msg

我得到的输出

"syslogTime": 2020-11-02T08:47:35+00:00,"program":  cron,"msg": 
"syslogTime": 2020-10-29T15:53:36+00:00,"msg": 

对于第二列,即program,我想匹配到第一列“:”。我已经尝试了上述查询的多种变体,但没有一个产生预期的输出。所以我不确定我在这里想念什么。

解决方法

我能够通过将parse表达式修改为以下内容来解决此问题。

parse kind = regex flags=U message with  @".*" syslogTime:string @"\s+.*domain.com.*" program:string  @": " msg @"$"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...