以下是我的 Splunk 查询。
index=o365 operation=Labels
| table ProcessName Operations MessageTitle Application
| eval MessageTitle = if(isnull('MessageTitle') OR 'MessageTitle' == "" AND Application=="Outlook", 'EmailContents.Subject', 'MessageTitle')
以下是搜索结果:
{
{
Application:Excel
ProcessName:Excel
Operations:LabelUpdate
MessageTitle:Test
}
{
Application:Outlook
ProcessName:
Operations:LabelUpdate
EmailContents:{
from:person3
subject: test mail
to: person1
}
}
.
.
.
如果应用程序字段的值为 Outlook,则我尝试使用 eval 函数将字段 MessageTitle 的值设置为字段 EmailContents.subject 的值,因为 EmailContents 不包含字段 MessageTitle。该问题是由于某种原因无法在 eval 中访问 EmailContents.subject。但是,我注意到,如果表中 ProcessName 的值为 null,我可以使用 eval 函数将 ProcessName 字段的值设置为 Application 字段的值,使用与上面代码中所示相同的方法。请让我知道可能导致此问题的原因以及如何解决它。
我尝试使用 case 而不是 if 语句,但这没有帮助。我还添加了 host=* 和 source=* 但这也没有帮助
您可能会遇到的一些事情:
table
命令。此报告命令将您限制为只能查看命令中列出的字段集。由于 EmailContents.subject
不在您的字段列表中,因此不会保留它以供后续 eval 命令使用。
fields
流命令来帮助限制和说明您希望在搜索的不同点的结果中使用哪些字段,并且仅在构建显示时在最后使用 table
...这就是说有一个搜索优化,它将用字段替换表格...并且字段会遇到相同的问题,未列出的字段 = 之后不可用).
其次,您的 eval 命令引用一个名为
'EmailContents.Subject'
的字段,但您的示例和描述引用 'EmailContents.subject'
就 Splunk 而言,这是两个不同的字段。 Splunk 中的字段名称始终区分大小写。 (另一方面,字段值...在 search
中不区分大小写,在 where
和 eval
子句中区分大小写...)
第三...您的示例数据似乎在另一个 JSON 对象中包含 JSON 对象...您的事件的实际边界是什么...您可能需要与拥有载入数据的任何人交谈以确保每个事件都是单独的.. .或者您正在处理各种多值命令。
希望这些笔记能给您一些想法。