splunk - 加入具有多个条件的 2 个表
问题描述
假设如果我index=endpoints
在搜索栏中键入并按 Enter,我将得到如下所示的结果:
{
"user": Jack,
"os_name": "Windows",
"hostname": "Windows-JACK-01",
"pid": "30219",
"app": "/usr/bin/curl",
"cmdline": "curl google.com",
"epoch": "1503452096",
"type": "processes"
}
. . .
{
"hostname": "Windows-JACK-01",
"pid": "30219",
"app": "/usr/bin/curl",
"epoch": "1503452096",
"ip": "123.123.123.123",
"port": "1234",
"type": "sockets"
}
. . .
同一索引下有两种类型的数据——套接字和进程。我想找到一种方法来组合这两种类型的数据(相关的),以便我可以获得包含所有信息的更丰富的数据。
+-------------------------+-----------------+---------+
| hostname | pid | app | osname | ip | port | etc.... |
+-------------------------+-----------------+---------+
| ... | ... | ... | ... | x | y | ... |
+-------------------------+-----------------+---------+
问题是如果我只是做类似的事情:
index=endpoints type="processes"
| join left=L right=L WHERE L.pid=R.pid [ search index=endpoints type="sockets" ]
大多数时候,我会在 theapp
和 the之间得到错误的映射,pid
因为任何应用程序在可用时都可以分配给相同pid
的应用程序。
我在想也许如果我添加更多条件,它会降低不准确率。例如,而不L.pid=R.pid
只是,也许我可以做L.pid=R.pid AND L.hostname=R.hostname AND ...
我天真的方法是在 WHERE 部分添加更多条件
index=endpoints type="processes"
| join left=L right=L WHERE (L.pid=R.pid AND L.x=R.x AND...)
[ search index=endpoints type="sockets" ]
但是,它似乎不是这样工作的。有什么建议吗?
解决方案
从您的示例查询中,我猜您是一位经验丰富的 SQL 用户,他是 Splunk 的新手,并且没有阅读有关该join
命令的手册。 join
不接受where
条款,也没有left
或right
选项。作为一种最佳实践,应该尽可能避免join
,因为它非常低效。
尝试使用stats
, 代替。我们使用stats
它的分组功能而不是计算统计数据。
index=endpoints (type="processes" OR type="sockets")
| stats values(*) as * by hostname, pid
推荐阅读
- powerbi - Power BI 排序不考虑数字
- spring - spring-boot - 在 DatasourceAutoConfiguration 之前运行的初始化程序?
- c# - OWIN 显示黄屏死机
- reactjs - 我们如何隐藏div的背景内容?
- python - 如何将特定字符串添加或附加到数据框的列?
- angular - Nginx 重定向到 EC2 实例
- python - IndexError:列表索引超出范围 12
- python-2.7 - (python)如何通过范围内的键获取所有值
- asp.net-mvc - Html.Raw 中的 ASP MVC 颜色字符串
- tensorflow - Common variable name acronym for Pytorch or Tensorflow?