tnblog
首页
视频
资源
登录

Kubernetes 故障排查工具Sysdig

6607人阅读 2022/3/31 15:18 总访问:3475972 评论:0 收藏:0 手机
分类: 容器编排

Kubernetes 故障排查工具Sysdig

简介


sysdig是一个系统监控、分析和排障的工具。


很多时候,系统级监控和故障排除仍然涉及使用 SSH 登录机器,并使用大量界面不一致的过时工具。许多这些经典的 Linux 工具在容器化环境中完全崩溃。Sysdig 将您的 Linux 工具包整合到一个单一、一致、易于使用的界面中。sysdig 独特的架构允许对容器进行深入检查,开箱即用,无需以任何方式检测容器本身。

Sysdig 通过安装到 Linux 内核并捕获系统调用和其他操作系统事件,在操作系统级别检测您的物理机和虚拟机。Sysdig 还可以为系统活动创建跟踪文件,类似于使用 tcpdump 和 Wireshark 等工具对网络执行的操作。这样,可以在以后分析问题,而不会丢失重要信息。丰富的系统状态存储在跟踪文件中,因此可以将捕获的活动放入完整的上下文中。

把 sysdig 想象成 strace + tcpdump + htop + iftop + lsof + …awesome sauce。

安装

自动安装


要一步自动安装 sysdig,只需运行以下命令。这是推荐的安装方法。

警告:安装脚本只会在验证所有要求后从 Draios APT/YUM 存储库安装 sysdig 包。

  1. curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash

在 Docker 容器内安装

  1. docker pull sysdig/sysdig
  2. 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


这样也可以

  1. sudo docker run --rm -i -t --privileged --net=host \
  2. -v /var/run/docker.sock:/host/var/run/docker.sock \
  3. -v /dev:/host/dev \
  4. -v /proc:/host/proc:ro \
  5. -v /boot:/host/boot:ro \
  6. -v /src:/src \
  7. -v /lib/modules:/host/lib/modules:ro \
  8. -v /usr:/host/usr:ro \
  9. -v /etc:/host/etc:ro \
  10. docker.io/sysdig/sysdig

以非 root 用户身份使用 sysdig


Sysdig 必须以 root 身份运行,因为:
1.它需要扫描整个/proc文件系统
2.它需要访问/dev/sysdig*设备
3.它需要自动加载sysdig-probe内核模块以防它尚未加载
但是,有一个解决方案允许非 root 用户使用sudo.
首先创建一个您想要授予运行 sysdig 的权限的组。

  1. groupadd sysdig


将能够运行 sysdig 的用户添加到该组。

  1. usermod -aG sysdig alice
  2. usermod -aG sysdig bob


用于visudo编辑sudo-config。添加该行%sysdig ALL= /path/to/sysdig并保存。该路径最有可能/usr/local/bin/sysdig,但您可以通过运行来确定which sysdig
现在允许 sysdig 组的每个成员使用该sudo命令,但仅限于 sysdig 二进制文件。

Sysdig 示例

查看网络带宽使用率最高的进程

  1. sysdig -c topprocs_net

显示与主机 172.17.0.38 交互的网络数据


作为二进制

  1. sysdig -s2000 -X -c echo_fds fd.cip=172.17.0.38


作为ASCII

  1. sysdig -s2000 -A -c echo_fds fd.cip=172.17.0.38

查看本地服务器端口


查看与服务器端口,已经建立的连接(结果第一列是端口,第二列是连接数):

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


每个端口使用的字节数:

  1. sysdig -c fdbytes_by fd.sport

查看排名靠前的客户端 IP


与服务器已建立的连接的客户端

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


总字节数

  1. sysdig -c fdbytes_by fd.cip

列出所有不是 apache 服务的传入连接。

  1. sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"

容器

查看机器上运行的容器列表及其资源使用情况

  1. sudo csysdig -vcontainers

查看带有容器上下文的进程列表

  1. sudo csysdig -pc

查看 kube-controller 容器内运行的进程的 CPU 使用率

  1. sysdig -pc -c topprocs_cpu container.name=k8s_kube-controller-manager_kube-controller-manager-controlplane_kube-system_f9b9c6969be80756638e9cf4927b5881_0

查看 etcd 容器内运行的进程的网络带宽使用情况

  1. sudo sysdig -pc -c topprocs_net container.name=k8s_POD_etcd-controlplane_kube-system_2c805481b508b8c1f982fe7249ea6c02_0

查看 nginx 容器内使用最多网络带宽的进程

  1. sudo sysdig -pc -c topprocs_net container.name=nginx

查看 nginx 容器内 I/O 字节数排名靠前的文件

  1. sudo sysdig -pc -c topfiles_bytes container.name=nginx

