Fluentbit 采集 Node-Exporter 相关的指标

演示如何用 Fluentbit 的 node_exporter_metrics 输入插件采集机器指标,并通过 prometheus_remote_write 输出到 Nightingale,同时说明机器元信息 Unknown 的原因和适用边界。

作者 快猫运营团队

Fluentbit

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指标

不过,我看这个指标和最新版本的 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 给指标增加标签 identjob

机器数据 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 可以作为某些补充数据的采集工具。

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云