根据其他查询的结果进行Splunk查询

时间:2019-05-15 21:28:45

标签: splunk splunk-query

一个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

1 个答案:

答案 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...)形式以进行正确搜索。然后将其用于搜索由主搜索产生的用户名列表,这将产生您要搜索的结果。