如何在Ubuntu 15/CentOS 7上安装Sysdig系统诊断工具
我们好,欢迎收看我们今天有关Linux系统探索和故障排除工具Sysdig的文章,它对容器具有一流的支持。
Sysdig从正在运行的Linux实例中捕获系统状态和活动,然后保存,过滤和分析。
我们可以使用此工具来代替许多Linux故障排除命令,例如top,lsof,strace,iostat,ps等。
它还将strace,tcpdump和lsof等许多实用程序的优点组合到一个打包的单个应用程序中使用称为Chisels的一组脚本,可以更轻松地提取有用的信息并进行故障排除。
在本文中,我们将向我们展示sysdig的安装步骤和基本用法,以在Linux CentOS 7和Ubuntu 15操作系统上执行系统监视和故障排除。
1)在Ubuntu 15上安装Sysdig:
Sysdig包括Debian,RHEL和基于Container的OS的最新版本;但是,它始终会以新功能进行更新。
我们将使用“ apt”命令安装Sysdig,但是首先我们需要通过以root用户运行以下“ curl”命令来设置Draios维护的apt存储库。
使用以下命令将信任Draios GPG密钥并配置apt信息库。
# curl -s https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public | apt-key add
# curl -s -o /etc/apt/sources.list.d/draios.list http://download.draios.com/stable/deb/draios.list
现在,我们需要通过执行以下命令来更新软件包列表。
# apt-get update
系统更新完成后,需要使用如下所示的命令安装内核头文件包。
# apt-get -y install linux-headers-$(uname -r)
现在,我们可以使用以下命令在ubuntu上安装sysdig。
# apt-get -y install sysdig
2)在CentOS 7上安装Sysdig
CentOS 7上的安装过程与我们为Ubuntu服务器执行的安装过程相似,但是我们需要通过设置yum存储库来重复同一步骤,该存储库将使用其自己的密钥来验证软件包的真实性。
让我们运行以下命令,将“ rpm”工具与“ --import”配合使用,以将Draios密钥手动添加到RPM密钥。
# rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
在此之后,下载Draios存储库并配置yum以在CentOS 7服务器上使用它。
# curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo
现在,我们需要在开始安装Sysdig软件包之前,通过执行以下命令来更新软件包列表。
# yum update
为了下载sysdig工具使用的动态内核模块支持(DKMS)软件包,需要EPEL存储库。
因此,下面的以下命令可启用EPEL存储库。
# yum -y install epel-release
现在安装内核头文件以设置sysdig-probe模块,然后传递命令以在服务器上安装Sysdig软件包。
# yum install kernel-devel-$(uname -r)
# yum install sysdig
3)使用Sysdig
成功安装sysdig工具后,现在我们将向我们展示一些最有用的示例,以使用它来对系统进行故障排除。
使用sysdig的最简单,最简单的方法是通过不带任何参数的方式调用sysdig,如下所示。
# sysdig
默认情况下,sysdig以其事件编号,事件时间,事件cpu编号,进程名称(PID),输出事件的方向,事件类型和事件参数的格式,在一行上打印每个捕获事件的信息。
输出的内容非常庞大,并且其本身并不是很有用,因此我们可以通过使用'-w'标志并在'.dump'中指定文件名来将Sysdig的输出写入文件中,如以下命令所示。
# sysdig -w result.dump
十个运行带有参数'-r'的以下命令以读取已保存文件的输出。
# sysdig -r result.dump
Sysdig过滤器
我们可以使用允许我们将sysdig结果的输出过滤为特定信息的过滤器。
运行以下命令以找到可用过滤器的列表,如图所示。
# sysdig -l
--------------------- Field Class: fd fd.num the unique number identifying the file descriptor. fd.cport for TCP/UDP FDs, the client port. fd.rproto for TCP/UDP FDs, the remote protocol. --------------------- Field Class: process proc.pid the id of the process generating the event. proc.name the name (excluding the path) of the executable generating the event. proc.args the arguments passed on the command line when starting the proc ess generating the event. proc.env the environment variables of the process generating the event. proc.cmdline full process command line, for example:proc.name + proc.args. proc.exeline full process command line, with exe as first argument, for example:pro c.exe + proc.args. proc.cwd the current working directory of the event. proc.duration number of nanoseconds since the process started. proc.fdlimit maximum number of FDs the process can open. proc.fdusage the ratio between open FDs and maximum available FDs for the pr ocess. . thread.pfminor number of minor page faults since thread start. thread.ismain 'true' if the thread generating the event is the main one in th e process.
因此,我们可以使用其强大的过滤系统来过滤结果。
我们可以使用“ proc.name”过滤器捕获特定进程的所有sysdig事件。
例如,使用下面的命令,使用proc.name参数过滤'MySQLD'的过程。
# sysdig -r result.dump proc.name=mysqld
140630 02:20:30.848284977 2 mysqld (2899) io_getevents 140632 02:20:30.848289674 2 mysqld (2899) > switch next=2894(mysqld) pgft_maj=0 pgft_min=1 vm_size=841372 vm_rss=85900 vm_swap=0 140633 02:20:30.848292784 2 mysqld (2894) io_getevents 140635 02:20:30.848297142 2 mysqld (2894) > switch next=2901(mysqld) pgft_maj=0 pgft_min=4 vm_size=841372 vm_rss=85900 vm_swap=0 140636 02:20:30.848300414 2 mysqld (2901) io_getevents 140638 02:20:30.848307954 2 mysqld (2901) > switch next=0 pgft_maj=0 pgft_min=1 vm_size=841372 vm_rss=85900 vm_swap=0 140640 02:20:30.849340499 1 mysqld (2900) io_getevents 140642 02:20:30.849348907 1 mysqld (2900) > switch next=2895(mysqld) pgft_maj=0 pgft_min=1 vm_size=841372 vm_rss=85900 vm_swap=0 140643 02:20:30.849357633 1 mysqld (2895) io_getevents 140645 02:20:30.849362258 1 mysqld (2895) > switch next=26329(tuned) pgft_maj=0 pgft_min=1 vm_size=841372 vm_rss=85900 vm_swap=0 140702 02:20:30.995763869 1 mysqld (2898) io_getevents 140704 02:20:30.995777232 1 mysqld (2898) > switch next=2893(mysqld) pgft_maj=0 pgft_min=1 vm_size=841372 vm_rss=85900 vm_swap=0 140705 02:20:30.995782563 1 mysqld (2893) io_getevents 140707 02:20:30.995795720 1 mysqld (2893) > switch next=0 pgft_maj=0 pgft_min=3 vm_size=841372 vm_rss=85900 vm_swap=0 140840 02:20:31.204456822 1 mysqld (2933) futex addr=7F1453334D50 op=129(FUTEX_PRIVATE_FLAG|FUTEX_WAKE) val=1 140842 02:20:31.204464336 1 mysqld (2933) futex addr=7F1453334D8C op=393(FUTEX_CLOCK_REALTIME|FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET) val=12395 140844 02:20:31.204569972 1 mysqld (2933) > switch next=3920 pgft_maj=0 pgft_min=1 vm_size=841372 vm_rss=85900 vm_swap=0 140875 02:20:31.348405663 2 mysqld (2897) io_getevents
要过滤“ sshd”的实时进程,可以将以下命令与proc.name参数一起使用。
# sysdig proc.name=sshd
使用Sysdig进行网络和系统诊断
要查看就网络带宽使用而言最重要的进程,请运行以下sysdig命令。
# sysdig -c topprocs_net
Bytes Process PID ------------------------------------------------------------------------------- 304B sshd 3194
要捕获所有打开特定文件的进程,请使用以下命令。
sysdig fd.name =/var/log
为了捕获打开特定文件系统的所有进程,可以使用以下命令。
将比较运算符与包含,=,!=,=,等过滤器一起使用。
我们将看到过滤器可用于读取文件或者实时事件流。
# sysdig fd.name contains /etc
在Sysdig中使用凿子
Sysdig的凿子是一些小脚本,可以分析sysdig事件流以执行有用的操作。
如果我们使用过dtrace之类的系统跟踪工具,则可能对跟踪OS事件的运行脚本很熟悉。
凿子在实时系统上运行良好,但也可以与跟踪文件一起使用以进行离线分析。
要获取可用凿子列表,只需键入以下命令即可获得每个可用凿子的简短说明。
# sysdig -cl
要运行其中一个凿子,请使用“ –c”标志。
例如,让我们运行topfiles_bytes凿子,如下所示。
# sysdig -c topfiles_bytes
或者,如果我们想查看特定文件夹中的头文件,请使用以下命令。
# sysdig -c topfiles_bytes "fd.name contains /root"
要查看特定用户的头文件,请在下面使用。
# sysdig -c topfiles_bytes "user.name=admin"