在 Splunk 中设置 table 字段的差异

Set difference of a table field in Splunk

通过搜索我组成了一个 table,我们称它为 T1,由两列组成 table name, sourcetype

现在我需要创建一个静态代码生成 table,将其命名为 T2,其中包含上述 table 的所有预期值T1,硬编码。 第一个问题:我怎么能?

第二题: 结果,我需要生成一个 table T3 等于:T2 - T1,基本上是第一个字段的逻辑集差异,它回答了业务问题“我想知道基于T2的T1中缺少哪些记录

我是 Splunk 及其查询语言的新手,我尝试使用 set diffeval 来创建静态数据,但我没能创建我想要的逻辑全部.

你能指出这个任务的正确逻辑实现吗?

我可以流利地使用 SQL 和 Python 编写脚本,是否有任何概念可以重用以更加熟悉这种查询语言?

愚蠢的图形示例:

T1

姓名 来源类型
service_1 接受

T2

名字 来源类型
service_1 接受
service_2 接受

T3

姓名 来源类型
service_2 接受

对于问题 2,您可以使用 stats 命令并搜索只有一个计数的字段(因此不常见)。这就像一个分组依据。

|stats count by name sourcetype

你搜索count=1后有差值

|search count=1

这为事件制作了一些测试数据:

| makeresults count=6
| streamstats count
| eval name="service_".tostring(count)
| eval sourcetype="acpt"
| fields - count _time
name sourcetype
service_1 acpt
service_2 acpt
service_3 acpt
service_4 acpt
service_5 acpt
service_6 acpt

这会列出要排除的事件:

| makeresults count=2
| streamstats count
| eval name="service_".tostring(count+2)
| eval sourcetype="acpt"
| fields - count _time
name sourcetype
service_3 acpt
service_4 acpt

这会打印出第一组中不在第二组中的所有项目:

| makeresults count=6
| streamstats count
| eval name="service_".tostring(count)
| eval sourcetype="acpt"
| fields - count _time
| search NOT [
  | makeresults count=2
  | streamstats count
  | eval name="service_".tostring(count+2)
  | eval sourcetype="acpt"
  | fields - count _time
]
name sourcetype
service_1 acpt
service_2 acpt
service_5 acpt
service_6 acpt