Sysdig是一款开源、跨平台、功能强大且灵活的系统监控和故障排查工具,适用于Linux;它也可以在Windows和Mac OSX上运行,但功能有限,可用于系统分析、检查和调试。
通常,您会混合使用各种Linux性能监控和故障排查工具,包括下面列出的这些工具来执行Linux监控和调试任务:
- strace – 发现进程的系统调用和信号。
- tcpdump – 原始网络流量监控。
- netstat – 网络连接监控。
- htop – 实时进程监控。
- iftop – 实时网络带宽监控。
- lsof – 查看进程打开的文件。
然而,sysdig整合了以上所有工具以及更多功能,提供了一个单一且简单的程序,尤其是在容器支持方面表现出色。它使您能够捕获、保存、过滤和检查Linux系统以及容器的真实行为(事件流)。
它配备了命令行界面和强大的交互式UI(csysdig),让您可以实时观察系统活动,或进行跟踪转储并保存以供后续分析。您可以从以下视频中了解csysdig的工作原理。
Sysdig特点:
- 它快速、稳定且易于使用,文档全面。
- 原生支持容器技术,包括Docker、LXC。
- 可通过Lua进行脚本编写;提供用于处理捕获的系统事件的凿子(轻量级Lua脚本)。
- 支持有用的输出过滤。
- 支持系统和应用程序跟踪。
- 可与Ansible、Puppet和Logstash集成。
- 实现高级日志分析示例。
- 还为道德黑客提供Linux服务器攻击(取证)分析功能等等。
本文将展示如何在Linux系统上安装sysdig,并使用基本示例进行系统分析、监视和故障排除。
如何在Linux中安装Sysdig
安装sysdig软件包就像运行下面的命令一样简单,它将检查所有的要求;如果一切就绪,它将从Draios APT/YUM存储库下载并安装该软件包。
# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash OR $ curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
安装完成后,您需要以root身份运行sysdig,因为它需要访问关键区域,如/proc文件系统,/dev/sysdig*设备,并需要自动加载sysdig-probe内核模块(如果没有的话);否则,请使用sudo命令。
最基本的示例是不带任何参数运行它,这将使您能够实时查看Linux系统事件流:
$ sudo sysdig

上述输出(原始数据)可能对您来说没有太多意义,要获得更有用的输出,请运行csysdig:
$ sudo csysdig

注意:要真正感受这个工具,您需要使用sysdig,它会像我们之前看到的那样从运行中的Linux系统生成原始数据:这需要您了解如何使用过滤器和凿子。
但如果您需要一种无痛的方式来使用sysdig – 继续使用csysdig。
理解Sysdig凿子和过滤器
Sysdig凿子是用于检查sysdig事件流以执行有用的系统故障排除操作等的最小Lua脚本。下面的命令将帮助您查看所有可用的凿子:
$ sudo sysdig -cl
屏幕截图显示了不同类别下凿子的示例列表。

如果您想了解有关特定凿子的更多信息,请使用-i
标志:
$ sudo sysdig -i topprocs_cpu

Sysdig过滤器为您从事件流中获取的输出类型增加了更多功能,它们允许您自定义输出。您应该在命令行的末尾指定它们。
A straightforward and commonest filter is a basic “class.field=value” check, you can also combine chisels with filters for even more powerful customizations.
要查看可用字段类、字段及其描述的列表,请键入:
$ sudo sysdig -l

创建Linux系统跟踪文件
要将sysdig输出转储到文件以供以后分析,请使用-w
标志,如下所示。
您可以使用-r标志读取跟踪转储文件:
$ sudo sysdig -r trace.scap
-s
选项用于指定要捕获的每个系统事件的数据字节数。在此示例中,我们正在过滤mongod进程的事件。
$ sudo sysdig -s 3000 -w trace.scap $ sudo sysdig -r trace.scap proc.name=mongod

监视Linux进程
要列出系统进程,请键入:
$ sudo sysdig -c ps

通过CPU使用率监视进程
要按CPU使用率百分比查看前几个进程,请运行此命令:
$ sudo sysdig -c topprocs_cpu

监视网络连接和I/O
要查看系统网络连接,请运行:
$ sudo sysdig -c netstat

以下命令将帮助您列出总字节数最多的网络连接:
$ sudo sysdig -c topconns
接下来,您还可以按网络I/O列出前几个进程,如下所示:
$ sudo sysdig -c topprocs_net
监视系统文件I/O
您可以输出系统上进程读取和写入的数据如下:
$ sudo sysdig -c echo_fds

要按(读取 + 写入)磁盘字节列出前几个进程,请使用:
$ sudo sysdig -c topprocs_file
故障排除 Linux 系统性能
为了监视系统瓶颈(慢系统调用),执行以下命令:
$ sudo sysdig -c bottlenecks

跟踪进程执行时间
要跟踪进程的执行时间,您可以运行以下命令并将跟踪结果存储在文件中:
$ sudo sysdig -w extime.scap -c proc_exec_time

然后使用过滤器来缩小到特定进程的详细信息(在此示例中为postgres)如下:
$ sudo sysdig -r extime.scap proc.name=postgres
发现慢速网络 I/O
这个简单的命令将帮助您检测慢速网络 I/O:
$ sudo sysdig -c netlower
监视日志文件条目
以下命令将帮助您显示写入 syslog 的每条消息,如果您对特定进程的日志条目感兴趣,请创建一个跟踪转储并相应地进行过滤,如前所示:
$ sudo sysdig -c spy_syslog
您可以打印任何进程写入的数据到日志文件中,如下:
$ sudo sysdig -c spy_logs
监控 HTTP 服务器请求
如果您的系统上运行着像 Apache 或 Nginx 这样的 HTTP 服务器,请使用以下命令查看服务器的请求日志:
$ sudo sysdig -c httplog $ sudo sysdig -c httptop [Print Top HTTP Requests]

显示登录 shell 和交互式用户活动
以下命令将使您能够查看所有登录 shell ID:
$ sudo sysdig -c list_login_shells
最后,您可以显示系统用户的交互活动,如下:
$ sudo sysdig -c spy_users

有关更多使用信息和示例,请阅读 sysdig 和 csysdig 手册页:
$ man sysdig $ man csysdig
还要检查这些有用的 Linux 性能监控工具:
- BCC – 用于Linux性能监控、网络和更多的动态跟踪工具
- pyDash – 一个基于Web的Linux性能监控工具
- Perf – 用于Linux的性能监控和分析工具
- Collectl:一款先进的Linux全能性能监控工具
- Netdata – 用于Linux系统的实时性能监控工具
结论
Sysdig将许多命令行工具的功能集成到一个卓越的界面中,使您能够深入挖掘Linux系统事件以收集数据,保存以供以后分析,并提供出色的容器支持。
如有任何问题或想法要分享关于这个工具,请使用下面的反馈表。
Source:
https://www.tecmint.com/sysdig-system-monitoring-and-troubleshooting-tool-for-linux/