如何在 Ubuntu 16.04 上安装和配置 Sysdig 进行监控


在本文中,我们将学习如何安装和配置 Sysdig 工具。Sysdig 是一款开源活动监控工具,可用于捕获和分析应用程序日志,它具有强大的过滤功能和可自定义的输出。

Sysdig 通过从内核获取信息来工作,这允许捕获系统调用和进入内核的信息。它还监控系统上安装的服务器。

先决条件

要完成此演示,我们需要满足以下要求:在线观看电影《疾速追杀2》。

  • 机器上安装了 Ubuntu 16.04
  • 具有机器 Sudo 权限的非 root 用户。

Sysdig 的安装

Sysdig 是 Ubuntu 仓库中可用的软件包,但它通常包含比当前版本旧一两个版本的旧版本。我们可以使用官方脚本从项目页面安装 Sysdig。

在继续之前,我们需要使用以下命令更新 Ubuntu 机器:

$ sudo apt-get update

更新完成后,我们需要使用 curl 和以下命令下载 Sysdig 的安装脚本。

$ curl https://s3.amazonaws.com/download.draios.com/stable/install-sysdig -o install-sysdig
Output:
   % Total    % Received % Xferd    Average Speed       Time     Time       Time       Current
                                    Dload Upload       Total     Spent      Left       Speed
   100    4871    100 4871 0 0       736    0          0:00:06   0:00:06   --:--:--    1190

下载 Sysdig 的安装脚本后,我们需要使用以下命令安装 Sysdig:

$ cat ./install-sysdig | sudo bash
Output:
* Detecting operating system
* Installing Sysdig public key
OK
* Installing sysdig repository
* Installing kernel headers
* Installing sysdig
Selecting previously unselected package libasan0:amd64.(Reading database ... 59103 files and directories currently installed.)
Preparing to unpack .../libasan0_4.8.4-2ubuntu1~14.04.3_amd64.deb ...
Unpacking libasan0:amd64 (4.8.4-2ubuntu1~14.04.3) ...
Selecting previously unselected package libatomic1:amd64.
Preparing to unpack .../libatomic1_4.8.4-2ubuntu1~14.04.3_amd64.deb ...
Unpacking libatomic1:amd64 (4.8.4-2ubuntu1~14.04.3) ...
Selecting previously unselected package libgmp10:amd64.
Preparing to unpack .../libgmp10_2%3a5.1.3+dfsg-1ubuntu1_amd64.deb ...
Unpacking libgmp10:amd64 (2:5.1.3+dfsg-1ubuntu1) ...
Selecting previously unselected package libisl10:amd64.
Preparing to unpack .../libisl10_0.12.2-1_amd64.deb ...
Unpacking libisl10:amd64 (0.12.2-1) ...
Selecting previously unselected package libcloog-isl4:amd64.
Preparing to unpack .../libcloog-isl4_0.18.2-1_amd64.deb ...
Unpacking libcloog-isl4:amd64 (0.18.2-1) ...
Selecting previously unselected package libgomp1:amd64.
Preparing to unpack .../libgomp1_4.8.4-2ubuntu1~14.04.3_amd64.deb ...
Unpacking libgomp1:amd64 (4.8.4-2ubuntu1~14.04.3) ...
Selecting previously unselected package libitm1:amd64.
Preparing to unpack .../libitm1_4.8.4-2ubuntu1~14.04.3_amd64.deb ...
….
….
….
Setting up libc6-dev:amd64 (2.19-0ubuntu6.9) ...
Setting up manpages-dev (3.54-1ubuntu1) ...
Setting up sysdig (0.15.0) ...
Loading new sysdig-0.15.0 DKMS files...
First Installation: checking all kernels...
Building only for 4.4.0-31-generic
Building initial module for 4.4.0-31-generic
Done.
sysdig-probe:
Running module version sanity check.
   - Original module
   - No original module exists within this kernel
   - Installation
   - Installing to /lib/modules/4.4.0-31-generic/updates/dkms/
depmod........
DKMS: install completed.
Processing triggers for libc-bin (2.19-0ubuntu6.9) ...

使用 Sysdig 进行实时监控。

Sysdig 将显示实时事件,它需要 root 权限才能读取和显示大量信息,向下滚动以停止滚动,您需要按 Ctrl+C。

