tetragon 启动后无事件的核心原因是默认禁用运行时追踪,需将配置中 enableruntimetracing 设为 true,并确保 runtimesocketpath 与实际容器运行时(如 containerd 的 /run/containerd/containerd.sock)匹配。

为什么 tetragon 启动后没看到任何事件?
常见现象是容器跑起来了,tetragon 也 systemctl start tetragon 成功了,但 tetragon-cli getevents 一直空着,或者只偶尔蹦一两条。核心原因不是策略没生效,而是默认配置下它根本没启用 eBPF 探针——尤其是对容器运行时的追踪被关掉了。
- 检查
/etc/tetragon/tetragon.yaml里enableRuntimeTracing必须设为true,否则连execve都抓不到 -
runtimeSocketPath要和你实际用的容器运行时对上:Docker 是/var/run/docker.sock,containerd 是/run/containerd/containerd.sock,填错就静默失败 - 确认内核支持:Tetragon 依赖
bpf_probe_read_user和perf_event_output,5.10+ 较稳;低于 5.4 基本别试,ebpf: operation not supported就是这个信号
写 TetragonPolicy 时 process.exec.file.path 匹配总失效?
这不是正则写错了,而是路径在 eBPF 层拿到的是「运行时解析后的绝对路径」,不是你 exec.Command 里写的相对名或 $PATH 查找结果。比如你在 shell 里敲 ls,eBPF 捕获到的几乎总是 /usr/bin/ls,而非 ls。
- 用
tetragon-cli getevents -o json | jq '.process.exec.file.path'先抓几条真实事件,看实际路径长什么样 - 策略里写匹配要带通配符:
/usr/bin/*或/bin/sh,别写sh - 注意容器镜像里的路径差异:Alpine 的
sh在/bin/sh,Ubuntu 可能在/usr/bin/sh(其实是 dash),不同 base 镜像得分开写策略
tetragon-cli getevents 返回 context deadline exceeded
这通常不是网络问题,而是 Tetragon 的事件缓冲区溢出或 gRPC 流控触发了超时。默认 buffer 太小(尤其高负载环境),客户端等不到数据就直接断连。
sdxShop是一款完全开源免费的网上独立建店系统,asp+access,程序经过专业团队开发升级发展了7年,功能和安全性已经达到非常成熟稳定,安装容易,一分钟就可以搭起专业的电子商务网站。该免费版功能完整永久免费,主要特色功能淘宝数据表导入,实现网店和淘宝网店数据统一,拓展网店经营策略,提供5种在线支付接口等等。
- 调大服务端 buffer:在
tetragon.yaml加eventQueueSize: 65536(默认是 8192) - CLI 端加参数控制消费节奏:
tetragon-cli getevents --limit 100 --timeout 30s,避免单次拉太多卡死 - 如果只是调试用,临时关掉高频率事件源,比如把
tracepoint/syscalls/sys_enter_openat这类策略先注释掉,它们极易撑爆队列
用 kubectl apply -f policy.yaml 加策略但没生效?
Kubernetes CRD 方式部署策略,最常被忽略的是命名空间绑定和 selector 匹配逻辑。Tetragon 不会全局生效,它严格按 spec.k8sSelector 和 spec.processSelector 两级过滤。
立即学习“Python免费学习笔记(深入)”;
- 确认你的 Pod 所在 namespace 有
app: nginx标签,而策略里写的k8sSelector: { matchLabels: { app: nginx } }——少个空格或大小写不一致都会跳过 -
processSelector是 AND 关系:同时满足binary: /bin/bash和args: ["/tmp/malware.sh"]才触发,别指望 OR 逻辑 - 策略加载后不会立刻重放历史进程,只捕获新启动的进程。改完策略记得
kubectl delete pod重建目标容器
真正麻烦的是跨命名空间的策略继承和 SELinux 上下文干扰——这两块文档极少提,但一旦开了 SELinux,execve 事件可能被 kernel audit subsystem 截断,Tetragon 就收不到原始参数。









