Sysdig - 适用于 Linux 的强大系统监控和故障排除工具
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 Chisels 和过滤器
Sysdig chisels 是最小的 Lua 脚本,用于检查 sysdig 事件流以执行有用的系统故障排除操作等。下面的命令将帮助您查看所有可用的凿子:
sudo sysdig -cl
屏幕截图显示了不同类别下的凿子示例列表。
如果您想了解有关特定凿子的更多信息,请使用 -i
标志:
sudo sysdig -i topprocs_cpu
Sysdig 过滤器为您可以从事件流获取的输出类型添加了更多功能,它们允许您自定义输出。您应该在命令行末尾指定它们。
简单且最常见的过滤器是基本的“class.field=value”检查,您还可以将凿子与过滤器结合使用,以实现更强大的自定义。
要查看可用字段类、字段及其描述的列表,请键入:
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/0
这个简单的命令将帮助您检测慢速网络 I/0:
sudo sysdig -c netlower
查看日志文件条目
下面的命令可帮助您显示写入 syslog 的每条消息,如果您对特定进程的日志条目感兴趣,请创建跟踪转储并相应地过滤掉它,如前所示:
sudo sysdig -c spy_syslog
您可以将任何进程写入的任何数据打印到日志文件中,如下所示:
sudo sysdig -c spy_logs
监控 HTTP 服务器请求
如果您的系统上运行着 HTTP 服务器,例如 Apache 或 Nginx,请使用以下命令查看服务器的请求日志:
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
参考:https://www.sysdig.org/
另请检查这些有用的 Linux 性能监控工具:
- BCC – 用于 Linux 性能监控、网络等的动态跟踪工具
- pyDash – 基于 Web 的 Linux 性能监控工具
- Perf-Linux 性能监控和分析工具
- Collectl:一款适用于 Linux 的高级一体式性能监控工具
- Netdata – Linux 系统的实时性能监控工具
结论
Sysdig 将众多命令行工具的功能汇集到一个出色的界面中,从而使您可以深入研究 Linux 系统事件以收集数据,保存以供以后分析,并且它提供了令人难以置信的容器支持。
要提出任何问题或分享有关此工具的任何想法,请使用下面的反馈表。