Sysdigまとめ

ホストやホスト上で動いているコンテナ内のパフォーマンスを調査するのに用いるモニタリングツール。機能的にはstrace + tcpdump + htop + iftop + lsof + wiresharkという感じ。Sysdig, Incで開発されています。

Sysdigのプロダクト

Sysdig(コマンドラインツール)

無料で使えるOSSコマンドラインで実行し、ホストのネットワーク使用量やCPU使用率などのデータを取得、出力します。

Sysdig Monitor(Sysdig Cloud)

Sysdigのクラウドサービス版。有料(14日間無料で試すことはできます)。マルチホストを監視できます。Web UIでデータの可視化を行い、グラフやトポロジマップで表示してくれます。UIがどのような感じかは下記リンクを参照。

sysdig.com

Sysdig Secure

最近登場しました。こちらは監視ではなく不正なアクティビティの検知やアクティビティに対する防御を行います。

Csysdig

ncursesのUIでSysdigを操作できるツール。キーボードだけでなくマウスを使って操作できます。

Sysdig(CLI)のインストールと基本的な操作

インストール

公式ページではcurlを使ってホストにインストールする方法が記載されていますが、Dockerコンテナを使って動かすこともできます。

ubuntu@v-Ubuntu:~$ docker run -i -t --name sysdig --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro sysdig/sysdig
Unable to find image 'sysdig/sysdig:latest' locally
latest: Pulling from sysdig/sysdig
5ee18ad89bbb: Pull complete 
0df9a726f587: Pull complete 
10dfb8125473: Pull complete 
4c0f501362c5: Pull complete 
d0f942a47466: Pull complete 
7d758ff40f0c: Pull complete 
72370828a004: Pull complete 
99e1fcab44cd: Pull complete 
Digest: sha256:08b868f4a955a4ad1f819a85d40325b3317a322f186fe6a1526e75be1b29cd4f
Status: Downloaded newer image for sysdig/sysdig:latest
* Setting up /usr/src links from host
* Unloading sysdig-probe, if present
rmmod: ERROR: Module sysdig_probe is not currently loaded
* Running dkms install for sysdig

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area...
make -j2 KERNELRELEASE=4.4.0-87-generic -C /lib/modules/4.4.0-87-generic/build M=/var/lib/dkms/sysdig/0.20.0/build....
cleaning build area...

DKMS: build completed.

sysdig-probe.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.4.0-87-generic/kernel/extra/
mkdir: cannot create directory '/lib/modules/4.4.0-87-generic/kernel/extra': Read-only file system
cp: cannot create regular file '/lib/modules/4.4.0-87-generic/kernel/extra/sysdig-probe.ko': No such file or directory

depmod............

DKMS: install completed.
* Trying to load a dkms sysdig-probe, if present
sysdig-probe found and loaded in dkms
root@1fe69d5a283f:/# 

シンプルにsysdigとコマンドを実行すると、CPU使用率やファイルI/Oなどの様々な情報がザーッとコンソールに出力されます。

sysdig -lの一覧に存在するクラスで、出力されるデータにフィルタをかけることができます。以下はフィルタリングをかけてflanneldに関するデータのみを表示した例です。

root@1fe69d5a283f:/# sysdig proc.name=flanneld
31317 08:59:55.113981016 0 flanneld (2225) < futex res=-110(ETIMEDOUT) 
31318 08:59:55.113988642 0 flanneld (2225) > futex addr=26E9098 op=1(FUTEX_WAKE) val=1 
31319 08:59:55.113992103 0 flanneld (2225) < futex res=1 
31320 08:59:55.113997149 0 flanneld (2225) > futex addr=C42049E110 op=1(FUTEX_WAKE) val=1 
31321 08:59:55.113999289 0 flanneld (2225) < futex res=1 
31322 08:59:55.114000321 0 flanneld (2225) > futex addr=C420027510 op=1(FUTEX_WAKE) val=1 
31323 08:59:55.114005857 0 flanneld (2225) < futex res=1 
...

-wオプションをつけることで、コンソールではなくファイルに出力することも可能です。-nオプションはいくつのイベントを取得したら出力をやめるかの設定。

root@1fe69d5a283f:/# sysdig proc.name=flanneld -n 100 -w fl.scap
root@1fe69d5a283f:/# ls -l fl.scap
-rw-r--r-- 1 root root 335436 Feb 12 09:07 fl.scap
root@1fe69d5a283f:/# 

sysdig -rでイベントファイルを読み込むこともできます。

root@1fe69d5a283f:/# sysdig -r fl.scap 
455 09:07:13.219583388 0 flanneld (2225) < futex res=-110(ETIMEDOUT) 
456 09:07:13.219592078 0 flanneld (2225) > futex addr=26E9098 op=1(FUTEX_WAKE) val=1 
457 09:07:13.219596891 0 flanneld (2225) < futex res=1 
458 09:07:13.219600364 0 flanneld (2225) > futex addr=C420027910 op=1(FUTEX_WAKE) val=1 
459 09:07:13.219603215 0 flanneld (2225) < futex res=1 
460 09:07:13.219604114 0 flanneld (2225) > futex addr=C4203E2510 op=1(FUTEX_WAKE) val=1 
...

チゼル

Sysdigで取得している特定のイベントストリームを分析するためのスクリプトのこと。Luaで書かれています。使用可能なチゼルの一覧はsysdig -clで表示できます。

sysdig -c topprocs_cpuでCPU使用率の高い稼働中プロセスを上位から出力。

f:id:etogen:20180219143640p:plain

-pcオプションをつけることで、どのコンテナで動いているプロセスなのかがわかるようになります。

f:id:etogen:20180219143630p:plain

Csysdig

Csysdigを使うにはcsysdigコマンドを実行します。ちなみに上記で使用したSysdigのDockerイメージにはCsysdigが入ってるので実行可能です。

f:id:etogen:20180219143652p:plain

ncursesのUIが表示されました。この画面では現在ホストに存在するプロセスがCPU使用率の順序でソートして表示されており、リアルタイムで更新されていきます。PIDでソートしたい場合は、ヘッダーのPIDの文字をクリックするか、キーボードのF9で表示される項目からPIDを選択するだけでソートできます。

現在はプロセスの一覧を表示していますが、F2キーから表示したいデータを変更することができます。具体的には以下の項目から選べます。

f:id:etogen:20180219143717p:plain

Containersを選択するとコンテナの一覧を表示します。

f:id:etogen:20180219143730p:plain

Sysdig Monitor & Kubernetes

Sysdig Monitorはライセンスを取得した後、監視対象のホストに下記リンクを参考にしてSysdig Agentのインストールを行えば使えるようになります。

support.sysdig.com

私はk8sにインストールしました。ダッシュボードはこんな感じです。

f:id:etogen:20180219144852p:plain

Prometheus + Grafanaだと1からダッシュボードを作らなきゃならなかったりするんですが(テンプレートはありますけどね)、Sysdig Monitorは元からいくつかのダッシュボードが完成されているので、すぐ利用できるのが利点です。