什么是 Telegraf?
Telegraf 是由 InfluxData 开发的一款轻量级、插件驱动的服务器代理程序。如果把监控系统比作一个水路工程,那么 Telegraf 就是那个极其强大的“水泵”和“分流器”。
它的核心职责非常明确:采集(Collect) \(\rightarrow\) 处理(Process) \(\rightarrow\) 传输(Report)。
它能够从数以百计的来源(如 CPU 负载、MySQL 数据库、Redis 缓存、Docker 容器、甚至是一个简单的 HTTP API)抓取数据,经过简单的过滤或转换,然后将这些数据发送到时序数据库(最常用的是 InfluxDB)或其他监控平台(如 Prometheus, Kafka, Graphite 等)。
Telegraf 的核心架构:插件机制
Telegraf 的强大之处在于其插件化设计。你不需要编写代码,只需要通过修改配置文件(telegraf.conf),就可以像搭积木一样构建你的监控管道。
1. 输入插件 (Input Plugins)
输入插件决定了 Telegraf “从哪里拿数据”。
* 系统级: cpu, mem, disk, net(监控服务器硬件状态)。
* 服务级: mysql, postgresql, redis, nginx(监控特定软件运行指标)。
* 容器级: docker, kubernetes(监控集群资源占用)。
* 协议级: mqtt_consumer, snmp, http_listener(接收外部推送的数据)。
2. 处理插件 (Processor Plugins)
处理插件允许你在数据发送前对其进行“加工”。
* 字段转换: 将某个数值乘以 1024 转换为 KB。
* 标签增强: 为所有数据统一加上 env = "production" 或 region = "shanghai" 标签。
* 过滤: 丢弃不需要的指标,减少存储压力。
3. 输出插件 (Output Plugins)
输出插件决定了数据“去哪里”。
* 时序数据库: influxdb (v1/v2), prometheus (通过远程写入)。
* 消息队列: kafka, rabbitmq。
* 日志/控制台: stdout (用于调试), file。
快速上手实例:监控 Linux 服务器并写入 InfluxDB
假设你有一台 Linux 服务器,你想监控它的 CPU 和内存使用率,并将数据发送到 InfluxDB 2.x。
第一步:安装
在大多数 Linux 发行版上,你可以通过包管理器安装:
# Ubuntu/Debian sudo apt-get update && sudo apt-get install telegraf # CentOS/RHEL sudo yum install telegraf
第二步:配置 telegraf.conf
找到配置文件(通常在 /etc/telegraf/telegraf.conf),修改以下关键部分:
# -------------------------------------------------------------------------------
# 1. 输出配置:定义数据发送到哪里
# -------------------------------------------------------------------------------
[[outputs.influxdb_v2]]
## InfluxDB 2.x 的 URL
urls = ["http://localhost:8086"]
## 你的组织名称
organization = "my-org"
## 你的 Bucket 名称
bucket = "server_metrics"
## 你的 API Token
token = "your-super-secret-auth-token"
# -------------------------------------------------------------------------------
# 2. 输入配置:定义采集什么数据
# -------------------------------------------------------------------------------
# 采集 CPU 指标
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_mem_stats = true
# 采集 内存 指标
[[inputs.mem]]
# 采集 磁盘 IO 指标
[[inputs.disk]]
# 仅监控根目录
mount_points ["/"]
# 采集 网络流量
[[inputs.net]]
# 排除本地回环接口
interfaces = ["eth0"]
# -------------------------------------------------------------------------------
# 3. 处理配置:给数据打标签
# -------------------------------------------------------------------------------
[[processors.enum]]
## 示例:将某些数值转换为可读的枚举值(可选)
# ...
[[processors.tagprocessor]]
## 为所有采集到的数据添加服务器名称标签
[[processors.tagprocessor.tag]]
key = "hostname"
value = "web-server-01"
第三步:启动并验证
# 启动服务 sudo systemctl start telegraf sudo systemctl enable telegraf # 调试模式:在终端直接运行,查看采集到的数据是否正确 telegraf --config /etc/telegraf/telegraf.conf --test
进阶场景:如何监控一个自定义的 HTTP API?
如果你公司内部有一个 API 接口 http://api.example.com/stats,它返回如下 JSON:
{
"active_users": 120,
"request_count": 5000,
"error_rate": 0.02
}
你可以在 Telegraf 中配置 inputs.http 插件,无需写任何 Go 代码即可实现监控:
[[inputs.http]] ## API 地址 urls = ["http://api.example.com/stats"] ## 采集频率 interval = "60s" ## 数据格式 data_format = "json" ## 将 JSON 根节点映射为测量值名称 name_override = "api_performance" ## 可以在这里定义如何解析 JSON 字段
为什么选择 Telegraf 而不是自己写脚本?
- 极低的资源占用: 用 Go 编写,静态编译,内存占用极小,适合部署在边缘设备或资源受限的服务器上。
- 海量生态: 官方维护了数百个插件。如果你想监控 Redis,不需要研究 Redis 的协议,直接开启
[[inputs.redis]]即可。 - 解耦采集与存储: 即使你的后端数据库从 InfluxDB 迁移到了 Prometheus 或 ClickHouse,你只需要修改
outputs部分,而不需要重新编写采集逻辑。 - 高可靠性: 内置了本地缓存机制。如果网络波动导致数据库暂时不可用,Telegraf 可以将数据暂存在内存或磁盘中,待恢复后补发。
总结:Telegraf 的适用场景
- 基础设施监控: 监控成百上千台服务器的 CPU、内存、磁盘、网络。
- 中间件监控: 实时追踪 MySQL 慢查询数、Redis 命中率、Kafka 堆积量。
- IoT 数据采集: 通过 MQTT 协议收集传感器数据并上传云端。
- 自定义指标聚合: 将分散在各个 API、日志文件中的数值指标统一化,构建可视化看板(配合 Grafana)。



还没有评论,来说两句吧...