Sysdig 工作原理

2020-03-26  本文已影响0人  阿基米德来了

sysdig工作原理

Sysdig架构

markdown-img-paste-20200101170710286.png

具体实现

首先,sysdig-probe 的这个驱动利用了内核组件tracepoint 捕获在内核层面的事件。通过Tracepoint,可以放置一个能够被内核中特殊函数调用的处理程序"handler"。现在,sysdig 在进入、退出、进程调度这些事件的系统调用上注册了tracepoints,也即Sysdig-probe 的工作内容。Sysdig-probe对这些事件的处理程序"handler"极其简单,它仅仅复制了事件的详细信息到一个共享缓存区中,并对其编码以供后面使用。让"handler"如此简单的一个重要原因就是性能考虑,因为原始的内核执行程序会被“冻结”直到"handler"返回。
(tracepoint 提供了一个钩子去调用一个函数(称为probe,也即探针)。当一个tracepoint 被probe 连接上时便启动了,每次tracepoint 被执行的时候,probe 这个函数便会在调用方的执行上下文中被调用。probe 结束执行,返回给调用者,从tracepoint 位置继续。)

"event buffer"使用了内存映射的方式映射到用户空间,因此它能够在没有进行任何复制操作的情况下被访问,最小化了CPU使用率和减少缓存丢失的情况。"libscap"和"libsinsp"这两个库提供了读、编码以及解析事件的功能。具体来说,"libscap"提供了跟踪文件管理功能,而"libsinsp"包含了复杂的状态跟踪功能(例如,可以使用文件名而不是FD),以及过滤、事件解码、运行"chisels"工具的Lua JIT编译器等。
最后,sysdig 对这些库进行了简单的包装。

当"event buffer"填满(即sysdig,libsinsp,libscap 来不及处理来自内核的事件流)的时候,sysdig-probe 便会开始丢弃即将到来的事件。这种情况下可能会丢失部分跟踪信息,但机器或者其他进程的性能不会受其影响。这意味着,sysdig很适合用在生产环境上。

Linux系统调用相关

sysdig基于系统调用工作。系统调用,指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态运行。如设备IO操作或者进程间通信
简单地说,系统调用是程序与操作系统交互的主要方式。系统调用接口包含了若干个操作系统赋予给运行在其上的应用程序使用的函数。这些函数允许打开文件、创建网络连接、从文件中读写等操作,可以说机器上大部分的事件都要经过系统调用。


想要掌握sysdig的使用,我们需要掌握以下系统调用。

clone
execve
chdir
open/creat
connect
accept
read/write
unlink/rename
brk/mmap/munmap
select/poll
kill

参考资料:
https://sysdig.com/blog/sysdig-vs-dtrace-vs-strace-a-technical-discussion/
https://www.kernel.org/doc/Documentation/trace/tracepoints.txt
https://sysdig.com/blog/fascinating-world-linux-system-calls/

上一篇下一篇

猜你喜欢

热点阅读