$ sudo sysdig
Output:
213255 14:48:08.119708299 0 sshd (26013) > clock_gettime
2213256 14:48:08.119708499 0 sshd (26013) < clock_gettime
2213257 14:48:08.119708799 0 sshd (26013) > select
2213258 14:48:08.119709599 0 sshd (26013) > switch next=31634(sysdig) pgft_maj=0 pgft_min=463 vm_size=106844 vm_rss=5588 vm_swap=0
2213260 14:48:08.119710899 0 sysdig (31634) > switch next=25919 pgft_maj=1 pgft_min=1045 vm_size=54480 vm_rss=7396 vm_swap=0
2213261 14:48:08.119711699 0 <NA> (25919) > switch next=31634(sysdig) pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
2213265 14:48:08.119719899 0 sysdig (31634) > switch next=25919 pgft_maj=1 pgft_min=1045 vm_size=54480 vm_rss=7396 vm_swap=0
2213266 14:48:08.119720699 0 <NA> (25919) > switch next=26013(sshd) pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
2213267 14:48:08.119721599 0 sshd (26013) < select res=1
2213268 14:48:08.119722099 0 sshd (26013) > rt_sigprocmask
2213269 14:48:08.119722299 0 sshd (26013) < rt_sigprocmask
2213270 14:48:08.119722399 0 sshd (26013) > rt_sigprocmask
2213271 14:48:08.119722599 0 sshd (26013) < rt_sigprocmask
2213272 14:48:08.119722899 0 sshd (26013) > clock_gettime
2213273 14:48:08.119722999 0 sshd (26013) < clock_gettime
2213274 14:48:08.119723299 0 sshd (26013) > read fd=11(<f>/dev/ptmx) size=16384
2213275 14:48:08.119723699 0 sshd (26013) < read res=59 data=..2178117 14:48:02.502229699 0 sshd (26013) < select res=1…
….
….
$ sudo sysdig –l
Output:
----------------------
Field Class: fd
fd.num              the unique number identifying the file descriptor.
fd.type             type of FD. Can be 'file', 'directory', 'ipv4', 'ipv6', 'unix',
                    'pipe', 'event', 'signalfd', 'eventpoll', 'inotify' or 'signal
                    fd'.
fd.typechar         type of FD as a single character. Can be 'f' for file, 4 for IP
                    v4 socket, 6 for IPv6 socket, 'u' for unix socket, p for pipe,
                    'e' for eventfd, 's' for signalfd, 'l' for eventpoll, 'i' for i
                    notify, 'o' for uknown.
fd.name             FD full name. If the fd is a file, this field contains the full
                    path. If the FD is a socket, this field contain the connection
                    tuple.
fd.directory        If the fd is a file, the directory that contains it.
fd.filename         If the fd is a file, the filename without the path.
fd.ip               matches the ip address (client or server) of the fd.
fd.cip              client IP address.
fd.sip              server IP address.
fd.lip              local IP address.
fd.rip              remote IP address.
fd.port             (FILTER ONLY) matches the port (either client or server) of the
                    fd.
…
…

这将显示 Sysdig 可用的过滤器列表,例如,这里我正在检查“proc.name”变量:

$ sudo sysdig proc.name=vi

默认情况下,它不会显示任何内容,因为 **vi** 未在机器上运行。因此,打开另一个终端并运行以下命令。

$ vi demo.txt

现在您可以在运行 sysdig 命令的终端中看到输出。

Output:
Code=0
55068 14:56:59.185080399 0 vi (31724) > switch next=7 pgft_maj=26 pgft_min=268 vm_size=39364 vm_rss=4944 vm_swap=0
55070 14:56:59.185091599 0 vi (31724) > stat
55071 14:56:59.185096899 0 vi (31724) < stat res=0 path=/usr/share/vim
55072 14:56:59.185159499 0 vi (31724) > switch next=0 pgft_maj=26 pgft_min=268 vm_size=39364 vm_rss=4944 vm_swap=0
55074 14:56:59.185892299 0 vi (31724) > getcwd
55075 14:56:59.185894399 0 vi (31724) < getcwd res=13 path=/home/ubuntu
55076 14:56:59.185897599 0 vi (31724) > stat
55077 14:56:59.185907799 0 vi (31724) < stat res=-2(ENOENT) path=test.txt(/home/ubuntu/test.txt)
55078 14:56:59.185992999 0 vi (31724) > rt_sigaction
55079 14:56:59.185995199 0 vi (31724) < rt_sigaction
55080 14:56:59.185995699 0 vi (31724) > rt_sigprocmask
55081 14:56:59.185997099 0 vi (31724) < rt_sigprocmask
55082 14:56:59.185997699 0 vi (31724) > rt_sigaction
55083 14:56:59.185998199 0 vi (31724) < rt_sigaction
55084 14:56:59.185998499 0 vi (31724) > rt_sigprocmask
55085 14:56:59.185998999 0 vi (31724) < rt_sigprocmask
55086 14:56:59.185999399 0 vi (31724) > rt_sigaction
55087 14:56:59.186000199 0 vi (31724) < rt_sigaction
55088 14:56:59.186000499 0 vi (31724) > rt_sigprocmask
55089 14:56:59.186000999 0 vi (31724) < rt_sigprocmask
55090 14:56:59.186001399 0 vi (31724) > rt_sigaction
55091 14:56:59.186001899 0 vi (31724) < rt_sigaction
55092 14:56:59.186002199 0 vi (31724) > rt_sigprocmask
55093 14:56:59.186002599 0 vi (31724) < rt_sigprocmask
55094 14:56:59.186003099 0 vi (31724) > rt_sigaction
55095 14:56:59.186003599 0 vi (31724) < rt_sigaction
..
..

