Sysdig容器监控

sysdig 与容器

容器内进程和宿主机操作系统共享内核,这意味着你能直接在宿主机上观察到容器内进程的运行及资源使用。但目前来说我们常用的ps、top等工具还不能很好地区分这些进程,而sysdig则做到了这点,并做得很全面。

简而言之,sysdig使用了一个能够捕获到内核和容器间交流的内核模块,使得它能够利用来源操作系统或容器的生成的事件数据流

CPU监控

licontainers 能检查在机器上运行的所有容器

$ sudo sysdig -c lscontainers
container.type container.image container.name      container.id
-------------- --------------- ------------------- ------------
docker         tutum/haproxy   haproxy             49a74cb89f61
docker         wordpress       wordpress2          9bcff18fc4b4
lxc                            test                test
docker         wordpress       wordpress1          0c34fe20f1fd
docker         mysql           mysql               a0188c8bbf51

topcontainers_cpu 能检查所有运行中容器的CPU使用情况

$ sudo sysdig -c topcontainers_cpu
CPU%            container.name
-----------------------------------------------------------------------
90.13%          mysql
15.93%          wordpress1
7.27%           haproxy

-pc(or -pcontainer)命令行参数能让sysdig输出容器的上下文信息
sysdig提供了topprocs_cpu的chisel工具来展示CPU使用率最高的进程,同时使用-pc 选项,就能看到每一个进程属于那个容器
$ sudo sysdig -pc -c topprocs_cpu
注意:-pc 选项会在所有的sysdig输出中添加容器上下文信息(因为其本质就是一种信息的输出格式)
如果我们想专注于某个容器的进程信息,可以在原来命令的基础上使用sysdig的filter过滤器

$ sudo sysdig -pc -c topprocs_cpu container.name=client
CPU%            Process         container.name
----------------------------------------------
02.69%         bash            client
31.04%         curl            client

$ sudo sysdig -pc -c topprocs_cpu container.name contains wordpress
CPU%            Process         container.name
--------------------------------------------------
6.38%          apache2         wordpress3
7.37%          apache2         wordpress2
5.89%          apache2         wordpress4

网络监控

topcontainers_net 可以查看容器的网络使用情况

$ sudo sysdig -pc -c topcontainers_net
Bytes           container.name
------------------------------------------
8.48KB          mysql
5.30KB          haproxy
4.27KB          wordpress3

topprocs_net 可以查看容器进程的网络使用情况

$ sudo sysdig -pc -c topprocs_net
Bytes        Process      Host_pid     Container_pid   container.name
---------------------------------------------------------------
72.06KB      haproxy      7385         13           haproxy
56.96KB      docker.io    1775         7039         host
44.45KB      mysqld       6995         99           mysql
29.36KB      apache2      7893         124          wordpress1

topconns 可以查看容器使用最高的连接情况(socket呈现)

$ sudo sysdig -pc -c topconns
Bytes        container.name  Proto        Conn
--------------------------------------------------------------------------------
22.23KB      wordpress3     tcp         172.17.0.5:46955->172.17.0.2:3306
22.23KB      wordpress1     tcp         172.17.0.3:47244->172.17.0.2:3306
22.23KB      mysql          tcp         172.17.0.5:46971->172.17.0.2:3306

同理我们也可以使用filter进一步的筛选
sudo sysdig -pc -c topconns container name=mysql
还可以更复杂地使用sysdig,以下命令会实时打印mysql容器建立的新连接

$ sysdig -p"%fd.name" container.name=mysql and evt.type=accept
172.17.0.4:54167->172.17.0.2:3306
172.17.0.5:43257->172.17.0.2:3306
172.17.0.6:50011->172.17.0.2:3306

显示wordpress1容器在端口80发送和接收到的数据

