使用 Lookup 从单个字段 CSV 文件进行搜索

Search using Lookup from a single field CSV file

我有一个必须监控的用户名列表,而且这个列表每天都在增加。我阅读了 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(不正确)

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

在查找文件中,字段名称是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")

哪个可能更适合你的数据。