zoukankan      html  css  js  c++  java
  • Linux系统调试工具之sysdig使用详解

    一、安装

    本篇主要介绍在centos下的用法安装和测试,后面也会提到在ubuntu类平台下的安装。其支持在centos6和centos7上安装,安装方法十分简洁:

    1centos下的安装

    1.1一键安装

    1. curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash

    上面是一个shell 脚本,会识别常用的linux发行版本,并根据对应的版本配置源,最后是安装sysdig包。在redhat/centos上首先会配置的是epel 源 ,配置该源的目的是安装dkms包;然后会配置draios源,通过该源可以安装sysdig包。最后在装sysdig包之前还会先安装kernel-devel包。

    1.2、分步安装

    由于使用的源都是国外源,会出现安装比较慢的情况,所以使用一键安装失败时,可以使用分解步骤安装。在内网环境下的也可以将依赖包都下下来再安装。

    1. #导入draios源
    2. rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
    3. curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo
    4. #导入epel 源
    5. rpm -i http://mirror.us.leaseweb.net/epel/6/x86_64/epel-release-6-8.noarch.rpm
    6. #装包
    7. yum -y install kernel-devel*  dkms  sysdig

    sysdig依赖的两个包,一个是kernel-devel ,一个是dkms包,DKMS全称是Dynamic Kernel Module Support (动态内核模块支持),即在内核版本变动之后可以自动重新生成新驱动模块。想要了解的可以自行GOOGLE 。

    2ubuntu下的安装

    1. curl -s https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public | apt-key add -
    2. curl -s -o /etc/apt/sources.list.d/draios.list http://download.draios.com/stable/deb/draios.list
    3. apt-get update
    4. apt-get -y install linux-headers-$(uname -r)
    5. apt-get -y install sysdig

    windows、Mac OS及其他linux发行版的安装,可以参看官方安装文档

    二、常用用法

    默认按上面的方法安装好以后,执行sysdig是会出错的。提示如下:

    1. # sysdig
    2. Unable to load the driver
    3. error opening device /dev/sysdig0. Make sure you have root credentials and that the sysdig-probe module is loaded.

    所以执行之前还需要使用/usr/bin/sysdig-probe-loader命令装载内核模块,该命令也是一个shell脚本,执行时会从aws s3上下载一个ko模块文件。不过我在linux测试主机上下载多次都未成功。查看该脚本文件后,发现其调用下载的地址是:

    centos7

    https://s3.amazonaws.com/download.draios.com/stable/sysdig-probe-binaries/sysdig-probe-0.21.0-x86_64-3.10.0-693.21.1.el7.x86_64-9df7f67292ca873f1d3b016b35438cfb.ko

    注:该ko文件的URL不用记,执行该脚本时会有相应的提示“Trying to download precompiled module from” ,而且不同的内核版本下的对应ko文件也是不同的。我这里的内核版本是2.6.32-504.el6 。下载完成后会存放在~/.sysdig 目录。

    完成后再执行sysdig-probe-loader命令就可以执行sysdig命令了,而且开机后不会自动加载,所以在不使用的情况下,该包是对主机无影响的。

    1、网络

    查看占用网络带宽最多的进程:

    1. sysdig -c topprocs_net

    显示主机192.168.0.1的网络传输数据:

    1. as binary:
    2. sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1
    3. as ASCII:
    4. sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1

    这里显示网络传输功能,实际效果和tcpdump抓包是一样的。而且其本身也支持sysdig -w dump.scap抓包保存(可以配置-X或-A使用),抓好包也支持sysdir -r dump.scap读取。

    查看连接最多的服务器端口:

    1. in terms of established connections:
    2. sysdig -c fdcount_by fd.sport "evt.type=accept"
    3. in terms of total bytes:
    4. sysdig -c fdbytes_by fd.sport

    查看客户端连接最多的ip:

    1. in terms of established connections
    2. sysdig -c fdcount_by fd.cip "evt.type=accept"
    3. in terms of total bytes
    4. sysdig -c fdbytes_by fd.cip

    列出所有不是访问apache服务的访问连接:

    1. sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"

    2、硬盘 I/O

    查看使用硬盘带宽最多的进程:

    1. sysdig -c topprocs_file

    列出使用大量文件描述符的进程

    1. sysdig -c fdcount_by proc.name "fd.type=file"

    See the top files in terms of read+write bytes

    1. sysdig -c topfiles_bytes

    Print the top files that apache has been reading from or writing to

    1. sysdig -c topfiles_bytes proc.name=httpd

    Basic opensnoop: snoop file opens as they occur

    1. sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open

    See the top directories in terms of R+W disk activity

    1. sysdig -c fdbytes_by fd.directory "fd.type=file"

    See the top files in terms of R+W disk activity in the /tmp directory

    1. sysdig -c fdbytes_by fd.filename "fd.directory=/tmp/"

    Observe the I/O activity on all the files named 'passwd'

    1. sysdig -A -c echo_fds "fd.filename=passwd"

    Display I/O activity by FD type

    1. sysdig -c fdbytes_by fd.type

    3、进程和CPU使用率

    See the top processes in terms of CPU usage

    1. sysdig -c topprocs_cpu

    See the top processes for CPU 0

    1. sysdig -c topprocs_cpu evt.cpu=0

    Observe the standard output of a process

    1. sysdig -s4096 -A -c stdout proc.name=cat

    4、应用

    查看机器所有的HTTP请求

    1.  sudo sysdig -s 2000 -A -c echo_fds fd.port=80 and evt.buffer contains GET

    查看机器所有的SQL select查询

    1.  sudo sysdig -s 2000 -A -c echo_fds evt.buffer contains SELECT

    See queries made via apache to an external MySQL server happening in real time

    1.  sysdig -s 2000 -A -c echo_fds fd.sip=192.168.30.5 and proc.name=apache2 and evt.buffer contains SELECT

    5、性能和错误

    See the files where most time has been spent

    1. sysdig -c topfiles_time

    See the files where apache spent most time

    1. sysdig -c topfiles_time proc.name=httpd

    See the top processes in terms of I/O errors

    1. sysdig -c topprocs_errors

    See the top files in terms of I/O errors

    1. sysdig -c topfiles_errors

    See all the failed disk I/O calls

    1. sysdig fd.type=file and evt.failed=true

    See all the failed file opens by httpd

    1. sysdig "proc.name=httpd and evt.type=open and evt.failed=true"

    See the system calls where most time has been spent

    1. sysdig -c topscalls_time

    See the top system calls returning errors

    1. sysdig -c topscalls "evt.failed=true"

    snoop failed file opens as they occur

    1. sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and evt.failed=true

    Print the file I/O calls that have a latency greater than 1ms:

    1. sysdig -c fileslower 1

    6、安全

    Show the directories that the user "root" visits

    1. sysdig -p"%evt.arg.path" "evt.type=chdir and user.name=root"

    Observe ssh activity

    1. sysdig -A -c echo_fds fd.name=/dev/pretmx and proc.name=sshd

    Show every file open that happens in /etc

    1. sysdig evt.type=open and fd.name contains /etc

    Show the ID of all the login shells that have launched the "tar" command

    1. sysdig -r file.scap -c list_login_shells tar

    Show all the commands executed by the login shell with the given ID

    1. sysdig -r trace.scap.gz -c spy_users proc.loginshellid=5459

    7、容器

    查看机器上运行的容器列表及其资源使用情况

    1.  sudo csysdig -vcontainers

    查看容器上下文的进程列表

    1.  sudo csysdig -pc

    查看运行在wordpress1容器里CPU的使用率

    1.  sudo sysdig -pc -c topprocs_cpu container.name=wordpress1

    查看运行在wordpress1容器里网络带宽的使用率

    1.  sudo sysdig -pc -c topprocs_net container.name=wordpress1

    查看在wordpress1容器里使用网络带宽最多的进程

    1.  sudo sysdig -pc -c topprocs_net container.name=wordpress1

    查看在wordpress1 容器里占用 I/O 字节最多的文件

    1.  sudo sysdig -pc -c topfiles_bytes container.name=wordpress1

    查看在wordpress1 容器里网络连接的排名情况

    1.  sudo sysdig -pc -c topconns container.name=wordpress1

    显示wordpress1容器里所有命令执行的情况

    1.  sudo sysdig -pc -c spy_users container.name=wordpress1

    功能是不是很强大,不过记起来有点麻烦,可以在使用的时候使用sysdig -l 查看所支持的事件列表,使用sysdig -L 查看事件所支持的过滤列表。具体也可以参看官方guide文档

    三、csysdig交互式处理

    感觉上面的方法还是比较麻烦怎么办?可以不可以交互式选择呢?当然没问题,在sysdig包里还提供了一个工具csysdig,该工具执行后,效果和top命令类似 ,见下图:

     

    通过F1~F8 及crtl + F 等功能键可以方便的切换视图和filter过滤。该功能可以参看youtube上的官方出的视频 :https://www.youtube.com/watch?v=UJ4wVrbP-Q8 (需FQ)

  • 相关阅读:
    CodeForces 7B
    CodeForces 4D
    离散化
    线段树入门
    洛谷 P3951 小凯的疑惑(赛瓦维斯特定理)
    Codeforces 1295D Same GCDs (欧拉函数)
    Codeforces 1295C Obtain The String (二分)
    Codeforces 1295B Infinite Prefixes
    Codeforces 1295A Display The Number(思维)
    Codeforces 1294F Three Paths on a Tree(树的直径,思维)
  • 原文地址:https://www.cnblogs.com/dpwindy/p/9088292.html
Copyright © 2011-2022 走看看