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

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

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

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

安装Sysdigapache

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

以 root 身份运行以下指令,从官方 apt/yum 源安装 sysdig。
curl -s http://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash
安装完成后,咱们能够像这样运行 sysdig,来感觉一下。bash

Unable to load the driver
error opening device /dev/sysdig0. Make sure you have root credentials and that the sysdig-probe module is loaded.
sysdig运行报错如上,解决方式: sysdig-probe-loader 再次执行便可成功。
sysdig
屏幕上马上充斥这系统内发生的一切信息,咱们没办法利用这些信息,因此咱们应该运行:
sysdig -cl | less
来查看已有的 chisels 列表:服务器

to_see_a_list_of_available_chisels_15334678610_e5956a26e8_z网络

下列类别是默承认用的,每一类都有多个内置的 chisels。
CPU
Usage CPU 使用状况less

Errors
错误curl

I/O

输入/输出

Logs
日志

Misc
杂项

Net
网络

Performance
性能

Security
安全

System
State 系统状态
显示一个特定chisel的信息(含详细的命令行用法),运行:
sysdig -cl [chisel_name]
好比,查看“Net”类别下的 spy_port chisel,能够运行:
sysdig -i spy_port
sysdig_i_spy_port_15521424095_0365bf20c3_z

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
sysdig_r_trace.scap_c_bottlenecks_15334678670_ebbe93265e_z

须要注意 #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
sysdig_r_mnt_sysdig_debian.scap.gz_c_spy_users_15518254291_5c9671ca41_z

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

若是你想把目标指向一个特定用户,并只监控该用户的活动该怎么办呢?你能够经过用户名来过滤 spy_users chisel 的结果:
sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo"
sysdig_r_mnt_sysdig_debian.scap.gz_c_spy_users_user.name=xmodulo_15498248556_66d15422b1_z

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_p_15498248586_de5f5fc93d_z

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,开始挖掘吧!

参考官网
https://www.ibm.com/developerworks/cn/linux/1607_caoyq_sysdig/index.html

相关文章
相关标签/搜索