从单个字段CSV文件中使用“查找”进行搜索

时间:2020-07-02 21:34:59

标签: splunk splunk-query

我有一个必须监视的用户名列表,并且该列表每天都在增长。我阅读了Splunk文档,看来查找是处理这种情况的最佳方法。

我的查询目标是利用查找功能并打印出列表中所有这些用户的所有下载事件。

示例日志

index=proxy123 activity="download"

{
"machine":"1.1.1.1",
"username":"ABC@xyz.com",
"activity":"download"
}

{
"machine":"2.2.2.2",
"username":"ASDF@xyz.com",
"activity":"download"
}

{
"machine":"3.3.3.3",
"username":"GGG@xyz.com",
"activity":"download"
}

样本查找(username.csv)

users
ABC@xyz.com
ASDF@xyz.com
BBB@xyz.com

当前查询:

index=proxy123 activity="download" | lookup username.csv users OUTPUT users | where not isnull(users)

结果:0(不正确)

我可能无法正确理解查询。有人可以纠正我并教给我正确的方法吗?

1 个答案:

答案 0 :(得分:3)

在查找文件中,字段的名称为users,而在情况下,字段名称为username。幸运的是,lookup命令具有一种在查找期间重命名字段的机制。尝试以下

index=proxy123 activity="download" | lookup username.csv users AS username OUTPUT users | where  isnotnull(users)

现在,根据索引中包含的数据量以及与CSV中的用户名不匹配时要丢弃的数据量,您可以尝试其他方法,例如,使用子搜索。

index=proxy123 activity="download" [ | inputlookup username.csv | rename users AS username | return username ]

在子搜索([]中的位)这里发生的是,在这种情况下,子搜索将首先扩展到(username="ABC@xyz.com" OR username="ASDF@xyz.com" OR username="BBB@xyz.com")。这样您的主要搜索就会变成

index=proxy123 activity="download" (username="ABC@xyz.com" OR username="ASDF@xyz.com" OR username="BBB@xyz.com")

这可能比返回索引中的所有数据然后丢弃与用户列表不匹配的任何内容更为有效。

此方法假定您首先提取了username字段。如果没有,则可以尝试以下方法。

index=proxy123 activity="download" [ | inputlookup username.csv | rename users AS search | format ]

此扩展搜索将是

index=proxy123 activity="download" "ABC@xyz.com" OR "ASDF@xyz.com" OR "BBB@xyz.com")

这可能更适合您的数据。