Azure Sentinel中原始Syslog事件解析问题求助
解决Azure Sentinel中SyslogMessage的结构化解析问题
以下是几种可行的方法,帮你把类JSON格式的SyslogMessage转换成可直接提取字段的结构化数据:
1. 清理提取内容+容错解析
正则提取后可能残留空格、转义错误或不合法字符,先清理再尝试解析,避免查询报错:
// 替换为你的实际Syslog表名 Syslog_CL // 提取大括号内的类JSON内容,根据实际前缀调整正则表达式 | extend CleanedJson = extract(@"^\w+\s+\d+\s+\d+:\d+:\d+\s+(.*)$", 1, SyslogMessage) // 去除前后无关字符,修复单引号转双引号(如果存在此类格式问题) | extend FixedJson = replace(@"'", "\"", trim(" \t\n\r", CleanedJson)) // 用try_parse_json避免解析失败导致整条数据丢失 | extend ParsedData = try_parse_json(FixedJson) // 过滤出解析成功的条目,提取目标字段 | where isnotnull(ParsedData) | extend EventID = ParsedData.event_id, User = ParsedData.user_name | project TimeStamp, Computer, EventID, User
2. 修复不标准JSON格式
很多类JSON存在键名未加双引号的问题,用正则批量补全后再解析:
Syslog_CL | extend RawJsonStr = extract(@"\{(.*)\}", 1, SyslogMessage) // 给未加双引号的键名添加双引号 | extend ValidJsonStr = replace(@"(?<!\")(\w+)(?=:)", "\"$1\"", RawJsonStr) | extend StructuredData = parse_json(ValidJsonStr) | extend SourceIP = StructuredData.src_ip, DestinationIP = StructuredData.dst_ip
3. 用parse运算符直接拆分固定结构
如果SyslogMessage的前缀和内部字段位置固定,无需转JSON,直接用parse拆分:
Syslog_CL | parse SyslogMessage with "Jan " Day:int " " Time:datetime " " ComputerName " " AppName " {"event_id":" " EventID:int ", \"user_name\":\"" User:string "\", \"src_ip\":\"" SourceIP:string "\"}" | project TimeStamp, ComputerName, EventID, User, SourceIP
4. 摄入阶段提前结构化(长期优化方案)
如果这类Syslog是持续摄入的,建议在数据采集阶段配置解析规则:
- 在Log Analytics工作区的数据源 > Syslog中,针对对应Facility配置自定义字段提取
- 或者使用Azure Sentinel的数据连接器中的高级解析选项,提前将SyslogMessage拆分为结构化字段,减少查询时的计算开销
内容的提问来源于stack exchange,提问作者mfalde
相关产品推荐
相关产品推荐

