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

这篇具有很好参考价值的文章主要介绍了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

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

安装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)

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

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

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

 

执行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 <num_seconds> :多少秒后停止收集

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

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

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

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

• -w <filename>:保存到文件中

• -r <filename>:从文件中读取

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     #查看所有打开的文件文章来源地址https://www.toymoban.com/news/detail-452973.html

到了这里,关于kubernetes--分析容器系统调用:Sysdig的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Kubernetes上部署和管理容器化存储系统

    Kubernetes是一款容器编排系统,它可以帮助用户快速部署、扩展和管理复杂的容器化应用。容器化存储系统则是一种存储方式,它将数据存储在容器中,并可以在容器之间进行移动和共享。Kubernetes可以通过容器化存储系统来实现数据的持久化,从而保证应用的可靠性和高可用

    2024年02月08日
    浏览(48)
  • 【基于容器的部署、扩展和管理】3.1 容器编排系统和Kubernetes集群的构建

    往期回顾: 第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 基于容器的部署、扩展和管理是一种现代软件开发和部署的方式,它提供了快速、可重复、可移植的开发和部署流程,同时也简化了应用程序的扩展和管理。 在基于容器的部署中,应用程序

    2024年02月08日
    浏览(36)
  • 【云原生-深入理解 Kubernetes 系列 3】深入理解容器进程的文件系统

    【云原生-深入理解Kubernetes-1】容器的本质是进程 【云原生-深入理解Kubernetes-2】容器 Linux Cgroups 限制 大家好,我是秋意零。 😈 CSDN作者主页 😎 博客主页 👿 简介 👻 普通本科生在读 在校期间参与众多计算机相关比赛,如:🌟 “省赛”、“国赛” ,斩获多项奖项荣誉证书

    2024年02月06日
    浏览(39)
  • 【Linux 内核源码分析笔记】系统调用

    在Linux内核中,系统调用是用户空间程序与内核之间的接口,它允许用户空间程序请求内核执行特权操作或访问受保护的内核资源。系统调用提供了一种安全可控的方式,使用户程序能够利用内核功能而不直接访问底层硬件。 系统调用: 通过系统调用,用户程序可以请求内核

    2024年02月03日
    浏览(34)
  • 抛弃对外依赖,OpenEular(欧拉)操作系统为企业搭建独立的K8S集群环境! 容器编排平台丨Kubernetes 丨自主可控的云计算系统丨容器化技术丨 新一代云计算基础设施丨分布式应用部署和管理

    需要提前准备好OpenEular操作系统虚拟机3台,本文使用模板机创建。 如今,随着云计算、大数据、人工智能等技术的快速发展,越来越多的企业开始使用容器化技术来提高开发和交付速度。而Kubernetes则成为了最受欢迎的容器编排平台之一。然而,许多企业往往将Kubernetes部署在

    2024年02月11日
    浏览(59)
  • 《Linux内核源码分析》(2)进程原理及系统调用

    操作系统的作用 :作为硬件的使用层,提供使用硬件资源的能力, 进程的作用 :作为操作系统使用层,提供使用操作系统抽象出的资源层的能力 进程、线程和程序的区别 :进程指计算机中已运行的程序。进程本身不是基本的运行单位,而是线程的容器。 程序本身只是指令

    2024年02月07日
    浏览(40)
  • 1670_MIT 6.828 xv6中增加系统调用的实现与分析

             全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)          操作系统的任务调度切换,在xv6中其实是基于中断的方式来进行触发的。          在ttap处理的部分,调用了一个trap处理的C语言接口。          也就是上面的接口。

    2023年04月11日
    浏览(26)
  • 【kubernetes系列】kubernetes之initcontainer初始化容器

    Init Container就是用来做初始化工作的容器,可以是一个或者多个,如果有多个的话,这些容器会按定义的顺序依次执行,只有所有的Init Container执行完后,主容器才会被启动。我们知道一个Pod里面的所有容器是共享数据卷和网络命名空间的,所以Init Container里面产生的数据可以

    2024年02月12日
    浏览(34)
  • Kubernetes系列-容器状态介绍

    目录 1. 概述 2. 状态定义 Kubernetes 会跟踪 Pod 中每个容器的状态,就像它跟踪 Pod 总体上的阶段一样。 可以使用容器生命周期回调 来在容器生命周期中的特定时间点触发事件。 一旦调度器将 Pod 分派给某个节点,kubelet 就通过 容器运行时 开始为 Pod 创建容器。 容器的状态有

    2024年02月14日
    浏览(28)
  • 【容器编排】初识 Kubernetes

    目录 1.简介 2.为什么需要 k8s 3.k8s 能做什么? 4.k8s 不是什么? 1.简介 摘取官网: 概述 | Kubernetes         Kubernetes 这个名字源于希腊语,意为 舵手 或 飞行员 。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包