斯普伦克 - "grandparent from process and parent process"



在我的数据中,我有进程和父进程。作为一个例子,我可以获得"的进程id和父进程id;calc.exe";。现在我也希望能够获得";祖父母";,即calc.exe的父进程的父进程。

index=data process=calc.exe
| table process_id parent_process_id grand_parent_id

由于我是SPL的新手,所以很难理解如何设计查询。

一个可能的主要问题是进程ID一直被重用-因此,即使您知道产生当前进程的ID,您也可能无法找到产生处理的进程

如果你对此感到满意,并且你有一个相当明确的时间窗口,在这个时间窗口内你认为这一切都发生了。。。像这样的东西应该起作用:

index=ndx sourcetype=srctp process="calc.exe" process_id=* parent_process_id=*
| join parent_process_id
[ | search index=ndx sourcetype=srctp process=* process_id=* parent_process_id=*
| stats count by process_id process parent_process_id
| rename parent_process_id as grandparent_process_id process as spawn_process
| rename process_id as parent_process_id
| fields - count ]
| table process process_id parent_process_id spawn_process grandparent_process_id 

通常,您希望尽可能避免使用join(运行成本很高,而且有一些限制可能是不可接受的……取决于您的环境和用例(。但有时这是得到你想要的东西的最佳方式。

反转搜索(运行在外部查找grandparent_process_id的SPL,以及查找特定process_idparent_process_id的SPL作为内部搜索(可能会更快。

我认识的操作系统都没有";祖父母;这样你就不会一次得到这些信息。您需要找到流程的父级,然后再找到父级的父级。这可以在SPL中使用子搜索。

子搜索首先运行,然后结果成为主搜索的一部分。我们将使用子搜索来查找calc.exe的父级,并将其作为要查找的process_id返回到主搜索。所得到的parent_ process_;祖父母";。

index=data 
[ index=data process=calc.exe
| fields parent_process_id
| rename parent_process_id as process_id
| format ]
| table process_id parent_process_id

这样做的一个副作用是丢失了calc.exe的process_id。

最新更新