Telegraf 指标采集容器化部署实战指南:Docker 与 K8s 3 步跑通
【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf
Telegraf 是 InfluxData 的插件式指标采集代理(Agent),负责收集、处理并写入系统与服务指标。本文带你完成 Telegraf 容器化部署:先在 Docker 里用最小配置跑通第一次采集,再把它以 DaemonSet 形式部署到 Kubernetes 集群,并处理好最常见的锁内存告警与指标过滤问题。
为什么容器化:先选对基础镜像
Telegraf 提供两种官方 Docker 镜像,维护策略是 InfluxData 为最近三个次要版本持续提供安全更新(见 docs/DOCKER.md):
| 镜像 | 拉取命令 | 特点 | 适用场景 |
|---|---|---|---|
| Debian | docker pull telegraf | 依赖完整,兼容性好 | 生产环境,稳定性优先 |
| Alpine | docker pull telegraf:alpine | 体积小,资源占用低 | 边缘设备、资源受限节点 |
选型决策点只有一个:是否依赖 glibc 生态下的系统工具。没有特殊需求就选 Debian;节点资源紧张、只需采集指标时选 Alpine。
第一次跑起来:用 telegraf config 生成最小配置
让 Telegraf 自己生成配置
不要手写配置,先让程序打印出厂配置(docs/COMMANDS_AND_FLAGS.md):
docker run --rm telegraf config > telegraf.conf加过滤参数可以只导出你需要的插件段落:
telegraf config --input-filter cpu:mem --output-filter file最小可用配置长什么样
一个能启动的配置只需要三行:至少一个输入、一个输出(docs/QUICK_START.md):
[[inputs.cpu]] [[inputs.mem]] [[outputs.file]][[outputs.file]]的默认值是把指标写到stdout和/tmp/metrics.out(见 plugins/outputs/file/sample.conf),stdout 输出到容器日志,正好用来肉眼验证数据流。
Docker 启动:三步验证指标真的在流动
- 拉镜像:
docker pull telegraf - 生成配置:
docker run --rm telegraf config > telegraf.conf,删掉不需要的插件段,保留上面的最小三段 - 挂载配置启动:
docker run --rm \ --volume $PWD/telegraf.conf:/etc/telegraf/telegraf.conf \ telegraf启动日志会先打印加载的配置路径、版本和已加载插件,几秒后 stdout 开始输出 InfluxDB 行协议格式的指标(如cpu,host=xxx,cpu=cpu0 usage_system=...)。看到这一行,采集链路就算通了。
踩坑处理:锁内存告警与 --unprotected
Docker 部署中最常见的告警是:
W! Insufficient lockable memory 64kb when 72kb is required原因是 Telegraf 默认把密钥保存在锁定内存中,而容器内默认的可锁定内存(memlock)配额往往不够。两种处理方式(docs/DOCKER.md):
推荐:启动时用--ulimit提高配额:
docker run --rm --ulimit memlock=8192:8192 \ --volume $PWD/telegraf.conf:/etc/telegraf/telegraf.conf telegraf备选:给容器追加--unprotected参数,放弃内存锁定。密钥可能随页面交换写入磁盘,安全性降低,仅建议在测试环境使用。
如果告警升级成panic: could not acquire lock ... limit reached?导致容器退出,按同样方式处理即可。
部署到 Kubernetes:kubernetes 插件为什么要求 DaemonSet
Telegraf 的 kubernetes 插件 通过 kubelet API 读取每个节点上 Pod 与容器的指标。插件官方说明明确要求:它必须作为 DaemonSet 运行在集群的每个节点上,并且 URL 指向本节点的 kubelet:
[[inputs.kubernetes]] url = "http://127.0.0.1:10255" bearer_token = "/var/run/secrets/kubernetes.io/serviceaccount/token"对应的部署骨架是一个 DaemonSet 加一个 ConfigMap 卷:
kind: DaemonSet spec: template: spec: containers: - name: telegraf image: telegraf两个容易忽略的点:
- 高基数警告:该插件会按 Pod 维度产出大量标签组合,官方 README 明确提示要先做指标过滤,否则会给数据库带来高基数压力。过滤配置见 docs/CONFIGURATION.md 的 Metric filtering 一节。
- 敏感信息走环境变量:配置里可用
${VAR}引用环境变量(字符串需带引号),把输出地址、Token 等通过 K8s Secret 注入,避免写死在 ConfigMap 里。
按需调整:过滤指标与自监控
跑通之后再考虑三件事:
- 减少数据量:用
namepass/tagpass等过滤选项只保留关心的指标与标签,规则在 docs/CONFIGURATION.md 中有完整说明。 - 监控 Telegraf 自身:启用
[[inputs.internal]]并打开collect_memstats = true,可采集其内存与 goroutine 指标。 - 拆分配置:用
--config-directory指向一个目录,目录内所有.conf文件都会被合并加载,适合按插件逐个拆文件管理;主配置默认位置是/etc/telegraf/telegraf.conf。
到这里,单机验证和集群部署两条路径都走完了。下一步建议阅读 docs/CONFIGURATION.md 了解全局标签与插件排序,以及 docs/DOCKER.md 中的 Nightly 镜像与镜像构建细节。
【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考