使用 Sysdig 捕获系统活动。

  • Sysdig 可以将输出捕获到文件中,我们可以使用此文件使用 sysdig 命令的 –w 选项分析错误。

  • 如果我们想捕获特定行数,我们可以使用 –n xxx 选项在 sysdig 输出中捕获 xxx 行。

  • 如果我们想在特定大小后将文件拆分为不同的文件,我们可以使用 –C x(x 是以 MB 为单位的文件大小)。

  • 如果我们只想保留使用 –C 选项拆分为不同文件的文件的最新文件,我们可以使用 –W x,其中 x 是要保留的最新文件数。

将 sysdig 输出存储到文件

$ sudo sysdig -w sysdig_capture.scap

将前 200 行存储到输出文件。

$ sudo sysdig -n 200 -w sysdig_capture.scap

在特定大小后将文件拆分为部分。

$ sudo sysdig -C 1 -w sysdig_capture.scap

在特定大小后将文件拆分为部分并保留最新的 5 个文件。

$ sudo sysdig -C 1 -W 5 -w sysdig_capture.scap

分析我们捕获的 Sysdig 数据

我们可以使用旧的捕获数据文件使用 sysdig 命令的 –r 选项读取和分析数据。

$ sudo sysdig -r sysdig_capture.scap
Output:
1 15:04:33.894775099 0 sysdig (31733) > switch next=12473(mongod) pgft_maj=0 pgft_min=906 vm_size=54480 vm_rss=6884 vm_swap=0
2 15:04:33.894783299 0 mongod (12473) < futex res=-110(ETIMEDOUT)
3 15:04:33.894790999 0 mongod (12473) > clock_gettime
4 15:04:33.894810499 0 mongod (12473) < clock_gettime
5 15:04:33.894814999 0 mongod (12473) > gettimeofday
6 15:04:33.894816099 0 mongod (12473) < gettimeofday
7 15:04:33.894817799 0 mongod (12473) > clock_gettime
8 15:04:33.894818399 0 mongod (12473) < clock_gettime
9 15:04:33.894819999 0 mongod (12473) > futex addr=563CA6EBD888 op=129(FUTEX_PRIVATE_FLAG|FUTEX_WAKE) val=1
10 15:04:33.894822599 0 mongod (12473) < futex res=0
11 15:04:33.894823399 0 mongod (12473) > futex addr=563CA6EBD8B4 op=393(FUTEX_CLOCK_REALTIME|FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET) val=254170959
12 15:04:33.894849799 0 mongod (12473) > switch next=31733(sysdig) pgft_maj=0 pgft_min=0 vm_size=942732 vm_rss=224680 vm_swap=0
13 15:04:33.897110099 0 sysdig (31733) > switch next=7 pgft_maj=0 pgft_min=915 vm_size=54476 vm_rss=6884 vm_swap=0
14 15:04:33.897120099 0 <NA> (7) > switch next=3 pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
15 15:04:33.897139899 0 <NA> (3) > switch next=7 pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
16 15:04:33.897143899 0 <NA> (7) > switch next=31733(sysdig) pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
17 15:04:33.898006299 0 sysdig (31733) > switch next=12481(mongod) pgft_maj=0 pgft_min=915 vm_size=54476 vm_rss=6884 vm_swap=0
18 15:04:33.898013199 0 mongod (12481) < nanosleep res=0
19 15:04:33.898060499 0 mongod (12481) > gettimeofday
20 15:04:33.898062499 0 mongod (12481) < gettimeofday
…
…

用于系统监控和分析的 Csydig

Csysdig 是随 sysdig 软件包一起提供的实用程序,它具有一个界面,我们可以通过该界面交互式地使用 sysdig 可用的功能,它看起来像 top 命令,但具有非常好的功能。

$ sys csysdig

在本文中,我们学习了如何使用 sysdig 工具读取系统信息,这有助于我们读取和分析系统信息并解决与服务器相关的问题,我们还学习了具有用户界面的 csysdig 工具,以读取分析读取系统日志并找到解决问题的方法。

更新于: 2020年1月23日

148 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.