首页
视频
资源
登录
原
Kubernetes 故障排查工具Sysdig
5198
人阅读
2022/3/31 15:18
总访问:
2654877
评论:
0
收藏:
0
手机
分类:
容器编排
![](https://img.tnblog.net/arcimg/hb/fcf08efe35c845e6941d7bd1d2c96434.png) >#Kubernetes 故障排查工具Sysdig [TOC] ## 简介 tn2>sysdig是一个系统监控、分析和排障的工具。 <br/> 很多时候,系统级监控和故障排除仍然涉及使用 SSH 登录机器,并使用大量界面不一致的过时工具。许多这些经典的 Linux 工具在容器化环境中完全崩溃。Sysdig 将您的 Linux 工具包整合到一个单一、一致、易于使用的界面中。sysdig 独特的架构允许对容器进行深入检查,开箱即用,无需以任何方式检测容器本身。<br/> Sysdig 通过安装到 Linux 内核并捕获系统调用和其他操作系统事件,在操作系统级别检测您的物理机和虚拟机。Sysdig 还可以为系统活动创建跟踪文件,类似于使用 tcpdump 和 Wireshark 等工具对网络执行的操作。这样,可以在以后分析问题,而不会丢失重要信息。丰富的系统状态存储在跟踪文件中,因此可以将捕获的活动放入完整的上下文中。<br/> 把 sysdig 想象成 strace + tcpdump + htop + iftop + lsof + ...awesome sauce。 ## 安装 >### 自动安装 tn2>要一步自动安装 sysdig,只需运行以下命令。这是推荐的安装方法。 tn>警告:安装脚本只会在验证所有要求后从 Draios APT/YUM 存储库安装 sysdig 包。 ```bash curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash ``` >### 在 Docker 容器内安装 ```bash docker pull sysdig/sysdig 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 ``` tn2>这样也可以 ```bash sudo docker run --rm -i -t --privileged --net=host \ -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 /src:/src \ -v /lib/modules:/host/lib/modules:ro \ -v /usr:/host/usr:ro \ -v /etc:/host/etc:ro \ docker.io/sysdig/sysdig ``` >### 以非 root 用户身份使用 sysdig tn2>Sysdig 必须以 root 身份运行,因为: 1.它需要扫描整个`/proc`文件系统 2.它需要访问`/dev/sysdig*`设备 3.它需要自动加载`sysdig-probe`内核模块以防它尚未加载 但是,有一个解决方案允许非 root 用户使用sudo. 首先创建一个您想要授予运行 sysdig 的权限的组。 ```bash groupadd sysdig ``` tn2>将能够运行 sysdig 的用户添加到该组。 ```bash usermod -aG sysdig alice usermod -aG sysdig bob ``` tn2>用于`visudo`编辑`sudo-config`。添加该行`%sysdig ALL= /path/to/sysdig`并保存。该路径最有可能`/usr/local/bin/sysdig`,但您可以通过运行来确定`which sysdig`。 现在允许 sysdig 组的每个成员使用该sudo命令,但仅限于 sysdig 二进制文件。 tn>更多安装方式请参考: https://github.com/draios/sysdig/wiki/How-to-Install-Sysdig-for-Linux https://github.com/draios/sysdig/wiki/How-to-Install-Sysdig-for-Windows-and-OSX ##Sysdig 示例 >### 查看网络带宽使用率最高的进程 ```bash sysdig -c topprocs_net ``` >### 显示与主机 172.17.0.38 交互的网络数据 tn2>作为二进制 ```bash sysdig -s2000 -X -c echo_fds fd.cip=172.17.0.38 ``` ![](https://img.tnblog.net/arcimg/hb/c9cd056f1da34d40ab03fd1e4017739d.png) tn2>作为ASCII ```bash sysdig -s2000 -A -c echo_fds fd.cip=172.17.0.38 ``` ![](https://img.tnblog.net/arcimg/hb/aefa0c5be5084df9bb2046e4171589b6.png) >### 查看本地服务器端口 tn2>查看与服务器端口,已经建立的连接(结果第一列是端口,第二列是连接数): ```bash sysdig -c fdcount_by fd.sport "evt.type=accept" ``` ![](https://img.tnblog.net/arcimg/hb/ead6842e7f6c4b5f9d0a365db57dce3c.png) tn2>每个端口使用的字节数: ```bash sysdig -c fdbytes_by fd.sport ``` >### 查看排名靠前的客户端 IP tn2>与服务器已建立的连接的客户端 ```bash sysdig -c fdcount_by fd.cip "evt.type=accept" ``` ![](https://img.tnblog.net/arcimg/hb/51b3734a9f0e481ba93027c2fec2dc74.png) tn2>总字节数 ```bash sysdig -c fdbytes_by fd.cip ``` >### 列出所有不是 apache 服务的传入连接。 ```bash sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd" ``` ![](https://img.tnblog.net/arcimg/hb/8f8f14329ce7472d8eab2990827d5c9d.png) ##容器 >### 查看机器上运行的容器列表及其资源使用情况 ```bash sudo csysdig -vcontainers ``` ![](https://img.tnblog.net/arcimg/hb/5d3184ad275349d1a436e4aa6d7f8090.png) >### 查看带有容器上下文的进程列表 ```bash sudo csysdig -pc ``` ![](https://img.tnblog.net/arcimg/hb/91963dbc605e4baa8dda8e0ebdad3e2a.png) >### 查看 kube-controller 容器内运行的进程的 CPU 使用率 ```bash sysdig -pc -c topprocs_cpu container.name=k8s_kube-controller-manager_kube-controller-manager-controlplane_kube-system_f9b9c6969be80756638e9cf4927b5881_0 ``` ![](https://img.tnblog.net/arcimg/hb/34e06ea1f31e44b3a98d9f5154ab87e4.png) >### 查看 etcd 容器内运行的进程的网络带宽使用情况 ```bash sudo sysdig -pc -c topprocs_net container.name=k8s_POD_etcd-controlplane_kube-system_2c805481b508b8c1f982fe7249ea6c02_0 ``` >### 查看 nginx 容器内使用最多网络带宽的进程 ```bash sudo sysdig -pc -c topprocs_net container.name=nginx ``` >### 查看 nginx 容器内 I/O 字节数排名靠前的文件 ```bash sudo sysdig -pc -c topfiles_bytes container.name=nginx ``` >### 查看 wordpress1 容器内的网络连接 ```bash sudo sysdig -pc -c topconns container.name=wordpress1 ``` >### 显示在 wordpress1 容器内执行的所有交互式命令 ```bash sudo sysdig -pc -c spy_users container.name=wordpress1 ``` ##应用 >### 查看机器发出的所有 GET HTTP 请求 ```bash sudo sysdig -s 2000 -A -c echo_fds fd.port=80 and evt.buffer contains GET ``` >### 查看机器所做的所有 SQL 选择查询 ```bash sudo sysdig -s 2000 -A -c echo_fds evt.buffer contains SELECT ``` >### 实时查看通过 apache 对外部 MySQL 服务器进行的查询 ```bash sysdig -s 2000 -A -c echo_fds fd.sip=192.168.30.5 and proc.name=apache2 and evt.buffer contains SELECT ``` ##磁盘 I/O >###查看磁盘带宽使用率最高的进程 ```bash sysdig -c topprocs_file ``` >###列出使用大量文件的进程 ```bash sysdig -c fdcount_by proc.name "fd.type=file" ``` >###查看读+写字节数排名靠前的文件 ```bash sysdig -c topfiles_bytes ``` >###打印 apache 一直在读取或写入的顶级文件 ```bash sysdig -c topfiles_bytes proc.name=httpd ``` >###基本 opensnoop:snoop 文件在发生时打开 ```bash sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open ``` >###根据 R+W 磁盘活动查看顶级目录 ```bash sysdig -c fdbytes_by fd.directory "fd.type=file" ``` >###查看 /tmp 目录中关于 R+W 磁盘活动的顶级文件 ```bash sysdig -c fdbytes_by fd.filename "fd.directory=/tmp/" ``` >###观察所有名为“passwd”的文件的 I/O 活动 ```bash sysdig -A -c echo_fds "fd.filename=passwd" ``` >###按 FD 类型显示 I/O 活动 ```bash sysdig -c fdbytes_by fd.type ``` ##进程和 CPU 使用率 >###查看 CPU 使用率最高的进程 ```bash sysdig -c topprocs_cpu ``` >###观察一个进程的标准输出 ```bash sysdig -s4096 -A -c stdout proc.name=cat ``` ##性能和错误 >###查看花费最多时间的文件 ```bash sysdig -c topfiles_time ``` >###查看 apache 花费最多时间的文件 ```bash sysdig -c topfiles_time proc.name=httpd ``` >###查看 I/O 错误最多的进程 ```bash sysdig -c topprocs_errors ``` >###在 I/O 错误方面查看排名靠前的文件 ```bash sysdig -c topfiles_errors ``` >###查看所有失败的磁盘 I/O 调用 ```bash sysdig fd.type=file and evt.failed=true ``` >###查看 httpd 打开的所有失败文件 ```bash sysdig "proc.name=httpd and evt.type=open and evt.failed=true" ``` >###查看花费最多时间的系统调用 ```bash sysdig -c topscalls_time ``` >###查看返回错误最多的系统调用 ```bash sysdig -c topscalls "evt.failed=true" ``` >###snoop failed 文件在发生时打开 ```bash sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and evt.failed=true ``` >###打印延迟大于 1ms 的文件 I/O 调用 ```bash sysdig -c fileslower 1 ``` ##安全 >###显示用户“root”访问的目录 ```bash sysdig -p"%evt.arg.path" "evt.type=chdir and user.name=root" ``` >###观察 ssh 活动 ```bash sysdig -A -c echo_fds fd.name=/dev/ptmx and proc.name=sshd ``` >###显示在 /etc 中打开的每个文件 ```bash sysdig evt.type=open and fd.name contains /etc ``` >###显示所有已启动“tar”命令的登录 shell 的 ID ```bash sysdig -r file.scap -c list_login_shells tar ``` >###显示给定 ID 的登录 shell 执行的所有命令 ```bash sysdig -r trace.scap.gz -c spy_users proc.loginshellid=5459 ``` >###sysdig 在取证分析中的应用: tn2><a href="http://draios.com/fishing-for-hackers/">钓鱼黑客:Linux 服务器攻击分析</a> <a href="http://draios.com/fishing-for-hackers-part-2/">钓鱼黑客:Linux 服务器攻击分析</a> ##追踪 >###创建跟踪以测量网站延迟 ```bash echo ">::website-latency::" > /dev/null curl -s http://sysdig.org > /dev/null echo "<::website-latency::" > /dev/null ``` >###测量由登录尝试定义的范围,由线程标识: ```bash echo ">:t:login:username=loris:" > /dev/null echo "<:t:login::" > /dev/null ``` tn>更多参考:https://github.com/draios/sysdig/wiki/Getting-Started ##常见问题 tn2>使用运行时检测工具检测redis这个pod下的单个容器中反常的和频繁发生异常的进程。 至少分析容器30s,使用过滤器检测最新的异常进程,将事件文件存储在`/opt/2/report`中,其中包含检测到的事件,每行一个事件按照以下格式保存: ```bash [timestamp],[uid],[processName] ``` tn2>保持工具的原始时间戳格式不变。 确保将事件文件存储在群集的工作节点上。 ```bash # 找到redis中的容器 docker ps | grep redis # 检测与写入 sysdig -M 30 -p "*%evt.time,%user.uid,%proc.name" container.id=[redisid] > /opt/2/report ```
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
171篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
4篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
Halcon
5篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术