KQL - 用 | 编写解析器解析种类=正则表达式运算符

问题描述 投票:0回答:1

我正在尝试为 FortiAnalyzer 制作一个解析器。我收到下一种格式的日志(来自 Fortinet 文档的示例):2020-05-12 17:01:16 log_id=0001010018 type=event subtype=system pri=information desc="User login/logout successful" user="admin" userfrom ="JSON(10.100.55.254)" msg="用户'admin',配置文件'Super_User' 从 JSON(10.100.55.254) 注销" session_id=5108 adminprof="Super_User"

所以变量=值。大约有 30-40 个变量,它们的顺序可能会有所不同。

所以我用下一种方式解析信息: | parse kind=regex (name_of_my_column) with * "log_id" * "=" Log_ID: string "type=" Type: string "subtype=" Subtype: string 等等……当我在一个查询中写 17 个变量时,它给出我的错误: 解析:正则表达式模式超出了允许的最大匹配组。实际 = 17,限制 = 16 当我开始新行时 | parse kind=regex 函数,前一个变量 (#16) 包含变量 #16 之后的所有信息 变量 #17 具有正确的信息。 end of first query with | parse kind=regex and start of a second information in variable #16 and #17 有人可以提出建议吗,我应该在查询中添加什么才能以正确的方式查看结果? 我也尝试使用 |extend 函数,但我认为,在我的情况下这不是正确的方法,因为变量可以在日志中的不同位置。 将感谢任何建议。

kql azure-log-analytics azure-sentinel fortigate
1个回答
0
投票

您可以使用

parse-kv
运算符.

例如:

print input = ```2020-05-12 17:01:16 log_id=0001010018 type=event subtype=system pri=information desc="User login/logout successful" user="admin" userfrom="JSON(10.100.55.254)" msg="user 'admin' with profile 'Super_User' logout from JSON(10.100.55.254)" session_id=5108 adminprof="Super_User"```
| parse-kv input as (log_id:string, type:string, subtype:string, pri:string, ['desc']:string, user:string, userfrom:string, msg:string, session_id:long, adminprof:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"')
| project-away input
log_id 类型 亚型 描述 用户 用户来自 消息 session_id 管理员教授
0001010018 活动 系统 资讯 用户登录/注销成功 管理员 JSON(10.100.55.254) 配置文件为“Super_User”的用户“admin”从 JSON(10.100.55.254) 注销 5108 超级用户
© www.soinside.com 2019 - 2024. All rights reserved.