$ sudo sysdig -A -cecho_fds container.name=wordpress1 and fd.port=80
------ Read 103B from   172.17.0.7:53430->172.17.0.3:80 (apache2)
GET / HTTP/1.1
User-Agent: curl/7.35.0
Host: 172.17.0.7
Accept: */*
X-Forwarded-For: 172.17.0.8

------ Write 346B to   172.17.0.7:53430->172.17.0.3:80 (apache2)
HTTP/1.1 302 Found
Date: Sat, 21 Feb 2015 00:23:37 GMT
Server: Apache/2.4.10 (Debian) PHP/5.6.6
X-Powered-By: PHP/5.6.6
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Location: http://172.17.0.7/wp-admin/install.php
Content-Length: 0
Content-Type: text/html; charset=UTF-8

磁盘I/O监控

topcontainers_file 可以查看Disk I/O 最多的几个容器

$ sudo sysdig -c topcontainers_file
Bytes           container.name
--------------------------------------------------------------------
6.79KB          mysql
4.11KB          haproxy
2.13KB          wordpress4

topprocs_file 可以查看Disk I/O 最多的几个进程

$ sudo sysdig -pc -c topprocs_file
Bytes           Process         Host_pid        Container_pid   container.name
--------------------------------------------------------------------------------
63.21KB         mysqld          11126           83              mysql
29.25KB         curl            47169           11400           client
29.25KB         curl            47167           11398           client

topfiles_bytes 可以查看Disk I/O 最多的几个文件

$ sudo sysdig -pc -c topfiles_bytes
Bytes           container.name  Filename
--------------------------------------------------------------------------------
63.21KB         mysql           /tmp/#sql_1_0.MYI
6.50KB          client          /lib/x86_64-linux-gnu/libc.so.6
3.25KB          client          /lib/x86_64-linux-gnu/libpthread.so.0

查看某个文件的活动(无论它属于那个容器)
sudo sysdig -pc -c echo_fds "fd.name=/etc/passwd"

可视化容器文件I/O的活动情况
sudo sysdig -c spectrogram fd.type=file and container.name=mysql

sg.gif

关于用户跟踪,日志和容器间请求流的小技巧

监控容器内的用户活动 spy_users
$ sudo sysdig# ./sysdig -pc -c spy_users
43760 13:35:18 root@client) sleep 0.1
43760 13:35:18 root@client) curl 172.17.0.7
43760 13:35:18 root@client) sleep 0.1

使用filter过滤器筛选 $sudo sysdig# ./sysdig -pc -c spy_users container.name=mysql

查看多个容器的末尾日志(tail)

Docker官方鼓励容器进程将日志输出到标志输出stdout,但部分进程仍会输出到某个文件。
spy_logs 可以查看这些日志输出。它查看所有容器内外以.log 和 _log 结尾的文件的缓冲区

$ sudo sysdig -pc -cspy_logs
wordpress3 apache2 /var/log/apache2/access.log 172.17.0.7 - - [21/Feb/2015:21:49:00 +0000] "GET / HTTP/1.1" 302 346 "-" "curl/7.35.0"
wordpress4 apache2 /var/log/apache2/access.log 172.17.0.7 - - [21/Feb/2015:21:49:01 +0000] "GET / HTTP/1.1" 302 346 "-" "curl/7.35.0"

$ sudo sysdig -pc -cspy_logs container.name=wordpress1
wordpress1 apache2 /var/log/apache2/access.log 172.17.0.7 - - [21/Feb/2015:21:55:18 +0000] "GET / HTTP/1.1" 302 346 "-" "curl/7.35.0"
观察容器间的应用请求数据流

以下内容中,filter 过滤器限制显示了两个应用间的流量,去除了多余信息。

$ sudo sysdig -pc -A -c echo_fds "fd.ip=172.17.0.3 and fd.ip=172.17.0.7"

------ Write 103B to  [haproxy] [d468ee81543a]  172.17.0.7:37557->172.17.0.3:80 (haproxy)
GET / HTTP/1.1
User-Agent: curl/7.35.0
Host: 172.17.0.7
Accept: */*
X-Forwarded-For: 172.17.0.8


------ Read 103B from  [wordpress1] [12b8c6a04031]  172.17.0.7:37557->172.17.0.3:80 (apache2)
GET / HTTP/1.1
User-Agent: curl/7.35.0
Host: 172.17.0.7
Accept: */*
X-Forwarded-For: 172.17.0.8


------ Write 346B to  [wordpress1] [12b8c6a04031]  172.17.0.7:37557->172.17.0.3:80 (apache2)
HTTP/1.1 302 Found
Date: Sat, 21 Feb 2015 22:19:18 GMT
Server: Apache/2.4.10 (Debian) PHP/5.6.6
X-Powered-By: PHP/5.6.6
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Location: http://172.17.0.7/wp-admin/install.php
Content-Length: 0
Content-Type: text/html; charset=UTF-8


------ Read 346B from  [haproxy] [d468ee81543a]  172.17.0.7:37557->172.17.0.3:80 (haproxy)
HTTP/1.1 302 Found
Date: Sat, 21 Feb 2015 22:19:18 GMT
Server: Apache/2.4.10 (Debian) PHP/5.6.6
X-Powered-By: PHP/5.6.6
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Location: http://172.17.0.7/wp-admin/install.php
Content-Length: 0
Content-Type: text/html; charset=UTF-8

参考资料:
https://sysdig.com/blog/let-light-sysdig-adds-container-visibility/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容