如何用Splunk正则将PrivilegeList权限提取为单个分组值
在Splunk中提取PrivilegeList的单个权限值
问题场景
你有如下日志数据需要在Splunk中提取权限字段:
<Data Name="PrivilegeList">SeTcbPrivilege SeSecurityPrivilege SeTakeOwnershipPrivilege SeLoadDriverPrivilege SeBackupPrivilege SeRestorePrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeEnableDelegationPrivilege SeImpersonatePrivilege</Data>
当前正则将所有权限提取为单个字段值,需要拆分成每个权限单独作为Privilege字段的条目。
解决方案
方法1:先提取完整列表再拆分(搜索时处理)
先通过正则提取整个权限列表到临时字段:
<Data Name="PrivilegeList">(?<PrivilegeList>[^<]+)</Data>这个正则会匹配
<Data Name="PrivilegeList">和</Data>之间的所有内容,存入PrivilegeList字段。使用Splunk的
makemv命令按空格拆分多值:index=your_index sourcetype=your_sourcetype | rex "<Data Name=\"PrivilegeList\">(?<PrivilegeList>[^<]+)</Data>" | makemv delim=" " PrivilegeList | rename PrivilegeList as Privilege执行后,
Privilege会成为多值字段,每个权限单独一条。
方法2:直接配置多值字段提取(全局匹配)
如果要在数据源层面自动提取多值字段,可修改props.conf(需要Splunk管理员权限):
[你的数据源类型] EXTRACT-privileges = (?<=<Data Name="PrivilegeList">)(?<Privilege>\w+Privilege)(?=.*</Data>) MV_ADD = true
- 正则部分:
(?<=<Data Name="PrivilegeList">)是正向预查,确保在目标标签内;(?<Privilege>\w+Privilege)匹配所有以Privilege结尾的权限名;(?=.*</Data>)确保匹配内容在标签闭合前。 MV_ADD = true会让每个匹配结果都添加到Privilege字段,自动形成多值。
正则测试提示
在Regex101中测试时,开启全局匹配(g标志),就能看到每个权限的单独匹配结果,和Splunk中多值字段的效果一致。
内容的提问来源于stack exchange,提问作者dzmon
相关产品推荐
相关产品推荐