查看 wordpress1 容器内的网络连接

  1. sudo sysdig -pc -c topconns container.name=wordpress1

显示在 wordpress1 容器内执行的所有交互式命令

  1. sudo sysdig -pc -c spy_users container.name=wordpress1

应用

查看机器发出的所有 GET HTTP 请求

  1. sudo sysdig -s 2000 -A -c echo_fds fd.port=80 and evt.buffer contains GET

查看机器所做的所有 SQL 选择查询

  1. sudo sysdig -s 2000 -A -c echo_fds evt.buffer contains SELECT

实时查看通过 apache 对外部 MySQL 服务器进行的查询

  1. sysdig -s 2000 -A -c echo_fds fd.sip=192.168.30.5 and proc.name=apache2 and evt.buffer contains SELECT

磁盘 I/O

查看磁盘带宽使用率最高的进程

  1. sysdig -c topprocs_file

列出使用大量文件的进程

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

查看读+写字节数排名靠前的文件

  1. sysdig -c topfiles_bytes

打印 apache 一直在读取或写入的顶级文件

  1. sysdig -c topfiles_bytes proc.name=httpd

基本 opensnoop:snoop 文件在发生时打开

  1. sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open

根据 R+W 磁盘活动查看顶级目录

  1. sysdig -c fdbytes_by fd.directory "fd.type=file"

查看 /tmp 目录中关于 R+W 磁盘活动的顶级文件

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

观察所有名为“passwd”的文件的 I/O 活动

  1. sysdig -A -c echo_fds "fd.filename=passwd"

按 FD 类型显示 I/O 活动

  1. sysdig -c fdbytes_by fd.type

进程和 CPU 使用率

查看 CPU 使用率最高的进程

  1. sysdig -c topprocs_cpu

观察一个进程的标准输出

  1. sysdig -s4096 -A -c stdout proc.name=cat

性能和错误

查看花费最多时间的文件

  1. sysdig -c topfiles_time

查看 apache 花费最多时间的文件

  1. sysdig -c topfiles_time proc.name=httpd

查看 I/O 错误最多的进程

  1. sysdig -c topprocs_errors

在 I/O 错误方面查看排名靠前的文件

  1. sysdig -c topfiles_errors

查看所有失败的磁盘 I/O 调用

  1. sysdig fd.type=file and evt.failed=true

查看 httpd 打开的所有失败文件

  1. sysdig "proc.name=httpd and evt.type=open and evt.failed=true"

查看花费最多时间的系统调用

  1. sysdig -c topscalls_time

查看返回错误最多的系统调用

  1. sysdig -c topscalls "evt.failed=true"

snoop failed 文件在发生时打开

  1. sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and evt.failed=true

打印延迟大于 1ms 的文件 I/O 调用

  1. sysdig -c fileslower 1

安全

显示用户“root”访问的目录

  1. sysdig -p"%evt.arg.path" "evt.type=chdir and user.name=root"

观察 ssh 活动

  1. sysdig -A -c echo_fds fd.name=/dev/ptmx and proc.name=sshd

显示在 /etc 中打开的每个文件

  1. sysdig evt.type=open and fd.name contains /etc

显示所有已启动“tar”命令的登录 shell 的 ID

  1. sysdig -r file.scap -c list_login_shells tar

显示给定 ID 的登录 shell 执行的所有命令

  1. sysdig -r trace.scap.gz -c spy_users proc.loginshellid=5459

sysdig 在取证分析中的应用:


钓鱼黑客:Linux 服务器攻击分析
钓鱼黑客:Linux 服务器攻击分析

追踪

创建跟踪以测量网站延迟

  1. echo ">::website-latency::" > /dev/null
  2. curl -s http://sysdig.org > /dev/null
  3. echo "<::website-latency::" > /dev/null

测量由登录尝试定义的范围,由线程标识:

  1. echo ">:t:login:username=loris:" > /dev/null
  2. echo "<:t:login::" > /dev/null

常见问题


使用运行时检测工具检测redis这个pod下的单个容器中反常的和频繁发生异常的进程。
至少分析容器30s,使用过滤器检测最新的异常进程,将事件文件存储在/opt/2/report中,其中包含检测到的事件,每行一个事件按照以下格式保存:

  1. [timestamp],[uid],[processName]


保持工具的原始时间戳格式不变。
确保将事件文件存储在群集的工作节点上。

  1. # 找到redis中的容器
  2. docker ps | grep redis
  3. # 检测与写入
  4. sysdig -M 30 -p "*%evt.time,%user.uid,%proc.name" container.id=[redisid] > /opt/2/report

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
2
文章
636
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术