如何用LTTng采集容器内追踪数据?现有方案是否可行及优化
容器内LTTng追踪数据采集的配置方案与优化疑问
需求概述
我正在寻找支持采集容器内生成追踪数据的、便捷且易维护的LTTng配置。
已尝试的基础方案
主机端组件
- lttng-sessiond(支持root/普通用户启动)
- lttng-relayd(支持root/普通用户启动)
容器端组件
- 基于liblttng-ust的可执行程序
核心逻辑
在主机上创建快照和实时会话,过滤包含特定字段的追踪数据;容器仅负责生成追踪数据。
容器启动配置示例
root用户启动lttng-sessiond的容器启动命令
podman run \ -v /var/run/lttng:/var/run/lttng \ -v /dev/shm/lttng-ust-wait-8:/dev/shm/lttng-ust-wait-8 \ -e LTTNG_HOME=/root \ image-with-liblttng-ust
其中image-with-liblttng-ust是包含基于liblttng-ust生成追踪数据的可执行程序的镜像。
普通用户启动lttng-sessiond的容器启动命令
podman run \ -v /home/username/.lttng:/var/run/lttng \ -v /dev/shm/lttng-ust-wait-8-1000:/dev/shm/lttng-ust-wait-8 \ -e LTTNG_HOME=/root \ image-with-liblttng-ust
当前配置的优缺点
挂载LTTng运行时目录
- 优点:通过挂载整个目录建立lttng-sessiond与liblttng-ust的通信,可维护性优于仅挂载单个socket文件(
/home/username/.lttng/lttng-ust-sock-8)。 - 无明显缺陷。
挂载共享内存文件
- 缺点:该文件位于运行时目录之外,并非目录;文件名包含ABI版本和UID,每次LTTng更新都需验证文件名,维护成本高。
测试过的挂载组合
| HOST RUNDIR | CONTAINER RUNDIR | HOST SHM | CONTAINER SHM | WORKS |
|---|---|---|---|---|
| /home/username/.lttng | /root/.lttng | /dev/shm/lttng-ust-wait-8-1000 | /dev/shm/lttng-ust-wait-8-0 | yes |
| /home/username/.lttng | /var/run/lttng | /dev/shm/lttng-ust-wait-8-1000 | /dev/shm/lttng-ust-wait-8 | yes |
| /var/run/lttng | /var/run/lttng | /dev/shm/lttng-ust-wait-8 | /dev/shm/lttng-ust-wait-8 | yes |
| /var/run/lttng | /root/.lttng | /dev/shm/lttng-ust-wait-8 | /dev/shm/lttng-ust-wait-8-0 | no |
| /home/username/.lttng | /root/.lttng | /dev/shm/lttng-ust-wait-8-1000 | /dev/shm/lttng-ust-wait-8 | no |
疑问
- 当前方案是否可用于实现容器追踪数据采集?
- 是否存在更优的、更易维护的配置选项?
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

