
Telegraf 容器化部署完全指南Docker 单机与 K8s 集群指标采集【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf机器一多挨个 SSH 上去装采集代理、再逐台改配置是一件让人想摔键盘的事集群扩缩容之后你还得记得去新节点补装。Telegraf 是 InfluxData 出品的开源代理Agent负责收集、处理、聚合并写入系统与应用的指标数据——把它容器化单机场景走 Docker 部署集群场景走 K8s 部署就是生产环境最常见的两种落地方式。30 秒选对 Telegraf 镜像镜像特点适用场景拉取命令telegrafDebian依赖完整、兼容性好生产环境稳定性优先docker pull telegraftelegraf:alpine体积小、启动快边缘设备、资源受限环境docker pull telegraf:alpine镜像选型不用纠结拿不准就选 Debian 版Alpine 版留给对镜像体积敏感的边缘节点。官方维护策略是 InfluxData 会为最近三个次要版本持续提供安全更新所以升级小版本基本无感。场景一单机与边缘的 Docker 快速启动生成一份基础配置用一次性容器把官方完整示例配置导出到本地后面只需在此基础上裁剪docker run --rm telegraf telegraf config telegraf.conf只保留最需要的插件示例配置里几百个插件全部是注释我们只留 agent 采集周期、一个 CPU 输入插件和 InfluxDB 输出目标其余保持注释即可[agent] interval 10s [[inputs.cpu]] percpu true totalcpu true [[outputs.influxdb]] urls [http://127.0.0.1:8086]启动容器并预防 memlock 警告配置以只读方式挂载--ulimit参数直接带上避免下面这个高频坑docker run -d --name telegraf \ -v $PWD/telegraf.conf:/etc/telegraf/telegraf.conf:ro \ --ulimit memlock8192:8192 telegraf你可能会撞上的报错日志出现W! Insufficient lockable memory 64kb when 72kb is required严重时直接panic: could not acquire lock。原因是 Telegraf 默认使用可锁定内存存放数据库口令、token 这类敏感信息防止密钥被换页写到磁盘而容器默认的 memlock 限额往往不够。解法就是启动时加--ulimit memlock8192:8192或在宿主机执行ulimit -l 8192。也有--unprotected参数可彻底关闭内存锁定但密钥可能落盘属于不推荐选项生产环境别用。场景二K8s 集群的 DaemonSet 规模化部署为什么推荐 DaemonSet ConfigMap Secret 组合inputs.kubernetes插件官方明确要求以 DaemonSet 形式运行、每个节点一个实例并对接本地 kubelet而 ConfigMap 让配置改一次全集群生效Secret 则把敏感信息从配置里剥离出去。DaemonSet 清单要点Pod 骨架部分selector与labels必须成对一致apiVersion: apps/v1 kind: DaemonSet metadata: name: telegraf spec: selector: matchLabels: {app: telegraf} template: metadata: labels: {app: telegraf}在spec.template.spec下补充容器定义resources 分两档requests 是调度器承诺的最低资源50m / 64Mi 保证 Pod 能被安排到节点limits 是运行期天花板100m / 128Mi 防止指标暴涨拖垮节点。两者给不同值就是为了平时够用、忙时封顶containers: - name: telegraf image: telegraf resources: requests: {cpu: 50m, memory: 64Mi} limits: {cpu: 100m, memory: 128Mi}节点规格大8 核以上时可放宽到 limits 200~300m / 256~512Mi。如果还要挂/var/run/docker.sock来启用 docker 输入插件记得以hostPath卷方式添加。ConfigMap 存放配置把上面的 TOML 配置放进 ConfigMap 供 DaemonSet 挂载。这里[[inputs.kubernetes]]特意指向本地 kubelet10255 端口意味着插件只和本机说话完全不碰 API Server权限要求直接归零apiVersion: v1 kind: ConfigMap metadata: name: telegraf-config data: telegraf.conf: | [agent] interval 10s [[inputs.kubernetes]] url http://127.0.0.1:10255数据库 token、访问密钥等敏感值单独建 Secret以文件形式挂载后在配置中引用路径别明文写在 ConfigMap 里——它没有加密kubectl get cm -o yaml谁都能看。RBAC仅集群模式需要只有当url留空插件会经 API Server 枚举所有节点再逐个访问 kubelet时才需要最小权限的 ClusterRole本地 kubelet 模式下可以跳过本节apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: telegraf rules: - apiGroups: [] resources: [nodes] verbs: [get, list]创建后还要补一个 ServiceAccount 和对应的 ClusterRoleBinding并在 Pod 的serviceAccountName中引用。权限只给nodes的get/list够用就好别顺手加watch或pods。生产加固清单上生产前按下面四项逐条过一遍非 root 运行自建镜像时追加USER telegraf拒绝以 root 身份采集指标只读根文件系统securityContext里设readOnlyRootFilesystem: true并给/tmp挂 emptyDir防止进程在磁盘上随意写文件收紧 capabilitycapabilities: {drop: [ALL]}仅当需要 ping 类插件时再加回NET_RAW监控 Telegraf 自身开启[[inputs.internal]]的collect_memstats true让内存统计也进指标库排障速查表症状可能原因解决Insufficient lockable memory警告或panic: could not acquire lock容器 memlock 限额过低docker run 加--ulimit memlock8192:8192--unprotected仅作临时验证K8s 下拿不到节点指标、日志出现forbiddenServiceAccount 权限缺失或绑定错误kubectl describe sa telegraf -n monitoring核对绑定集群模式确认 ClusterRole 含nodes的get/list日志报Error loading plugin插件名拼错或 TOML 语法错误用telegraf config check --config telegraf.conf静态校验插件名对照 plugins/inputs/ 目录Pod CrashLoopBackOff配置挂载失败或只读文件系统冲突kubectl logs看首行报错配置目录保持readOnly: true挂载可写路径另挂 emptyDir结尾单机或边缘设备直接 Docker 跑集群规模上 DaemonSet ConfigMap Secret按需二选一。未来官方镜像还会继续瘦身对 Prometheus ServiceMonitor 等生态的支持也会更顺方向上可以期待。有踩坑经验欢迎在评论区交流 资源速查容器化官方文档docs/DOCKER.md插件总目录plugins/Kubernetes 输入插件源码plugins/inputs/kubernetes/配置与过滤指南docs/CONFIGURATION.md输入插件列表plugins/inputs/【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考