天天看点

linux黑盒debug利器sysdig

作者:SuperOps
linux黑盒debug利器sysdig

Sysdig是一种全新的系统监控和调试工具,它结合了系统调用跟踪和抓包功能。以下是Sysdig的优势和使用场景:

优势:

1. 灵活性:Sysdig可以监控系统中的任何进程、容器或虚拟机,并支持多种输出格式,包括文本、JSON和CSV等格式。

2. 强大的过滤器:Sysdig提供了非常强大的过滤器,可以帮助用户快速过滤出感兴趣的事件,如特定进程、文件或网络连接等。

3. 可视化:Sysdig提供了可视化工具,帮助用户更好地理解和分析监控数据,包括实时拓扑图、容器资源使用情况图表等。

4. 安全:Sysdig可以对系统进行深度审计,包括对系统调用和文件系统的监控,以及对容器和虚拟机的审计。

使用场景:

1. 监控系统性能:Sysdig可以监控CPU、内存、磁盘、网络等系统性能指标,帮助用户发现系统瓶颈和性能问题。

2. 进程跟踪:Sysdig可以跟踪系统中的进程,监控进程的活动,并分析进程的性能和行为。

3. 容器监控:Sysdig可以监控Docker、Kubernetes等容器管理平台,帮助用户了解容器的性能和资源使用情况。

4. 网络分析:Sysdig可以监控网络连接,抓取网络数据包,并对网络流量进行分析,帮助用户发现网络问题和安全威胁。

5. 安全审计:Sysdig可以对系统进行深度审计,包括对系统调用和文件系统的监控,以及对容器和虚拟机的审计,帮助用户发现潜在的安全威胁。

当使用Sysdig时,以下是一些最佳实践可以帮助您更高效地监控和分析您的系统:

linux黑盒debug利器sysdig

1. 了解您的系统:在使用Sysdig之前,您需要了解您的系统,包括您要监控的进程、网络连接和文件系统等。这将帮助您更好地设置和过滤Sysdig命令,以便捕获您感兴趣的事件。

2. 使用过滤器:Sysdig提供了非常强大的过滤器,可以帮助您快速过滤出感兴趣的事件,如特定进程、文件或网络连接等。合理使用过滤器可以大幅提高命令的效率。

3. 监控系统性能:Sysdig可以监控系统性能指标,如CPU、内存、磁盘和网络等,帮助您发现系统瓶颈和性能问题。您可以使用Sysdig来监控系统性能,并对性能问题进行分析和优化。

4. 分析网络流量:Sysdig可以抓取和分析网络流量,并帮助您发现网络问题和安全威胁。使用Sysdig时,您应该熟悉网络协议和流量分析技术,以便更好地理解和分析网络流量。

5. 使用可视化工具:Sysdig提供了可视化工具,如实时拓扑图、容器资源使用情况图表等,可以帮助您更好地理解和分析监控数据。您可以使用这些可视化工具来更好地理解您的系统和发现问题。

6. 安全审计:Sysdig可以对系统进行深度审计,包括对系统调用和文件系统的监控,以及对容器和虚拟机的审计。使用Sysdig进行安全审计时,您应该了解系统安全和攻击技术,以便更好地发现和处理安全威胁。

7. 优化命令:Sysdig可以捕获大量数据,您应该优化命令以提高命令效率并减少数据量。例如,您可以使用更精细的过滤器、限制输出结果的数量等。

8. 使用Sysdig文档:Sysdig提供了详细的文档和示例,您可以在使用Sysdig时参考这些文档和示例,以便更好地发挥Sysdig的功能。

网络示例

  • 查看占用网络带宽最多的进程
sysdig -c topprocs_net           
  • 显示主机192.168.0.1的网络传输数据
as binary:sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1as ASCII:sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1           
  • 查看连接最多的服务器端口
in terms of established connections:sysdig -c fdcount_by fd.sport "evt.type=accept"in terms of total bytes:sysdig -c fdbytes_by fd.sport           
  • 查看客户端连接最多的ip
in terms of established connectionssysdig -c fdcount_by fd.cip "evt.type=accept"in terms of total bytessysdig -c fdbytes_by fd.cip           
  • 列出所有不是访问apache服务的访问连接
sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"           

容器示例

  • 查看机器上运行的容器列表及其资源使用情况
sudo csysdig -vcontainers           
  • 查看容器上下文的进程列表
sudo csysdig -pc           
  • 查看运行在wordpress1容器里CPU的使用率
sudo sysdig -pc -c topprocs_cpu container.name=wordpress1           
  • 查看运行在wordpress1容器里网络带宽的使用率
