RustFS 监控实战:OpenTelemetry Collector 把指标接入 Prometheus + Grafana

集群里 RustFS 跑了三节点,某天业务反馈写入变慢,你上去想看吞吐和在线节点数,却发现 :9000/metrics 抓不到任何 Prometheus 数据。不是没监控能力,是 RustFS 的指标走的是另一条路:OpenTelemetry,不是 Prometheus 拉。

把指标接进 Prometheus + Grafana 不难,只是中间多一个 Collector。下面是一套能复制的链路。


1. RustFS 怎么吐指标:OTLP 推送

RustFS 通过 OTLP(OpenTelemetry Protocol)把 traces / metrics / logs 推给 Collector,本身不在 9000/9001 上提供 Prometheus 文本格式的 /metrics 端点。所以标准做法是一台 OpenTelemetry Collector 收 OTLP,再转成 Prometheus 格式:

先把 RustFS 指到 Collector(用 OTLP HTTP,端口 4318;gRPC 是 4317):

bash 复制代码
export RUSTFS_OBS_ENDPOINT=http://otel-collector:4318
export RUSTFS_OBS_METRICS_EXPORT_ENABLED=true
export RUSTFS_OBS_TRACES_EXPORT_ENABLED=true
export RUSTFS_OBS_LOGS_EXPORT_ENABLED=true
export RUSTFS_OBS_METER_INTERVAL=15s
export RUSTFS_OBS_SERVICE_NAME=rustfs-prod
export RUSTFS_OBS_ENVIRONMENT=production

每个节点都要设 RUSTFS_OBS_ENDPOINT,漏一个节点,Prometheus 里就少那台的指标。


2. Collector:收 OTLP,转 Prometheus

官方参考栈(docker-compose 的 observability profile)里的 Collector 配置,接收 4317/4318、用 prometheus exporter 在 8889 重新暴露:

yaml 复制代码
receivers:
  otlp:
    protocols:
      grpc: { endpoint: 0.0.0.0:4317 }
      http: { endpoint: 0.0.0.0:4318 }
exporters:
  prometheus:
    endpoint: "0.0.0.0:8889"
service:
  pipelines:
    metrics: { receivers: [otlp], exporters: [prometheus] }

Prometheus 抓的是 Collector 的 8889,不是 RustFS:

yaml 复制代码
scrape_configs:
  - job_name: "rustfs-app-metrics"
    static_configs:
      - targets: ["otel-collector:8889"]
  - job_name: "otel-collector"
    static_configs:
      - targets: ["otel-collector:8888"]

指标名以 rustfs_* 开头(如 rustfs_start_total、各 bucket/节点用量),Grafana 直接建面板或导官方看板。


3. 没数据?先查这三段

指标没出来,按链路顺序查,别瞎重启:

  1. RUSTFS_OBS_ENDPOINT 每个节点都设了吗? 漏设的节点不出指标。
  2. Collector 从节点可达吗? 节点到 otel-collector:4318 的网络不通,OTLP 推不出去。
  3. Prometheus 抓的是 8889 吗? 抓错端口(比如去抓 RustFS 的 9000)永远为空。

这三段通了,Grafana 里就能看到集群在线节点数、各 bucket 用量、S3 请求量和流量。


4. 边界:多一个组件,但换来统一栈

和"存储自带 /metrics"的方案比,RustFS 这套要多维护一个 OTel Collector。但好处是指标、链路、日志走同一条 OTLP 管道,Grafana/Loki/Tempo 一套贯通,和未来接 Pyroscope 做持续性能分析也顺。官方 observability profile 已经把 otel-collector、Prometheus、Grafana、Loki、Tempo/Jaeger 打包成参考栈,照着起就行,不用从零拼。


5. 总结与下一步

  • RustFS 不提供 Prometheus /metrics 拉端点,指标走 OTLP 推送,需 OTel Collector 转 Prometheus(8889)。
  • 关键变量:RUSTFS_OBS_ENDPOINT(每个节点都设)、RUSTFS_OBS_METRICS_EXPORT_ENABLED、导出间隔与资源属性。
  • 排障顺序:端点设全 → Collector 可达 → Prometheus 抓 8889。
  • 边界:多一个 Collector 组件,但指标/链路/日志统一在 OTLP 栈里。

下一步:按官方 observability profile 起 Collector + Prometheus + Grafana,设 RUSTFS_OBS_ENDPOINT 指向 Collector,进 Grafana 看 rustfs_* 指标是否进来,再补告警规则。


以下是深入学习 RustFS 的推荐资源:RustFS

官方文档: RustFS 官方文档- 提供架构、安装指南和 API 参考。

GitHub 仓库: GitHub 仓库 - 获取源代码、提交问题或贡献代码。

社区支持: GitHub Discussions- 与开发者交流经验和解决方案。

意见反馈:GitHub Issues

相关推荐
@PHARAOH5 小时前
WHAT - 微服务统一入口配置原理
微服务·云原生·架构
a1117765 小时前
莱茵生命终端 网页 html
前端·开源
2601_968354546 小时前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
开源·issue
海盗12347 小时前
AI 新闻日报 2026-09-12:Agents API 公测、AI Agent 军团攻击事件、龙猫 2.0 万亿开源
人工智能·开源
菩提小狗7 小时前
每日极客日报 · 2026年09月12日
ai·开源·极客日报·it热点·技术资讯
Erishen7 小时前
能算的绝不调模型:resolve-harness 的确定性 Fast Path 运行时
架构·开源
程序员老赵7 小时前
Docker 部署觅思文档:搭建私有化文档管理系统
docker·开源·笔记测评
三玖诶7 小时前
DeepSeek Launcher:内置 Node.js,为什么首次启动仍需要网络?
windows·开源·deepseek
2601_962218478 小时前
万象生鲜系统智能报表引擎技术为生鲜企业提供数字化经营分析能力
大数据·运维·微服务·云原生·架构