Sysdig – 一款功能强大的 Linux 系统监控和故障排除工具

Sysdig是一款开源、跨平台、功能强大且灵活的系统监控和故障排查工具,适用于Linux;它也可以在Windows和Mac OSX上运行,但功能有限,可用于系统分析、检查和调试。

通常,您会混合使用各种Linux性能监控和故障排查工具,包括下面列出的这些工具来执行Linux监控和调试任务:

  1. strace – 发现进程的系统调用和信号。
  2. tcpdump – 原始网络流量监控。
  3. netstat – 网络连接监控。
  4. htop – 实时进程监控。
  5. iftop – 实时网络带宽监控。
  6. 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
Watch Linux System Events

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

$ sudo csysdig 
Monitor Linux System Events

注意:要真正感受这个工具,您需要使用sysdig,它会像我们之前看到的那样从运行中的Linux系统生成原始数据:这需要您了解如何使用过滤器和凿子。

但如果您需要一种无痛的方式来使用sysdig – 继续使用csysdig

理解Sysdig凿子和过滤器

Sysdig凿子是用于检查sysdig事件流以执行有用的系统故障排除操作等的最小Lua脚本。下面的命令将帮助您查看所有可用的凿子:

$ sudo sysdig -cl

屏幕截图显示了不同类别下凿子的示例列表。

View Sysdig Chisels

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

$ sudo sysdig -i topprocs_cpu
View Sysdig Chisel Info

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
View Sysdig Field Classes

创建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
Create MongoDB Trace File

监视Linux进程

要列出系统进程,请键入:

$ sudo sysdig -c ps
Monitor Linux Processes

通过CPU使用率监视进程

要按CPU使用率百分比查看前几个进程,请运行此命令:

$ sudo sysdig -c topprocs_cpu
Monitor Processes by CPU Usage

监视网络连接和I/O

要查看系统网络连接,请运行:

$ sudo sysdig -c netstat
Monitor Network Connections

以下命令将帮助您列出总字节数最多的网络连接:

$ sudo sysdig -c topconns

接下来,您还可以按网络I/O列出前几个进程,如下所示:

$ sudo sysdig -c topprocs_net    

监视系统文件I/O

您可以输出系统上进程读取和写入的数据如下:

$ sudo sysdig -c echo_fds
Monitor System IO

要按(读取 + 写入)磁盘字节列出前几个进程,请使用:

$ sudo sysdig -c topprocs_file   

故障排除 Linux 系统性能

为了监视系统瓶颈(慢系统调用),执行以下命令:

$ sudo sysdig -c bottlenecks
Troubleshoot Linux Performance

跟踪进程执行时间

要跟踪进程的执行时间,您可以运行以下命令并将跟踪结果存储在文件中:

$ sudo sysdig -w extime.scap -c proc_exec_time 
Track Process Execution 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] 
Monitor HTTP Requests

显示登录 shell 和交互式用户活动

以下命令将使您能够查看所有登录 shell ID:

$ sudo sysdig -c list_login_shells

最后,您可以显示系统用户的交互活动,如下:

$ sudo sysdig -c spy_users
Monitor User Activity

有关更多使用信息和示例,请阅读 sysdig 和 csysdig 手册页:

$ man sysdig 
$ man csysdig

参考:https://www.sysdig.org/

还要检查这些有用的 Linux 性能监控工具:

  1. BCC – 用于Linux性能监控、网络和更多的动态跟踪工具
  2. pyDash – 一个基于Web的Linux性能监控工具
  3. Perf – 用于Linux的性能监控和分析工具
  4. Collectl:一款先进的Linux全能性能监控工具
  5. Netdata – 用于Linux系统的实时性能监控工具
结论

Sysdig将许多命令行工具的功能集成到一个卓越的界面中,使您能够深入挖掘Linux系统事件以收集数据,保存以供以后分析,并提供出色的容器支持。

如有任何问题或想法要分享关于这个工具,请使用下面的反馈表。

Source:
https://www.tecmint.com/sysdig-system-monitoring-and-troubleshooting-tool-for-linux/