一个Splunk问题...
我发现了一些我认为可以帮助解决此问题的Google热门歌曲。我正在尝试搜索外部搜索/查询返回的所有“行”。
我绝不是Splunk专家,甚至也不是超级用户!
外部查询针对Active Directory执行LDAP搜索,并返回具有特定组成员身份的人员列表(例如:所有域管理员或帐户操作员等)
然后我想针对Windows事件日志搜索返回的每个用户名……并将结果作为一个数据集返回。
我已经钉上LDAP搜索。我已经安装了Windows事件日志搜索功能。我只需要将它们缝合在一起。
如果我在脚本中编写代码,那么我要么:
i)将相关的组成员枚举到一个数组中。对数组中存在的用户运行事件日志查询,例如:使用isin()或contains()之类的语义;要么 ii)枚举组成员并执行foreach()类型的循环。
所以,如何在Splunk中执行#?!@。我尝试使用“搜索”命令和“ foreach”命令,但没有任何乐趣。我什至戏弄了一个查找并尝试了isin(),但无法使它正常工作。
示例LDAP搜索:
| ldapsearch domain="contoso.com" search="(&(objectclass=user)(objectCategory=person)(memberOf=CN=Domain Admins,OU=MyContainer,DC=contoso,DC=com))" attrs="sAMAccountName" basedn="DC=contoso,DC=com" | eval ldapSearchUserName="contoso\\"+lower(sAMAccountName)
事件日志搜索示例:
index="wineventlog" source="WinEventLog:Security" sourcetype="WinEventLog:Security" "LogName=Security" "EventCode=4624" earliest=-1d | rex field=Message ".*Logon Type:\s+(?<LogonType>\d+)" | eval UserName=mvindex(Security_ID, 1) | table UserName
有什么想法,提示或指导吗?
非常感谢
S
答案 0 :(得分:0)
首先,让我尝试澄清一些事情。
Splunk在表中返回结果。行称为“事件”,列称为“字段”。大多数搜索命令一次只能处理一个事件。
foreach
命令遍历单个事件中的字段。使用map
命令来循环事件(这可能很慢)。
Splunk支持嵌套查询。 “内部”查询称为“子搜索”,“外部”查询称为“主搜索”。子搜索包含在方括号[]
中,并且始终先执行。这意味着子搜索的结果将传递到主搜索,而不是相反。
解决问题的一种方法是在子搜索中进行ldapsearch,然后使这些结果成为主搜索的一部分。
index="wineventlog" source="WinEventLog:Security" sourcetype="WinEventLog:Security" "LogName=Security" "EventCode=4624" earliest=-1d
| rex field=Message ".*Logon Type:\s+(?<LogonType>\d+)"
| eval UserName=mvindex(Security_ID, 1)
| search [| ldapsearch domain="contoso.com" search="(&(objectclass=user)(objectCategory=person)(memberOf=CN=Domain Admins,OU=MyContainer,DC=contoso,DC=com))" attrs="sAMAccountName" basedn="DC=contoso,DC=com"
| eval UserName="contoso\\"+lower(sAMAccountName)|fields UserName | format]
| table UserName
在这里,LDAP搜索正在将用户列表提取到名为“ UserName”的字段中。此处使用的字段名称必须与主搜索中使用的字段匹配,否则您将不会获得任何结果。 format
命令将结果放入(UserName=foo OR UserName=bar...)
形式以进行正确搜索。然后将其用于搜索由主搜索产生的用户名列表,这将产生您要搜索的结果。