kubernetes--分析容器系统调用:Sysdig

目录

Sysdig介绍:

sysdig工作流程

安装Sysdig

sysdig常用参数:

sysdig过滤:

sysdig之Chisels(工具箱):

其他常用命令


Sysdig介绍:

       Sysdig是一个非常强大的系统监控分析和故障排查工具。汇聚strace+tcpdump+iftop+lsof工具功能为一身。

       sysdig除了能获取系统资源利用率、进程、网络连接、系统调等信息,还具备了很强的分析能力,例如:

       1.按照CPU使用率对进程排序

       2.按照数据包对进程排序

       3.打开最多文件描述符进程

       4.查看进程打开了哪些文件

       5.查看进程HTTP请求报文

       6.查看机器上容器列表及资源使用情况

项目地址:https://github.com/draios/sysdig

文档:https://github.com/draios/sysdig/wiki

sysdig工作流程

sysdig通过内核的驱动模块注册系统调用hook,这样当有系统调用发生和完成的时候,它会把系统调用信息拷贝到特定的bugger,然后用户态组件对数据信息处理(解压、解析、过滤等,)并最终通过sysdig命令行和用户进行交互

kubernetes--分析容器系统调用:Sysdig_第1张图片

在内核中加入了模块,通过该模块获取了系统调用的信息,该模块类似与拦截器,当有系统调用时,就会把系统调用所涉及的信息捕捉,用户层面的模块会对该数据就行解析过滤。

安装Sysdig

先升级下内核

【】yum -y install kernel-3.10.0-1160.el7.x86_64

【】yum -y install kernel-devel-3.10.0-1160.el7.x86_64

【】awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

【】grub2-set-default 0

自动安装

curl -s https://download.sysdig.com/stable/install-sysdig | sudo bash

上面是一个shell 脚本,会识别常用的linux发行版本,并根据对应的版本配置源,最后是安装sysdig包。在redhat/centos上首先会配置的是epel ,配置该源的目的是安装dkms包;然后会配置draios源,通过该源可以安装sysdig包。最后在装sysdig包之前还会先安装kernel-devel包。

手动安装

默认源里少个依赖需要repo源

【】rpm --import https://download.sysdig.com/DRAIOS-GPG-KEY.public

 

【】curl -s -o /etc/yum.repos.d/draios.repo https://download.sysdig.com/stable/rpm/draios.repo

【】yum install epel-release -y

【】yum install sysdig -y

【】yum -y install kernel-devel-$(uname -r)

 

【】/usr/bin/sysdig-probe-loader # 加载驱动模块

kubernetes--分析容器系统调用:Sysdig_第2张图片

 

执行sysdig命令,实时输出大量系统调用。

示例:59509 23:59:19.023099531 0 kubelet (1738) < epoll_ctl

格式:%evt.num %evt.outputtime %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info

• evt.num 递增的事件号

• evt.time 事件发生的时间

• evt.cpu 事件被捕获时所在的 CPU,也就是系统调用是在哪个 CPU 执行的

• proc.name 生成事件的进程名字

• thread.tid 线程的 id,如果是单线程的程序,这也是进程的 pid

• evt.dir 事件的方向(direction),> 代表进入事件,< 代表退出事件

• evt.type 事件的名称,比如 openstat等,一般是系统调用

• evt.args 事件的参数。如果是系统调用,这些对应着系统调用的参数

自定义格式输出:sysdig -p "user:%user.name time:%evt.time proc_name:%proc.name"

sysdig -l列出支持字段

sysdig常用参数:

sysdig命令直接执行后显示的是个进程对linux的系统调用

• -l, --list:列出可用于过滤和输出的字段

• -M :多少秒后停止收集

• -p , --print= :指定打印事件时使用的格式

    • 使用-pc-pcontainer 容器友好的格式

    • 使用-pk-pkubernetes k8s友好的格式

• -c :指定内置工具,可直接完成具体的数据聚合、分析工作

• -w :保存到文件中

• -r :从文件中读取

sysdig过滤:

• fd:根据文件描述符过滤,比如 fd 标号(fd.num)、fd 名字(fd.name

• process:根据进程信息过滤,比如进程 idproc.id)、进程名(proc.name

• evt:根据事件信息过滤,比如事件编号、事件名

• user:根据用户信息过滤,比如用户 id、用户名、用户 home 目录

• syslog:根据系统日志过滤,比如日志的严重程度、日志的内容

• container:根据容器信息过滤,比如容器ID、容器名称、容器镜像

示列:

1、查看一个进程的系统调用

【】sysdig proc.name=kubelet

2、查看建立TCP连接的事件

【】sysdig evt.type=accept

3、查看/etc目录下打开的文件描述符

【】sysdig fd.name contains /etc

4、查看容器的系统调用

【】docker run -d --name=web --image=nginx

【】sysdig -M 10 container.name=web

注:还支持运算操作符,=、!=、>=、>、<、<=、contains、in 、exists、and、or、not

被黑后可用观察资源占用大的节点,通过sysdig对容器逐个分析

sysdig之Chisels(工具箱):

Chisels:实用的工具箱,一组预定义的功能集合,用来分析特定的场景。

sysdig –cl 列出所有Chisels以下是一些常用的:

• topprocs_cpu:输出按照 CPU 使用率排序的进程列表,例如sysdig -c

• topprocs_net:输出进程使用网络TOP

• topprocs_file:进程读写磁盘文件TOP

• topfiles_bytes:读写磁盘文件TOP

• netstat:列出网络的连接情况

网络

# 查看使用网络的进程TOP

sysdig -c topprocs_net

# 查看建立连接的端口10秒内

sysdig -c fdcount_by fd.sport "evt.type=accept" -M 10

# 查看建立连接的端口10秒内

sysdig -c fdbytes_by fd.sport

# 查看建立连接的IP10秒内

sysdig -c fdcount_by fd.cip "evt.type=accept" -M 10

# 查看建立连接的IP

sysdig -c fdbytes_by fd.cip

硬盘

# 查看进程磁盘I/O读写

sysdig -c topprocs_file

# 查看进程打开的文件描述符数量

sysdig -c fdcount_by proc.name "fd.type=file" -M 10

# 查看读写磁盘文件

sysdig -c topfiles_bytes

sysdig -c topfiles_bytes proc.name=etcd

# 查看/tmp目录读写磁盘活动文件

sysdig -c fdbytes_by fd.filename "fd.directory=/tmp/"

CPU

# 查看CPU使用率TOP

sysdig -c topprocs_cpu

# 查看容器CPU使用率TOP

sysdig -pc -c topprocs_cpu container.name=web

sysdig -pc -c topprocs_cpu container.id=web

容器

# 查看机器上容器列表及资源使用情况

csysdig –vcontainers

# 查看容器资源使用TOP  CPU  net  file

sysdig -c topcontainers_cpu/topcontainers_net/topcontainers_file

其他常用命令

csysdig #图形化所有进程

sysdig -c netstat  #查看所有网络连接

sysdig -c ps    #类似于os命令

sysdif -c lsof     #查看所有打开的文件

你可能感兴趣的:(kubenetes,网络,运维,kubernetes,安全,容器)