Chisels
Sysdig 的 chisels 是通过分析sysdig 事件数据流去完成特定动作的小脚本。在Sysdig中,系统事件events 被高效地呈现在了用户空间,所以脚本能够直接被应用到处理事件上。好处如下:
- 能使用普遍被使用的而不是定制的语言。sysdig的chisels 使用 Lua 脚本语言。
- Chisels 能很方便地使用众多的Lua库
- Chisels 在实时系统上工作情况良好,但也能和捕获的文件一起来完成离线的分析工作。
使用
- 列出可所有使用的chisels
$ sysdig -cl
- 输出某个chisel 的详细描述和参数列表,使用 -i 命令行选项
$ sysdig -i spy_ip
- 运行某个chisel 工具,使用 -c 选项
$ sysdig -c topfiles_bytes
- chisel工具需要参数时,直接在后面补充
$ sysdig -c spy_ip 192.168.1.157
- 能够同时运行多个chisel工具
$ sysdig -c stding -c stdout proc.name=cat
- chisels 可以和过滤器filters 结合使用
# 不需要对 /dev 的访问
$ sysdig -c topfiles_bytes "not fd.name contains /dev"
# 只包含 /root 路径的访问
$ sysdig -c topfiles_bytes "fd.name contains /root"
# 进程 vi 访问的文件
$ sysdig -c topfiles_bytes "proc.name=vi"
# 用户 loris 访问的文件
$ sysdig -c topfiles_bytes "user.name=loris"
注意:
使用filters时,我们需要注意它是作为sysdig的还是chisels的参数传入
$ sysdig -i lsof
...
Args:
[filter] filter - A sysdig-like filter expression that allows r
estricting the FD list. E.g. 'proc.name=foo and fd.name contain
s /etc'.
当作为chisels参数传入时,如上面的lsof,当有多个筛选条件,如sysdig -c lsof "'user.name=phil or proc.name=sshd'",这里是需要双重引号的。
当作为sysdig参数传入,当有多个筛选条件,如:sysdig "fd.rip=54.165.81.189 and fd.port=6666"
,这时候是可加双引号的
更多规则使用可参考https://sysdig.com/blog/linux-troubleshooting-cheatsheet/#lsof
开发自定义Chisel
Sysdig chisels 使用Lua 语言编写,如果不熟悉,可以参考Programming in Lu 和Lua reference manual
Chisels 脚本结构
--[[
Lua 脚本如果要想被sysdig 识别,必须要定义以下几个全局变量
description
short_description
category
args:包含参数的列表,可为空
以