如何在 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 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告