假设如果我键入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" ]大多数情况下,我会得到错误的app和pid之间的映射,因为任何应用程序都可以在pid可用时分配给它。
我在想,如果我添加更多的条件,可能会减少错误率。例如,也许我可以使用L.pid=R.pid AND L.hostname=R.hostname AND ...,而不是只使用L.pid=R.pid
我的天真方法是在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" ]然而,这似乎不是它的工作方式。有什么建议吗?
发布于 2020-10-28 21:04:58
从您的示例查询中,我猜您是一个经验丰富的SQL用户,是Splunk的新手,没有读过关于join命令的手册。join不接受where子句,也没有left或right选项。作为最佳实践,应该尽可能避免使用join,因为它的效率非常低。
请尝试使用stats。我们将stats用于分组功能,而不是计算统计数据。
index=endpoints (type="processes" OR type="sockets")
| stats values(*) as * by hostname, pidhttps://stackoverflow.com/questions/64566784
复制相似问题