1

完全披露,我是 Splunk 的新手,所以我可能会错误地解释我的问题。

我有两个数据源,并获得了分别从它们中提取数据的查询。我正在尝试将这些数据连接在一起,以便我可以创建某种类型的图表,但我不确定这将是一个连接/搜索等。

我的初始查询如下:

这使我可以按发件人地址搜索邮件日志,并显示所有带有 的电子邮件bcSendAction=1,即成功发送。

index=mail sourcetype=barracuda [search index=mail sourcetype=barracuda bcSender="someemail@domain.com" | table bcMsgId] bcSendAction=1

本次搜索结果如下:

在此处输入图像描述

现在,我的另一个搜索是显示特定时间段内所有发件人电子邮件地址的日志。我想在第一次搜索中使用这个结果(电子邮件值),这样我就不必对 进行硬编码bcSender,而是让它使用来自其他来源的结果。

// Returns an email address
index=mail sourcetype=sendmail_syslog *@sfdc.net |  
rex field=from "<(?<from>.*)>" | 
table from | dedup from

我能够解析日志并仅提取我想要用于插入我的第一次搜索的电子邮件地址。

我关注了一些电子邮件和教程,但是我看到的很多连接只使用了两个不同的源/数据集,并且没有search像我在第一个查询中那样使用。

我的尝试是这样的:

index=mail sourcetype=sendmail_syslog *@sfdc.net 
|  rex field=from "<(?<from>.*)>" 
| table from | dedup from 
|  join from 
    [search index=mail sourcetype=barracuda [search index=mail sourcetype=barracuda bcSender=from | table  bcMsgId] bcSendAction=1]

我不知道我是否正确引用了第一个结果集中的电子邮件。有人可以为我指出如何进行此搜索的正确方向吗?

4

2 回答 2

2

如果我正确理解您的要求,那么您需要 3 个步骤:

  1. 从中获取发件人地址index=mail sourcetype=sendmail_syslog
  2. 使用这些发件人地址从index=mail sourcetype=barracuda
  3. 使用这些 messageID 最终获得您正在寻找的事件

这听起来像您需要在另一个子搜索(用于获取 messageID)中进行子搜索(用于获取发件人地址),这意味着您自己的尝试已经指向正确的方向。

尝试以下方式:

index=mail sourcetype=barracuda bcSendAction=1
  [ search
    index=mail sourcetype=barracuda
      [ search
        index=mail sourcetype=sendmail_syslog *@sfdc.net 
        | rex field=from "<(?<bcSender>.*)>" 
        | stats count by bcSender
        | fields bcSender
        | format
      ]
    | stats count by bcMsgId
    | fields bcMsgId
    | format
  ]

如果没有您的数据,我无法真正验证它,但我会尝试解释它应该做什么。让我们从最里面的子搜索开始。

  • 第 4 行开始最里面的子搜索
  • 第 5 行选择您从中生成地址列表的事件
  • 第 6 行将地址直接提取到字段中bcSender。(我们可以先将它提取到字段中from,然后重命名它,但这更直接。)我们需要字段名bcSender用于外部搜索。
  • 第 7 行是 bcSender 进行重复数据删除的另一种方法,同时减少了需要从索引器发送回搜索头的数据量(如果您有分布式环境)。
  • 第 8 行去掉了我们不需要的所有字段。以下格式命令会出现问题。
  • 第 9 行以某种方式将结果传递回封闭搜索,以便它可以用作搜索字符串的一部分。
  • 当然,第 10 行关闭了最里面的子搜索。

现在让我们看一下外部子搜索。

  • 第 2 行开始子搜索。
  • 第 3 行选择我们可以从中获取 messageID 的事件。当然,我们刚刚讨论过的封闭子搜索增强了这一点。
  • 第 11 行再次是对 messageID 进行重复数据删除的一种方法。
  • 第 12 行再次将内容限制在我们需要的字段中。
  • 第 13 行将找到的 messageID 传递给最外层(主)搜索,使它们成为搜索字符串的一部分。
  • 您已经知道,第 14 行关闭了子搜索。

最外层的搜索:

  • 第 1 行选择您要定位的数据,并通过子搜索传递给它的内容进行扩充。
于 2020-09-15T21:06:39.403 回答
0

一侧join是单个字段表明它是子搜索的良好候选者。子搜索首先运行,然后它们的结果成为主搜索的一部分。

index=mail sourcetype=barracuda bcSendAction=1 
[ search index=mail sourcetype=sendmail_syslog *@sfdc.net 
  | rex field=from "<(?<from>.*)>" 
  | fields from | rename from as bcSender | format ] 

重要的是子搜索的结果包含主搜索中存在的字段。这就是我使用rename.

子搜索运行后,您将获得与此等效的搜索:

index=mail sourcetype=barracuda bcSendAction=1 (bcSender="someemail@domain.com" OR bcSender="anotheremail@domain.com")
于 2020-09-15T16:51:27.970 回答