Splunk eval 函数中无法访问字段的原因有哪些

问题描述 投票:0回答:1

以下是我的 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=* 但这也没有帮助

splunk splunk-query
1个回答
0
投票

您可能会遇到的一些事情:

首先,在评估之前有一个

table
命令。此报告命令将您限制为只能查看命令中列出的字段集。由于
EmailContents.subject
不在您的字段列表中,因此不会保留它以供后续 eval 命令使用。

(我会注意到,最佳实践是您应该在搜索早期使用类似的

fields
流命令来帮助限制和说明您希望在搜索的不同点的结果中使用哪些字段,并且仅在构建显示时在最后使用
table
...这就是说有一个搜索优化,它将用字段替换表格...并且字段会遇到相同的问题,未列出的字段 = 之后不可用).

其次,您的 eval 命令引用一个名为

'EmailContents.Subject'
的字段,但您的示例和描述引用
'EmailContents.subject'
就 Splunk 而言,这是两个不同的字段。 Splunk 中的字段名称始终区分大小写。 (另一方面,字段值...在
search
中不区分大小写,在
where
eval
子句中区分大小写...)

第三...您的示例数据似乎在另一个 JSON 对象中包含 JSON 对象...您的事件的实际边界是什么...您可能需要与拥有载入数据的任何人交谈以确保每个事件都是单独的.. .或者您正在处理各种多值命令。

希望这些笔记能给您一些想法。

© www.soinside.com 2019 - 2024. All rights reserved.