Telegraf 容器化部署单机三条命令跑通K8s 一个 DaemonSet 搞定【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegrafTelegraf 容器化部署做到位结果是这样单机上一个容器就能按周期把系统指标写进 InfluxDBK8s 里一个 DaemonSet 让每台节点自动出一份采集节点扩缩容不用改任何清单。下面按先选路 → 跑通最小部署 → 按场景深入的顺序讲用到的镜像和配置项都能在官方镜像与仓库文档里对得上。先选路单机还是集群先数节点再决定走哪条路——这个判断决定后面所有资源参数。三条信号只有一两台机器且没有现成集群直接 Docker 单机跑已有 K8s 环境或节点数会持续增长上 DaemonSet节点加入、退出时 Pod 自动跟随资源受限的边缘设备在镜像 tag 上换 alpine。判断维度信号走哪条路节点规模1–2 台、数量稳定Docker 单机集群现状已有 K8s或节点会持续增减K8s DaemonSet资源规模4 CPU 以下 / 8 CPU 以上镜像选 alpine / 放宽 CPU 与内存上限镜像只有两个官方选择默认 tag 是 Debian 版telegraf:alpine是轻量版。InfluxData 会为最近三个次要版本维护这两个镜像升级 tag 时留意版本窗口细节看 docs/DOCKER.md。最小可行部署三条命令跑起来其余参数默认即可。先拉镜像再生成一份完整示例配置——config create会把所有插件的示例段落打出来你只需要留下自己要的docker pull telegraf docker run --rm telegraf config create telegraf.conf打开生成的telegraf.conf只留两组段落一个输入、一个输出。比如[[inputs.cpu]]percpu true、totalcpu true加[[outputs.influxdb]]urls [http://influxdb:8086]其余段落注释掉。启动容器时把配置只读挂进去memlock 限额也在这一步带上省得后面回来补docker run -d --name telegraf \ -v $PWD/telegraf.conf:/etc/telegraf/telegraf.conf:ro \ --ulimit memlock8192:8192 \ telegraf--ulimit memlock平时可以不给但日志里一旦出现锁定内存警告就必须加原因在踩坑节里讲。启动后docker logs -f telegraf盯着等一两个采集周期InfluxDB 里能按 host tag 查到cpu点位单机这条线就算通了。按场景深入集群里真正要解决的只有两件事节点指标怎么采配置和权限怎么管。其余场景一句话带过在配置里加一段[[inputs.internal]]并打开collect_memstats true就能盯住 Telegraf 自己的内存水位想加什么插件翻一遍 plugins/inputs/ 目录找名字。集群节点采集DaemonSet 挂 kubelet节点采集的标准形态是 DaemonSet控制器保证每台节点恰好一个 Pod新节点进来它自动跟上这是选它而不是 Deployment 的原因。配置走 ConfigMap 下发密钥类信息不进清单apiVersion: v1 kind: ConfigMap metadata: name: telegraf-config namespace: monitoring data: telegraf.conf: | [agent] interval 10s [[inputs.kubernetes]] url http://127.0.0.1:10255 bearer_token /var/run/secrets/kubernetes.io/serviceaccount/token [[outputs.influxdb]] urls [http://influxdb.monitoring.svc:8086]这里有个容易搞混的点kubernetes插件读的是本节点的 kubelet127.0.0.1:10255不是 API server所以 Pod 里直接写 localhost 就能通token 就挂在服务账户的默认路径上。如果你要的是全集群对象清单node、pod、deployment 列表那是kube_inventory插件的活指向https://kubernetes.default.svc:443。全部可配项见 plugins/inputs/kubernetes/。DaemonSet 只列决策相关的字段selector、volumes 这类样板省略完整版照此补齐spec: template: spec: serviceAccountName: telegraf containers: - name: telegraf image: telegraf resources: limits: { cpu: 100m, memory: 128Mi } requests: { cpu: 50m, memory: 64Mi } volumeMounts: - name: config mountPath: /etc/telegraf资源参数按节点规模取4 CPU 以下的小节点limit 压到 50–100m CPU、64–128Mi 内存8 CPU 以上放宽到 200–300m、256–512Mi。如果还要用 docker 输入插件读容器指标再给容器追加一个 hostPath 挂载把宿主机的/var/run/docker.sock挂到同路径。配置与权限管理权限收敛分两层一层容器运行时一层 K8s RBAC。容器侧清单里指定非 root 用户Dockerfile 写法是USER telegraf再加securityContext的readOnlyRootFilesystem: true和最小 capability 集只需要网络原始套接字时留NET_RAW。这一步别省采集容器拿着 root 加可写根文件系统等于把宿主的门开了一半。RBAC 侧采集场景的权限面很小最小化规则长这样apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: telegraf rules: - apiGroups: [] resources: [nodes, pods] verbs: [get, list, watch]再把它绑定到telegraf服务账户上ClusterRoleBinding 从略。规则只有只读的 get/list/watch没有写权限采集组件想越权也动不了东西。踩坑备忘四个坑按遇到概率排memlock 警告、节点无指标、插件加载失败、输出端连不上。memlock 警告或 panic。现象是日志刷W! Insufficient lockable memory 64kb when 72kb is required严重的直接 panic 退出。原因是 Telegraf 默认用锁定内存存放密钥容器默认的 memlock 配额给得太小。处理启动命令加--ulimit memlock8192:8192或宿主机写echo telegraf soft memlock 8192 /etc/security/limits.conf。实在动不了限额才考虑加--unprotected标志跳过内存锁定——密钥会存进未保护内存可能被换页写盘生产环境别用 ⚠️节点没有指标。DaemonSet 的 Pod 都 Running库里却查不到某节点的数据。先分清断在哪条链路走 kubelet 的kubernetes插件查 token 路径和 10255 端口是否可达走 API 的kube_inventory先kubectl describe sa telegraf -n monitoring看绑定关系再进 Pod 里curl https://kubernetes.default.svc:443验证连通性。插件加载失败。日志报Error loading plugin多数是插件名拼错或 TOML 缩进断了。telegraf config create重新生成参考配置对着改改完用telegraf config check预校验——它只初始化插件、不启动采集适合放进发布前的检查步骤。输出端连不上。采集正常、InfluxDB 无数据八成是urls里的服务名在容器网络中解析不到比如写的是别的命名空间的服务地址。先在 Pod 里 curl 一下输出端点把网络问题和服务端问题分开再排。部署自检清单部署完成后逐项过一遍全部勾上再算交付。镜像 tag 明确为 Debian 或 alpine且落在官方维护的三个次要版本窗口内docker logs无 memlock 警告无Error loading plugintelegraf config check已纳入发布前校验流程InfluxDB 按 host tag 能查到每个节点的指标周期与interval 10s一致DaemonSet 副本数等于节点数且全部 Ready配置经 ConfigMap 下发密钥未写进任何清单容器非 root 运行根文件系统只读按安全要求inputs.internal自监控点位存在能观察到 Telegraf 自身内存水位【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考