如何用 sysdig 监控和排查 Linux 服务器

来源:互联网 发布:淘宝客服工资都不高吗 编辑:程序博客网 时间:2024/06/05 17:44

http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=417758071&idx=1&sn=da67eba5ad6996785ab0e45e3d993a1f&scene=2&srcid=0320ld6T0MXG9Zbpmycq6D0i&from=timeline&isappinstalled=0#wechat_redirect


如果你需要跟踪一个进程发出和接收的系统调用,第一个想到是的什么?你很可能想到了 strace,你是对的。 从命令行监控原始网络通信你会用什么工具?如果你想到了 tcpdump,你又做了明智的决定。如果你碰巧需要跟踪打开的文件(换句 Unix 语言来讲就是:一切皆文件),很可能你会用 lsof。


strace、tcpdump 和 lsof 确实了不起的工具,应该是每个系统管理员工具箱里的一部分。这恰恰是你会喜欢 sysdig 的原因,一个强大的系统级[探索]和调试工具,开源的,并且被创始人称作“strace + tcpdump + lsof ,顶上浇了带有 Lua 樱桃的美妙酱汁”。好吧,先把幽默放一边,sysdig 的一个很棒的特性在于,它不仅能够分析Linux 系统的 “现场”状态,还能够把系统状态保存到一个转储文件以用于离线检测。而且,你可以用内置(或者自己编写)的小脚本 —— 名为“chisels(凿子)” —— 来定制 sysdig 的行为甚至增强 sysdig 的能力。各种 chisels 都以各自不同的脚本特性来分析 sysdig 捕获的事件流。


在本教程里,我们将研究 sysdig 在 Linux 上的安装和基本的系统监控和调试用法。


安装Sysdig


为了简单、明了和Linux发行版无关方面的考虑,本教程选择官网描述的自动安装流程,安装脚本自动探查操作系统并安装必要的依赖包。


以 root 身份运行如下指令,从官方 apt/yum 源安装 sysdig。


# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash



安装完成后,我们可以像这样运行 sysdig,来感受一下。


# sysdig


屏幕上立刻充斥这系统内发生的一切信息,我们没办法利用这些信息,所以我们应该运行:


# sysdig -cl | less


来查看已有的 chisels 列表:



下列类别是默认可用的,每一类都有多个内置的 chisels。


CPU Usage     CPU 使用情况

Errors        错误

I/O           输入/输出

Logs          日志

Misc          杂项

Net           网络

Performance   性能

Security      安全

System State  系统状态


显示一个特定chisel的信息(含详细的命令行用法),运行:


# sysdig -cl [chisel_name]


比如,查看“Net”类别下的 spy_port chisel,可以运行:


# sysdig -i spy_port



chisel 可以跟过滤器结合以便获得更有用的输出内容,过滤器可以用于现场数据也可以用于跟踪文件。

过滤器遵循“类别.字段”的结构,比如:


  • fd.cip: 客户端 IP 地址

  • evt.dir: 事件方向,可以是 ‘>’,代表进入事件;或 ‘<’,代表退出事件。


下面的命令显示所有的过滤器:


# sysdig -l


在剩下的教程里,我将演示一些 sysdig 的用例。


Sysdig 示例:服务器性能调试


假设你的服务器遇到性能问题(比如无反应或严重的反应延迟),你可以用 bottlenecks chisel 来显示此时最慢的 10 个系统调用。


下面的命令可以在运行中的服务器上实时做检测。“-c” 标记后面跟着 chisel名,是告诉 sysidg 运行指定的 chisel。


# sysdig -c bottlenecks

或者,你可以执行离线服务器性能分析。这种情况下,你可以把完整的 sysdig 跟踪数据保存到一个文件里,然后对跟踪文件运行 bottlenecks chisel ,方法如下:


首先,保存 sysdig 跟踪文件(用 Ctrl+c 终止数据收集):


# sysdig -w trace.scap


收集完跟踪数据,用如下命令就可以检查跟踪期间最慢的系统调用:


# sysdig -r trace.scap -c bottlenecks




需要注意 #2 #3 和 #4 列,它们分别代表执行时间、进程名和 PID。


Sysdig 示例:监控用户行为


假设你作为系统管理员想要监控系统的用户行为(比如,用户在命令行敲了什么指令、进入了哪些目录),那么 spy_user chisel 就派上用场了。


我们首先用一些额外选项来收集 sysdig 跟踪文件:


# sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz

 

    "-s 4096" 告诉sysdig 对每个事件捕捉4096个字节。

    "-z" (跟 -w 一起使用)压缩跟踪文件。

    "-w <trace-file>" 保存 sysdig 跟踪数据到指定文件。


在上面的例子里,我们给压缩的跟踪文件按照主机名来命名。记住,你可以在任何时候敲Ctrl + c终止 sysdig 的运行。


我们采集了足够多的数据后,可以用如下指令查看系统内每个用户的交互行为:


# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users



上面的输出里,第一列代表与用户活动相关的进程PID。


如果你想把目标指向一个特定用户,并只监控该用户的活动该怎么办呢?你可以通过用户名来过滤 spy_users chisel 的结果:


# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo"



Sysdig 示例:监控文件I/O


我们可以用 “-p” 标记来定制 sysdig 跟踪的输出格式,在双引号内包含所需的字段(比如: 用户名、进程名以及文件或套接字名)。在下面的例子里,我们创建一个跟踪文件,只包括对 home 目录的写入事件(过后我们可以用”sysdig -r writetrace.scap.gz” 来查看)。


# sysdig -p "%user.name %proc.name %fd.name" "evt.type=write and fd.name contains /home/" -z -w writetrace.scap.gz



Sysdig 示例:监控网络I/O


作为服务器调试的一部分,你可能需要窥探网络流量,而这一般都是用 tcpdump。用 sysdig 呢,流量嗅探同样很容易,而且方式更加用户友好。


例如,你可以查看服务器的某个特定进程(比如 apache2)与一个特定 IP 地址的数据交换(ASCII形式):


# sysdig -s 4096 -A -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2


如果你想监控原始数据传输(二进制形式),把 “-A” 改为 “-X”。


# sysdig -s 4096 -X -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2


想要更多的信息、示例和案例研究可以登录项目官网。相信我,sysdig 拥有无限的可能性。别光听我说,现在就安装 sysdig,开始挖掘吧!

0 0
原创粉丝点击