
Fluentbit 擅长采集日志,我们也希望 Fluentbit 能采集机器指标,这样一来,机器上就只需要部署一个 agent 就可以了,便于维护。Fluentbit 支持插件机制,日志有很多插件,指标也有很多插件,从 Fluent Bit 1.8.0 开始,内置了 Node-Exporter 插件,可以采集 Node-Exporter 的指标。本文我们一起来实践一下。
核心要点
- Fluentbit 除了采集日志,也可以通过
node_exporter_metrics输入插件采集部分机器指标。 - 本文示例在 Macbook M1 上使用 Fluent Bit v3.1.9,将指标通过
prometheus_remote_write推送到 Nightingale v7.5.0。 - 这种方式可以减少机器上的 agent 数量,但和 Nightingale 的机器元信息、heartbeat、自愈等能力并非天然打通。
- 如果目标是完整机器监控和夜莺深度集成,原文建议优先使用 Categraf;Fluentbit 更适合作为补充采集方式。
测试环境
- 操作系统:Macbook M1
- Fluent Bit 版本:v3.1.9
- Nightingale 版本:v7.5.0
即,我在 Macbook 上使用 Homebrew 安装了 Fluentbit,想要采集 Node-Exporter 相关的指标,然后推给时序库并展示,之前我的机器上已经有一套使用 Docker compose 搭建的 Nightingale 了,直接复用 Nightingale 的时序库和展示能力。
这不是一个“替代完整机器监控 Agent”的方案,而是验证 Fluentbit 采集 Node-Exporter 类指标并写入时序库的最小实践。
Fluentbit 配置
[SERVICE]
flush 1
log_level info
[INPUT]
name node_exporter_metrics
tag node_metrics
scrape_interval 10
[OUTPUT]
Name prometheus_remote_write
Match node_metrics
Host 127.0.0.1
Port 17000
Uri /prometheus/v1/write
Log_response_payload True
add_label ident ${HOSTNAME}
add_label job fluent-bit
这里的关键是 INPUT 和 OUTPUT,INPUT 部分使用的是 node_exporter_metrics 插件,每 10s 采集一次。给这个插件采集的数据标注为 node_metrics,然后配置了一个 OUTPUT 插件,用于输出指标。
OUTPUT 插件使用的是 prometheus_remote_write,这个插件可以将数据推送到 Prometheus 的 remote_write 端点,这里我使用的是 Nightingale 的 remote_write 端点,所以 Host 和 Port 配置为夜莺的地址,Uri 配置为 /prometheus/v1/write,这样 Fluentbit 就会将采集到的 Node-Exporter 的指标推送到 Nightingale 了。
另外添加了两个参数,一个是 ident,取值为机器名,另一个是 job,取值为 fluent-bit。之后稍等片刻,我们就可以在 Nightingale 上看到这些指标了。

不过,我看这个指标和最新版本的 Node-Exporter 并不完全一致,说明 Fluentbit 是遵从的一个老版本的 Node-Exporter 的规范。而 Node-Exporter 迭代的比较快,后面 Fluentbit 就没有再跟进了。不过,这个指标已经基本用了,可以看到 CPU、内存、磁盘、网络等指标。
配置项说明
| 配置项 | 作用 | 本文取值 |
|---|---|---|
node_exporter_metrics |
采集 Node-Exporter 相关机器指标 | name node_exporter_metrics |
scrape_interval |
指标采集间隔 | 10 |
prometheus_remote_write |
将指标推送到 remote_write 端点 | Name prometheus_remote_write |
Host / Port |
Nightingale remote_write 地址 | 127.0.0.1 / 17000 |
Uri |
remote_write 路径 | /prometheus/v1/write |
add_label |
给指标增加标签 | ident、job |
机器数据 Unknown 问题
使用上面的 Fluentbit 配置和夜莺交互,Fluentbit 所在的机器会出现在夜莺的机器列表里,如下图所示:

可以看到机器标识正常上报了,即本机的机器名,更新时间也是正常的,但是其他字段都是 Unknown,这个是因为 Fluentbit 毕竟是自成体系的,并不是和夜莺丝滑对接。对于夜莺而言,是期望 agent 调用夜莺的 heartbeat 接口上报各类元信息,但是显然 Fluentbit 不会主动去调用夜莺的 heartbeat 接口,所以就导致了这个问题。
这个问题不是特别严重,你仍然可以查询时序库的数据做告警、配置仪表盘,但是就没法在夜莺里看到齐全的机器元信息,没法使用告警自愈等功能。所以,我们还是建议你使用 Categraf 作为机器上的 agent,这样就可以完美的和夜莺对接了。如果有些数据 Categraf 没法采集,可以再辅以一些 Exporter 之类的工具。
这里要区分两个层面的能力:
- 时序指标写入:Fluentbit 可以把采集到的指标写入 Nightingale 使用的时序库,用于查询、告警和仪表盘。
- 机器资产元信息:Nightingale 期望 agent 调用 heartbeat 接口上报机器信息,Fluentbit 不会主动完成这件事,所以机器列表字段会出现 Unknown。
总结
本文介绍了如何配置 Fluentbit 采集 Node-Exporter 的指标,并将这些指标推送到 Nightingale。Fluentbit 作为一个轻量级的日志收集器,也可以用来采集指标,这样就可以只部署一个 agent 了,便于维护。但是 Fluentbit 和 Nightingale 并不是天生一对,所以在使用的时候还是会有一些问题,比如机器数据 Unknown,这个问题不是特别严重,但是还是建议使用 Categraf 作为机器上的 agent,这样就可以完美的和 Nightingale 对接了。
FAQ
Q1:Fluentbit 能完全替代 Node-Exporter 吗?
A:本文只能说明 Fluentbit 内置的 node_exporter_metrics 插件可以采集 Node-Exporter 相关指标。原文也提到这些指标和最新版本 Node-Exporter 并不完全一致,因此不应直接理解为完全替代。
Q2:为什么 Nightingale 机器列表会显示 Unknown?
A:因为 Fluentbit 只是把指标写入 remote_write 端点,并不会像夜莺期望的 agent 那样调用 heartbeat 接口上报机器元信息。
Q3:什么时候该用 Categraf?
A:如果目标是完整机器监控、机器元信息展示和告警自愈等 Nightingale 深度能力,原文建议使用 Categraf 作为机器上的 agent;Fluentbit 可以作为某些补充数据的采集工具。
