Telegraf:用一个TOML配置快速跑通指标采集全链路
【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf
十几台服务器要盯CPU和内存,每加一台就得手写脚本去解析 /proc,输出口径还各不相同,这类活最磨人。Telegraf 是单二进制指标采集代理:写几行 TOML 声明要用的插件,它就负责采集、处理、写入指标。运维和开发在单机到大机群场景都能用。
它到底是什么:把指标采集变成插件配置的监控代理
它是 InfluxData 生态的数据采集层:从各种来源拉指标,过一遍处理管线,再推给时序数据库或消息队列。编译后是单个静态二进制,无运行时依赖,配置全靠一份 TOML 文件。
| 核心能力 | 解决什么问题 |
|---|---|
| 300+ 输入插件(系统、中间件、云服务、消息队列) | 不用为每个监控对象写采集脚本 |
| processor / aggregator 管线 | 落库前过滤、重命名、聚合脏数据 |
| 多输出(InfluxDB、Kafka、文件等) | 同一份指标同时发多处;file/stdout 便于调试 |
--test/--once验证命令 | 不接数据库也能看到实际采到什么 |
plugins/ 目录按类型组织:inputs、outputs、processors、parsers,每个插件自带 README 和样例配置。
一条路跑通:Docker + 三行配置让 Telegraf 开始采集
Docker 这条路最省事:拉官方镜像,挂一份配置文件即可。配置至少要有一个输入和一个输出,否则启动直接报错。
docker pull telegraf cat > config.toml <<'EOF' [[inputs.cpu]] [[inputs.mem]] [[outputs.file]] files = ["stdout"] EOF docker run --rm -v $PWD/config.toml:/etc/telegraf/telegraf.conf telegraf启动后会打印 "Loaded X inputs and Y outputs",10 秒内 stdout 开始输出 CPU 和内存指标的行协议。已有二进制时,用一条命令验证配置:
telegraf --config config.toml --test--test只跑输入并打印到 stdout,不走输出,是检查"配置写对没有"的第一步。生产环境可用官方源的 DEB/RPM 包或 Homebrew 安装;K8s 上有社区 Helm chart。完整方式见 docs/INSTALL_GUIDE.md。
读懂关键配置:采集、处理、输出三层各管什么
Telegraf 的配置分[global_tags]、[agent]、inputs、processors/outputs 四块。沿数据流走,每层各管一件事,最常改的也就每层一两个参数。
采集层:从哪里取数、多久取一次
每个[[inputs.xxx]]声明一个数据源,按interval周期运行,所有输入共享同一个节奏。
[agent] interval = "10s" [[inputs.cpu]] totalcpu = true [[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs"]interval:它管全局采集频率→默认 10s,precision不填时按 interval 的整数量级取→想告警快就调小,数据量大就调大。percpu/totalcpu:它管按核还是按总量上报→默认只有总量值→要看单核负载才设percpu = true。ignore_fs:它管忽略哪些文件系统→默认已排除 tmpfs、devtmpfs 等→容器宿主机上把overlay加进列表。
处理层:发出去之前数据做什么变换
processors 在输入和输出之间加工指标,最常改的是processors.filter:namepass/fieldpass/tagdrop这几个开关就是控制数据量的标准手段。
fieldpass:它管保留哪些字段→默认全留→只要使用率的话,fieldpass = ["used_percent"]能砍掉一半以上数据量。tagdrop:它管删掉哪些标签→默认标签全保留→数据库序列基数暴涨时,先找容器 ID、请求 ID 这类高基数标签删掉。
输出层:数据最终写到哪
每个[[outputs.xxx]]是一个写入目标,所有输出收到同一份数据。开发期用outputs.file写 stdout 最便宜;生产换influxdb_v2,token 走环境变量。
[[processors.filter]] namepass = ["cpu", "mem"] fieldpass = ["used_percent"] [[outputs.influxdb_v2]] urls = ["http://localhost:8086"] token = "${INFLUX_TOKEN}" organization = "my-org" bucket = "telegraf" timeout = "5s"timeout:它管输出请求超时→默认 5s→网络延迟高或单次写入量大时调到 10s。content_encoding = "gzip":它管传输压缩→默认关闭→带宽紧张时建议开启。${VAR}环境变量在配置解析前替换;deb/rpm 包把变量写进/etc/default/telegraf,token 就不用落在配置文件里。
三个高频场景:主机、容器、中间件
主机基础监控:回答"机器要不要出事"
用cpu+mem+disk+net四件套,指标字段直接对应 /proc 里的内容。最常动的是两处:disk的ignore_fs过滤虚拟文件系统,net的interfaces = ["eth0"]只盯关键网卡。
容器监控:回答"每个容器占了什么"
inputs.docker走引擎 API,容器里要挂载/var/run/docker.sock。关键参数三个:endpoint默认 unix socket,timeout默认 5s,perdevice = true按网卡和设备分别上报。若从容器内监控宿主机,需要挂载/、/proc等并设置HOST_PROC、HOST_SYS等环境变量,做法见 docs/FAQ.md 的 Docker 条目。
中间件监控:回答"服务还健康吗"
MySQL、Redis、MongoDB 各有 input 插件,配置servers地址列表加凭据,读的是服务自带的 status 接口;只有 HTTP 指标端口的服务用prometheus或http插件抓。轮询型插件的interval保持 10s 以上通常足够,再密会压垮被采服务。
踩坑速查:没有数据输出先查哪里
现象:没打印任何数据,也没报错。原因:配置里只有输入没有输出,或插件名拼错没被加载。处理:看启动日志 "Loaded X inputs and Y outputs" 这一行,临时加一个写 stdout 的outputs.file,再用--test跑一轮。
现象:输出偶发 "Context Deadline exceeded"。原因:网络抖动,Go HTTP 客户端超时。偶发会自愈,缓冲里的数据下轮补发;频繁出现就调大输出的timeout,并检查 DNS、代理、防火墙。
现象:报 "no such host",同机其他程序能解析该域名。原因:Go 默认用纯 Go DNS 解析器,行为与系统库不同。处理:export GODEBUG=netdns=cgo切回 cgo 解析器,服务化部署则写进/etc/default/telegraf。
现象:数据库负载持续上涨,或 Telegraf 报缓冲满、数据被丢弃。原因:高基数标签引发序列爆炸,或内存缓冲(默认metric_buffer_limit = 10000点)被打满后按丢弃策略丢数据。处理:tagdrop删高基数标签;确需保留数据时调大缓冲或改用磁盘缓冲,设计见 docs/specs/tsd-005-output-buffer-strategy.md。
收尾:什么时候用 Telegraf,什么时候不用
Telegraf 是指标采集代理,需求是"把一批系统和中间件的指标拉进时序库"时,它是配置成本最低的选择之一。已有 OpenTelemetry 体系、要统一 trace 加 metrics 加 logs 的,优先考虑 OTel Collector;采大量业务日志、需要日志级语义的,用专门的日志管线更合适。完整配置项参考 docs/CONFIGURATION.md,命令与参数见 docs/COMMANDS_AND_FLAGS.md,所有插件可用参数可以直接telegraf config生成样例配置查看。
【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考