我想在splunk中使用查询,提取字段列表,然后使用这些结果字段进一步过滤我后续的splunk查询。我该怎么做?
FORMAT 命令对此特别有用。这是一个过于简单的例子,但应该让你了解它是如何使用的:
首先,设计您的子搜索,为您提供您关心的领域。这是一个功能示例:
|metadata type=hosts index=_internal | table host | format
尝试自己运行此搜索以查看输出结果。
然后我们将其添加为您实际搜索的子搜索:
index=foo sourcetype=bar [|metadata type=hosts index=_internal | table host | format]
这将为您提供来自索引 foo、sourcetype bar 和子搜索中每个主机的事件。
这实际上是一个非常强大的命令,因为您可以使用它来动态设置时间范围以及复杂的布尔过滤器。
一个选项是将数据从第一个搜索传递到下一个,然后您可以进一步过滤结果。希望以下简化的搜索字符串能为您提供有关如何执行此操作的想法...
index=_internal | head 100 | fields host, sourcetype, source | search sourcetype="splunkd_access"
有关更多信息,我建议阅读Splunk 搜索参考
在 Splunk 中,可以过滤/处理第一个 splunk 查询的结果,然后进一步过滤/处理结果以获得所需的输出。
这是Splunk最强大的功能,是Kibana、Tableau等其他可视化工具所缺乏的。
假设您在索引
foo
中有数据并提取姓名、地址等字段。
现在名称/地址可以是直接键值对,或者您需要使用正则表达式或 Splunk 内置功能从事件中提取提取字段.
然后使用 name = "John" 等值进一步过滤,然后 Splunk 搜索将是:
index="foo" | table name, address | where name="John"
子搜索是嵌套在另一个搜索查询中的搜索查询,子搜索的结果用于过滤主搜索,所以:
1- 首先,运行查询以提取要用于过滤后续 Splunk 查询的字段列表:
index=my_index sourcetype=my_sourcetype | table my_field
2-接下来,使用此查询的结果作为输入,使用子搜索过滤后续查询:
index=my_index sourcetype=my_sourcetype [ |
search index=my_index sourcetype=my_sourcetype | table my_field
] | your_search_operations
这里,子搜索用方括号 [|搜索 ...]。子搜索的结果用于过滤主搜索查询。
管道 |从管道之前的命令或操作获取输出(结果),并将其作为输入传递给管道之后的命令或操作。