请求协助编写Sentinel KQL解析Cisco Secure Workload(syslog)查询语句
完善Azure Sentinel中Cisco Secure Workload(原Tetration)日志的KQL查询
问题背景
Azure Sentinel接收来自Cisco Secure Workload(原Tetration)的syslog日志,示例日志如下:
Alert[11]: [WARNING] {"keyId":"SEN::u0mvypu37b9fwimpr4zn168c2ht159n6xdhwtaanm-upgrade_srv_check_in","eventTime":"1684974923000","alertTime":"1684974949559","alertText":"Agent Inactive: centos7","severity":"MEDIUM","tenantId":"000457","type":"SENSOR","alertDetails":"{\"details\":{\"AgentType\":\"ENFORCER\",\"Bios\":\"57D84D56-0000-0000-7E3C-9DD10F02AFD5\",\"CurrentVersion\":\"3.7.1.40-enforcer\",\"DesiredVersion\":\"\",\"HostName\":\"centos7\",\"IP\":\"1.1.1.1 (Gateway IP)\",\"LastConfigFetchAt\":\"2023-05-03 15:47:53 +0000 UTC\",\"Platform\":\"CentOS-7.9\"},\"agent_uuid\":\"u0mvypu37b9fwimpr4zn168c2ht159n6xdhwtaanm\",\"scope_name\":\"MYLAB\",\"scope_id\":\"f5qeybblv5oktpnte4ccrf5pw\",\"vrf_id\":700457}","rootScopeId":"f5qeybblv5oktpnte4ccrf5pw"}
由于无官方解析器,需手动编写KQL提取AlertID、Severity、TenantID、IP、ScopeName等字段,以下是完善后的查询语句:
完整KQL查询
Syslog | where ProcessName contains "Tetration" // 提取日志中的JSON部分(去除前缀"Alert[XX]: [WARNING] ") | extend JsonPayload = extract(@"^\w+\[\d+\]: \[\w+\] (.*)$", 1, SyslogMessage) // 将JSON字符串解析为动态对象 | extend ParsedPayload = parse_json(JsonPayload) // 解析嵌套的alertDetails字段(本身是转义的JSON字符串) | extend ParsedAlertDetails = parse_json(ParsedPayload.alertDetails) // 提取目标字段 | extend AlertID = ParsedPayload.keyId | extend Severity = ParsedPayload.severity | extend TenantID = ParsedPayload.tenantId | extend IP = ParsedAlertDetails.details.IP | extend ScopeName = ParsedAlertDetails.scope_name // 可选:保留需要的字段,过滤中间解析字段 | project SyslogMessage, AlertID, Severity, TenantID, IP, ScopeName
说明
- 提取JSON部分:使用
extract函数匹配日志前缀,捕获后面完整的JSON字符串。 - 解析JSON:优先使用
parse_json而非extractjson,因为parse_json更适合处理完整JSON结构,能直接将字符串转为可访问的动态对象,后续提取字段更直观。 - 嵌套字段处理:
alertDetails字段内部是转义后的JSON字符串,需要再次用parse_json解析,才能获取其中的IP、scope_name等嵌套字段。
内容的提问来源于stack exchange,提问作者user21962463
相关产品推荐
相关产品推荐