sudo sysdig -pc -c topprocs_net container.name=wordpress1           
  • 查看在wordpress1容器里使用网络带宽最多的进程
sudo sysdig -pc -c topprocs_net container.name=wordpress1           
  • 查看在wordpress1 容器里占用 I/O 字节最多的文件
sudo sysdig -pc -c topfiles_bytes container.name=wordpress1           
  • 查看在wordpress1 容器里网络连接的排名情况
sudo sysdig -pc -c topconns container.name=wordpress1           
  • 显示wordpress1容器里所有命令执行的情况
sudo sysdig -pc -c spy_users container.name=wordpress1           

应用示例

  • 查看机器所有的HTTP请求
sudo sysdig -s 2000 -A -c echo_fds fd.port=80 and evt.buffer contains GET           
  • 查看机器所有的SQL select查询
sudo sysdig -s 2000 -A -c echo_fds evt.buffer contains SELECT           
  • 该命令可以实时查看Apache对外部MySQL服务器发出的查询:
sysdig -s 2000 -A -c echo_fds fd.sip=192.168.30.5 and proc.name=apache2 and evt.buffer contains SELECT           

其中,选项-s 2000指定每隔2000毫秒刷新一次结果,选项-A表示将打印输出以文本形式显示,选项-c echo_fds指定打印文件描述符的内容和元数据,过滤条件fd.sip=192.168.30.5表示过滤出目标MySQL服务器的IP地址,proc.name=apache2表示过滤出Apache进程,evt.buffer contains SELECT表示过滤出包含SELECT关键字的查询语句。

I/O示例

  • 查看使用硬盘带宽最多的进程:
sysdig -c topprocs_file           
  • 列出使用大量文件描述符的进程:
sysdig -c fdcount_by proc.name "fd.type=file"           
  • 查看读取和写入字节最多的文件:
sysdig -c topfiles_bytes           
  • 打印Apache读写最多的文件:
sysdig -c topfiles_bytes proc.name=httpd           
  • 基本的opensnoop:实时监控文件打开:
sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open           
  • 查看R+W硬盘活动最多的顶级目录:
sysdig -c fdbytes_by fd.directory "fd.type=file"           
  • 查看/tmp目录中R+W硬盘活动最多的文件:
sysdig -c fdbytes_by fd.filename "fd.directory=/tmp/"           
  • 观察所有名为'passwd'的文件的I/O活动:
sysdig -A -c echo_fds "fd.filename=passwd"           
  • 根据FD类型显示I/O活动:
sysdig -c fdbytes_by fd.type           

进程和CPU使用率示例

  • 查看CPU使用率最高的进程:
sysdig -c topprocs_cpu           
  • 查看CPU 0的顶部进程:
sysdig -c topprocs_cpu evt.cpu=0           
  • 观察进程的标准输出:
sysdig -s4096 -A -c stdout proc.name=cat           

性能和错误示例

  • 查看花费最多时间的文件:
sysdig -c topfiles_time           
  • 查看Apache花费最多时间的文件:
sysdig -c topfiles_time proc.name=httpd           
  • 查看I/O错误最多的进程:
sysdig -c topprocs_errors           
  • 查看I/O错误最多的文件:
sysdig -c topfiles_errors           
  • 查看所有失败的磁盘I/O调用:
sysdig fd.type=file and evt.failed=true           
  • 查看httpd打开的所有失败文件:
sysdig "proc.name=httpd and evt.type=open and evt.failed=true"           
  • 查看花费最多时间的系统调用:
sysdig -c topscalls_time           
  • 查看返回错误的顶部系统调用:
sysdig -c topscalls "evt.failed=true"           
  • 在发生错误的情况下实时监视文件打开:
sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and evt.failed=true           
  • 打印I/O调用的文件,延迟大于1ms:
sysdig -c fileslower 1           

安全示例

  • 查看用户"root"访问的目录:
sysdig -p"%evt.arg.path" "evt.type=chdir and user.name=root"           
  • 观察SSH活动:
sysdig -A -c echo_fds fd.name=/dev/ptmx and proc.name=sshd           
  • 显示在/etc目录中发生的每个文件打开操作:
sysdig evt.type=open and fd.name contains /etc           
  • 显示启动"tar"命令的所有登录shell的ID:
sysdig -r file.scap -c list_login_shells tar           
  • 显示由具有给定ID的登录shell执行的所有命令:
sysdig -r trace.scap.gz -c spy_users proc.loginshellid=5459           

官方地址:http://www.sysdig.org/wiki/sysdig-examples/

github地址:GitHub - draios/sysdig: Linux system exploration and troubleshooting tool with first class support for containers

继续阅读