Telegraf 全链路指标采集:从 inputs 到 outputs 一次讲透
【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf
Telegraf 把"采指标—洗数据—写库"整条链路压进一个常驻进程。一份 TOML 配置,无需任何附加组件,指标就从你的机器流进时序数据库。
📐 Telegraf 数据流是怎么跑的
Telegraf 是个常驻进程,按固定节奏循环。input 插件负责采集,processor 和 aggregator 负责清洗与聚合,output 负责写出。每个插件都有内置 buffer,写不出去时数据先落缓冲,不直接丢。
⚡ 最小可运行路径:三步出第一条数据
选一条安装路径
| 方式 | 命令 | 适合场景 |
|---|---|---|
| 包管理器(deb/rpm) | 添加 InfluxData 源后apt install telegraf/dnf install telegraf | 生产常驻,systemd 托管 |
| Docker | docker run -d -v $(pwd)/telegraf.conf:/etc/telegraf/telegraf.conf:ro telegraf | 快速验证、容器环境 |
| 源码构建 | git clone https://gitcode.com/GitHub_Trending/te/telegraf后make build | 要定制编译或读源码 |
生成配置并跑一个测试周期
这一步只写"CPU 输入 + 文件输出",跑一轮测试周期,不接数据库:
# 生成配置,只留 cpu 一个 input telegraf config --input-filter cpu > telegraf.conf cat >> telegraf.conf <<'EOF' [[outputs.file]] files = ["stdout"] EOF # 跑一个采集周期,数据直接打到终端 telegraf --config telegraf.conf --test终端出现cpu,host=... usage_idle=xx,usage_user=xx ...这类行,说明整条链路已经通了。
🔧 配置流水线:输入 → 处理 → 输出
按数据流顺序过一遍。每个环节只给一份生产可用的最小配置。
输入端:少采比多采更省钱
[agent] interval = "10s" # 采集节拍,全局默认,插件可单独覆盖 collection_jitter = "2s" # 各插件错开起跑,避免同一瞬间一起打满 sysfs metric_batch_size = 1000 # 单次写入的最大指标条数 metric_buffer_limit = 10000 # 每个 output 最多积压多少条 [global_tags] dc = "us-east-1" # 一次声明,全部指标自动带上 [[inputs.cpu]] percpu = true # 分核指标,定位单核打满时省得再补采 totalcpu = true collect_cpu_time = false # 原始时秒值几乎没人用,关掉处理端:把噪音挡在库外
processor 插在采集和写出之间,改完再落库。说白了,过滤放这里比放输出端便宜得多:
[[processors.filter]] namepass = ["cpu", "mem"] fieldpass = ["usage_*", "used_percent"] drop_original = true # 不匹配的直接丢弃,而不是留着继续往下走输出端:批量 + 缓冲 + 环境变量
[[outputs.influxdb_v2]] urls = ["http://influxdb.internal:8086"] token = "${INFLUX_TOKEN}" # 环境变量注入,token 不落在配置文件里 organization = "ops" bucket = "system" timeout = "5s" # 下游慢时快速失败,别拖死整个 flush content_encoding = "gzip" # 批量数据压缩传输,网络占比立刻下来直接影响性能与稳定性的参数
| 参数 | 作用 | 什么时候调 |
|---|---|---|
metric_batch_size | 单次写入的指标条数上限 | 下游吃压力就调小,想省网络就调大 |
metric_buffer_limit | 每个 output 的积压上限 | 下游常抖、怕丢数就调大,代价是内存 |
flush_interval/flush_jitter | 刷新节奏 + 随机抖动 | 多实例同机房部署,必开 jitter 错峰写 |
collection_jitter | 采集侧错峰 | 插件多、机器轻时必开 |
buffer_strategy = "disk" | 缓冲从内存换成落盘 | 下游可能长时间不可用、对数据完整性敏感 |
🗂️ 两个真实场景走一遍
场景一:物理机接入监控,噪音字段先砍掉
背景:一批数据库服务器,只关心利用率和内存,原始计数值没人在乎。
[agent] interval = "10s" collection_jitter = "2s" [global_tags] dc = "us-east-1" role = "db" [[inputs.cpu]] percpu = true totalcpu = true [[inputs.mem]] fieldpass = ["used", "available", "used_percent"] [[processors.filter]] fieldpass = ["usage_*", "used_percent", "available"] drop_original = true # 砍掉 time_* 这类原始计数 [[outputs.influxdb_v2]] urls = ["http://influxdb.internal:8086"] token = "${INFLUX_TOKEN}" organization = "ops" bucket = "system"验证:查一条指标,有值即链路健康。
influx query 'SELECT usage_idle FROM "system"."autogen"."cpu" WHERE time > now() - 5m'场景二:K8s 集群每节点一份采集
背景:集群里每个节点都要采系统指标。用 DaemonSet 保证每节点一份,ServiceAccount 令牌自动轮换,不落盘。
apiVersion: apps/v1 kind: DaemonSet metadata: name: telegraf spec: selector: matchLabels: { app: telegraf } template: metadata: labels: { app: telegraf } spec: serviceAccountName: telegraf containers: - name: telegraf image: telegraf:latest volumeMounts: - { name: cfg, mountPath: /etc/telegraf, readOnly: true } volumes: - name: cfg configMap: name: telegraf-config对应的 ConfigMap 里只放核心段:
[agent] interval = "10s" flush_jitter = "3s" # 节点多,错开写库避免尖峰 [[inputs.system]] [[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs", "overlay"] [[outputs.influxdb_v2]] urls = ["http://influxdb.monitoring.svc:8086"] token = "${INFLUX_TOKEN}" # 经 Secret 挂载注入 organization = "k8s" bucket = "node-metrics"验证:kubectl get ds telegraf -o wide每节点 Ready,再用场景一的查询命令按host标签过滤一个节点,有数据即全链路正常。
✅ 上生产前必查清单
- ✅采集错峰:
collection_jitter给 1~2s,防止几十个插件同一秒挤爆 IO - ✅写入节奏:
flush_jitter给 2~5s,多实例同机房时下游压力曲线立刻变平 - ✅积压策略:下游常抖就调大
metric_buffer_limit;怕断电丢数,buffer_strategy = "disk"把缓冲落盘 - ✅磁盘缓冲目录:
buffer_directory指向数据盘,别挤占系统盘 - ✅日志与轮转:
logfile、logfile_rotation_interval = "24h"、logfile_rotation_max_size = "100MB"、logfile_rotation_max_archives = 7 - ✅排障三板斧:改完配置先
telegraf --config telegraf.conf --test;怀疑哪段出问题加[agent] debug = true;日志里搜Wrote和failed to write判断写入是否成功 - ✅自监控:挂一个
[[inputs.internal]],agent 自己的 CPU、内存、缓冲水位一目了然 - ✅密钥不落盘:token、密码一律走环境变量(
"${VAR}")或 secretstores 插件,配置文件里不出现明文凭据
🧭 下一步
- 想看 agent 每个参数的含义和默认值:docs/CONFIGURATION.md
- 找业务对口的 input/output 插件:plugins/inputs/ 和 plugins/outputs/
- 写 processor 之前先读规范:docs/PROCESSORS.md
- 想搞清楚缓冲丢数逻辑:models/buffer.go
先把最小链路跑通,再按需往流水线上加插件。Telegraf 的上限就是你配置的用心程度。
【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考