Graphite 1.1.10 介绍与选型指南

Graphite 指标时序存储与图表系统认知篇:三件套架构与 Whisper 存储模型、render 函数体系与 statsd 直推能力、1.1.10 版本溯源,并给出与 Prometheus、VictoriaMetrics、InfluxDB、RRDtool 的量化选型对比。

GraphiteGraphite监控2026/10/20

Graphite 1.1.10 介绍与选型指南

目标:面向正在为「指标时序监控」选型做调研的读者,讲清 Graphite 的定位、组件构成、工作原理、功能边界与同类系统差异。本文为认知篇,全部信息来自官方文档与官方仓库的联网溯源(查询日期 2026-10-20),部署实操请配合本库《Graphite 1.1.10 Docker Compose 部署指南》使用。

一、环境信息

本篇为认知与选型篇,不依赖本地实验环境,全部信息通过以下官方渠道联网溯源并标注来源:

  • 版本与发布信息:GitHub 官方组织 graphite-project 各仓库 tag 列表(经 jsDelivr 数据接口 data.jsdelivr.com/v1/packages/gh/graphite-project/<repo> 溯源 GitHub 标签,查询日期 2026-10-20)
  • 发布说明:graphite-web 仓库内 docs/releases/1_1_10.rst(经 cdn.jsdelivr.net 获取,查询日期 2026-10-20)
  • 官方文档站:graphite.readthedocs.io(查询日期 2026-10-20)
  • 官方一体化镜像说明:graphite-project/docker-graphite-statsd 仓库 README(查询日期 2026-10-20)

二、软件概述

2.1 Graphite 是什么

Graphite 是一套开源的指标时序存储与图表系统,诞生于 2006 年(由 Orbitz 的 Chris Davis 为解决大规模集群运维可视化而创建),2008 年开源,是业界最早被大规模使用的时序监控后端之一,Grafana 最初的成名正是建立在「Grafana + Graphite」组合之上。

Graphite 由三个相对独立的组件构成(来源:graphite.readthedocs.io 首页与组件文档):

组件语言角色说明
graphite-webPython / Django查询与绘图前端解析 render URL 请求,从存储层取数、执行函数计算、渲染 SVG/PNG 图或返回 JSON
carbonPython(Twisted)指标接收守护进程监听 2003(明文行协议)/2004(pickle)端口,把指标写入存储层;含 carbon-cache、carbon-relay、carbon-aggregator 三种形态
whisperPython时序存储库固定大小预分配文件、类似 RRDtool 的多精度环形归档存储,每个指标一个 .wsp 文件

三者关系可以概括为一句话:应用把指标推给 carbon,carbon 写进 whisper 文件,graphite-web 读 whisper 画图。

💡 技术拓展:「时序数据库」不止 Graphite 一种存储引擎形态,常见同类引擎对比——

引擎存储形态特点适用场景
RRDtool单文件环形固定归档(C 实现)老牌、极简,环形覆盖写,索引能力弱单机 MRTG/Cacti 类小规模绘图
Whisper(Graphite)每指标一个预分配 .wsp 文件多精度归档、文件系统即数据库、运维直观中小规模指标、需直读文件排障
TSDB 自研块存储(Prometheus/VictoriaMetrics/InfluxDB)目录分块 + 索引 + 压缩高压缩比、查询快、支持基数管理大规模指标、高查询并发
远端对象存储(Thanos/Mimir 等)TSDB 块上移对象存储长期保留、水平扩展查询云原生长期指标留存

Graphite 采用 Whisper 方案:牺牲了压缩率与随机查询性能,换来「一个指标一个文件、cat 都能看」的极致透明度。本文介绍的即为此形态。

2.2 版本与发布节奏(实查数据)

经 GitHub tag 溯源(查询日期 2026-10-20):

仓库最新稳定版最新预发布历史标签总数
graphite-project/graphite-web1.1.10(2022-05-23 发布)1.2.1-pre242
graphite-project/carbon1.1.10无34
graphite-project/whisper1.1.10无37

发布说明原文(docs/releases/1_1_10.rst):「Graphite 1.1.10 is now available for usage. Please note that this is a bugfix release for the stable Graphite 1.1.x branch and it's recommended for production usage.」——即 1.1.10 是 1.1.x 稳定分支的 bugfix 版本,官方推荐生产使用;1.2.1 目前仅有 pre 预发布版,不建议生产采用。

一体化镜像 graphiteapp/graphite-statsd 的最新稳定 tag 为 1.1.10-5(graphite-web 1.1.10 的第 5 次镜像构建,Alpine 底座,含 nginx + graphite-web + carbon-cache + carbon-aggregator + statsd,由 runit 托管多进程;来源 docker-graphite-statsd README 与镜像清单,查询日期 2026-10-20)。

2.3 许可证与维护方

  • 许可证:Apache License 2.0(graphite-project 组织各仓库一致)
  • 维护方:GitHub graphite-project 开源社区(graphite-web、carbon、whisper、carbonate、docker-graphite-statsd 等十余个仓库),无单一商业公司主导,社区驱动演进
  • 文档:graphite.readthedocs.io(官方 Sphinx 文档,1.1.x 内容完整)

三、核心架构

3.1 组件拓扑与数据流

 应用/采集端                          Graphite 服务端
┌──────────┐   明文行协议    ┌──────────────┐   whisper 写盘   ┌────────────┐
│ 脚本/agent│ ──────────────▶│ carbon-cache │ ───────────────▶│  whisper    │
│ statsd客户端│ ─UDP 8125▶ │  + statsd    │                  │  .wsp 文件  │
└──────────┘   2003/2004   └──────────────┘                  └─────┬──────┘
                                │ cache 查询(carbonlink 7002)      │ 读文件
                                ▼                                  ▼
应用代码函数库 ──HTTP──▶ ┌─────────────────────────────┐   ┌──────────────┐
                        │      graphite-web (Django)  │◀──│  文件系统目录  │
                        │  render API / dashboard UI  │   │ /storage/    │
                        └─────────────────────────────┘   └──────────────┘

数据流分「写路径」与「读路径」(来源:graphite.readthedocs.io overview 与 feeding-carbon 章节):

  • 写路径:客户端按 <指标路径> <值> <时间戳>\n 的明文行协议推到 carbon-cache 的 2003 端口(或 pickle 批量协议走 2004);carbon-cache 先写入内存队列再异步刷盘到 whisper 文件;statsd 形态下 UDP 8125 收到的计数/计时指标由 statsd 按刷新间隔聚合后转发给 carbon,生成 stats.* / stats_counts.* / stats.timers.* 系列指标。
  • 读路径:浏览器或 Grafana 请求 graphite-web 的 /render?target=... API;graphite-web 用文件系统查找定位 .wsp 文件,读取数据,同时可通过 carbonlink(7002 端口,pickle 协议)从 carbon-cache 内存队列补取尚未落盘的最新点,再执行 render 函数管道计算并输出 JSON/CSV/SVG/PNG。

3.2 Whisper 存储模型

whisper 的核心是多精度归档(retention archives)设计(来源:whisper 文档与 storage-schemas.conf 默认配置):

  • 每个指标对应一个预分配固定大小的 .wsp 文件,文件头记录聚合方法(average/sum/max/min/last…)、xFilesFactor(空槽占比阈值)与各归档区的偏移。
  • 每个归档区由「点间隔 × 点数」定义,例如默认 schema 10s:6h,1m:6d,10m:1800d 表示:10 秒精度保留 6 小时、1 分钟精度保留 6 天、10 分钟精度保留 1800 天(5 年)。
  • 写入新点时,旧点按归档精度向低精度区滚动聚合(聚合方法由 storage-aggregation.conf 的模式匹配决定),因此磁盘占用恒定、写入 O(1),代价是旧数据精度不可逆地降低。
  • 这与 RRDtool 的环形覆盖模型同源——whisper 可以视为「用纯 Python 重写并简化了 RRDtool 数据模型」的产物;RRDtool(最新稳定 1.11.0,来源 jsDelivr 溯源 oetiker/rrdtool-1.x,查询日期 2026-10-20)正是 Graphite 之前 Cacti/MRTG 时代的标准存储。

3.3 集群形态

Graphite 原生集群是「多 carbon-cache + 多 graphite-web + relay 分片」的松散联邦(来源:graphite.readthedocs.io clustering 章节):

  • carbon-relay 按 relay-rules.conf 或一致性哈希(REPLICATION_FACTOR 控制副本数)把指标分发到多个 carbon-cache;
  • 每个 graphite-web 在 local_settings.py 中配置 CLUSTER_SERVERS 指向同侪节点,查询时并行 fan-out 后合并结果。
  • 社区另有 carbon-clickhouse、go-carbon(镜像内置可选)、graphite-web 远端存储插件(如 Raintank/Graphite-MT 等)替换 whisper 后端的高阶方案。

若目标是云原生长期存储与高可用指标层,可参考本库《Thanos 0.42.4 介绍与选型指南》了解对象存储方案的对照形态。

四、功能特性

4.1 render 函数体系(核心卖点)

graphite-web 内置 100 余个 render 函数,可在查询期完成聚合、变换、过滤、别名等计算(来源:graphite.readthedocs.io render 函数参考)。常用类别:

类别代表函数作用
聚合sum、average、summarize、groupByNode多序列合并或按时间窗压缩
过滤highestCurrent、lowestCurrent、sortByMaximaTop-N / Bottom-N 圈选
变换scale、offset、movingAverage、keepLastValue、timeShift数值缩放、滑动平均、空值补齐、时间平移
命名alias、aliasByNode、aliasByTags图例改名
百分比asPercent、divSeries占比与比率计算

4.2 指标路径与 Tag 查询

1.1.x 支持两种指标组织方式:经典点分路径树(servers.web1.requests)与 1.1 新增的 TagDB(seriesByTag("env=prod", "service=web")),默认 TagDB 为本地 SQLite,可切换 Redis TagDB(来源:graphite.readthedocs.io tags 章节、docker-graphite-statsd README 的 TagDB 小节)。

4.3 statsd 集成

官方一体化镜像内置 statsd,UDP 8125 接收 key:value|type 报文,支持 counter/gauge/timer/set/histogram(metrics 后缀),按 flushInterval(默认 10 秒)聚合后转发 carbon,自动产出 stats.*(速率)、stats_counts.*(计数)、stats.timers.*(计时统计)三个指标族——这是 Graphite 区别于纯 pull 模型系统(如 Prometheus)最贴合「应用埋点直推」场景的能力。

4.4 API 与生态

  • render URL API:无鉴权 HTTP GET 即可取数绘图,返回 JSON/CSV/raw/SVG/PNG,天然适配 Grafana 数据源
  • metrics/find、metrics/index.json:指标树发现 API
  • dashboard 与 composer:自带 Web 仪表盘 UI
  • 生态:Grafana 原生 Graphite 数据源、collectd/telegraf/statsd 采集端、carbonate 集群运维工具

五、快速开始(最小可用示例)

认知篇仅给官方部署路径概览,逐条实测步骤见本库部署篇。官方三种常见部署形态(来源:graphite.readthedocs.io install 章节、docker-graphite-statsd README):

  1. 一体化镜像(最快路径):graphiteapp/graphite-statsd 单镜像包含全部组件,官方 README 提供现成启动命令,映射 80/2003/2004/8125 端口即得完整服务,适合评估与小规模使用(本库部署篇已逐条实测);
  2. pip 安装:pip install graphite-web carbon whisper(PyPI 提供各组件包),配合 Django 数据库初始化与 carbon.conf/storage-schemas.conf 手工配置,适合需要精细控制的传统部署;
  3. 发行版包 / 源码安装:GitHub 各仓库 release 提供 tar.gz 源码包,可编译安装。

最小写入示例(明文行协议,所有部署形态通用):

echo "servers.web1.requests 100 $(date +%s)" | nc <graphite主机> 2003

最小查询示例(render URL API):

curl 'http://<graphite主机>/render?target=servers.web1.requests&from=-10min&format=json'

本库实测文章:完整部署与端到端打点验证见《Graphite 1.1.10 Docker Compose 部署指南》。

六、适用场景与限制

6.1 适用场景

  • 应用埋点直推型监控:statsd/UDP 直推无需服务发现与抓取端编排,适合业务代码内嵌指标(QPS、耗时、计数);
  • 中小规模指标量:单 carbon-cache 每秒数千到数万指标(受 MAX_UPDATES_PER_SECOND 与磁盘 IOPS 约束)场景下运维成本极低;
  • 长期保留 + 降精度:10s:6h,1m:6d,10m:1800d 式多级归档天然满足「近期细、历史粗」的合规留存需求,磁盘占用恒定可预算;
  • 作为 Grafana 后端:只需一个 HTTP render 端点。

6.2 已知限制

  • 写入吞吐有上限:whisper 逐文件随机写,磁盘 IOPS 是硬瓶颈;官方文档明确提示大量 CREATE 会受 MAX_CREATES_PER_MINUTE 限流;
  • 无内建告警:graphite-web 只存算画,告警需外挂(Grafana Alerting、Cabal、改良项目等);
  • 集群是松散联邦:CLUSTER_SERVERS 查询合并无一致性保证,跨节点故障转移需运维自建;
  • 演进放缓:最新稳定版 1.1.10 发布于 2022-05-23,1.2.x 至今仍为预发布(查询日期 2026-10-20 溯源结果),新特性迭代明显慢于云原生阵营;
  • 历史数据不可提精度:已聚合降精度的点无法恢复原始精度,schema 变更需 whisper-resize 迁移或删除重建。

七、同类选型对比(量化维度)

7.1 版本与活跃度量化对照

下表版本数据均为 GitHub tag 溯源(jsDelivr 数据接口,查询日期 2026-10-20);Graphite 一行为本文实查,其余组件行为同期同法溯源:

系统仓库最新稳定版溯源标签总数发布模型
Graphitegraphite-project/graphite-web1.1.10(2022-05-23)42三组件独立发版,慢节奏 bugfix
Prometheusprometheus/prometheus3.15.0560高频三周节拍发版
VictoriaMetricsVictoriaMetrics/VictoriaMetrics1.154.01047(含分支)月度 LTS/里程碑
InfluxDBinfluxdata/influxdb3.12.1545商业驱动的季度大版本
RRDtooloetiker/rrdtool-1.x1.11.088极低频维护性发布

解读:Graphite 的版本节奏显著慢于云原生三家——42 个 tag 对比 Prometheus 560 个。选择 Graphite 意味着接受「稳定但演进放缓」;对比维度的详细版本请在引用时以各自官方 releases 页实时复核。

7.2 能力维度对比

维度Graphite 1.1.10Prometheus 3.xVictoriaMetrics 1.xInfluxDB 3.xRRDtool 1.11
采集模型推(carbon/statsd UDP)拉(HTTP 抓取 + 服务发现)拉/推均支持推/拉均支持外部脚本填充
查询语言render 函数管道(URL)PromQLMetricsQL(PromQL 超集)SQL / Flux无(仅取数绘图)
存储Whisper 多精度环形文件(每指标一文件)本地 TSDB 块自研高压缩 TSDB数据湖形态(Parquet/IoT mote 等)RRD 环形文件
压缩与规模上限低压缩、IOPS 受限中等,单机千万级活跃序列高,单机亿级序列高,面向海量分析极小规模
历史降精度原生内建(归档区)无内建(靠记录规则/Thanos 压实)无内建(企业版支持 downsampling)支持保留策略原生内建
告警无内建内建 Alertmanager 生态vmalert内建任务/告警无
部署复杂度极低(一体镜像)低(单二进制)低(单二进制)中(多组件)极低
典型定位应用埋点直推 + 长期降精度留存云原生指标标准层Prometheus 兼容的规模化后端时序分析/IoT嵌入式小工具绘图

7.3 选型建议(如果……则……)

  • 如果你的指标来自应用内埋点(statsd/UDP 直推)、希望零抓取端配置、且需要多年期降精度留存——选 Graphite,它至今仍是这一组合形态的最简方案;
  • 如果你已采用 Kubernetes/服务发现体系、需要告警生态与拉模型一致性——选 Prometheus,长期存储可叠加 Thanos(见本库《Thanos 0.42.4 介绍与选型指南》);
  • 如果你已有 Prometheus 但写入量/查询量超出单机、想尽量少改客户端——选 VictoriaMetrics;
  • 如果指标分析要走向 SQL 与业务化时序数据——选 InfluxDB 3.x;
  • 如果只是单台设备几条曲线的嵌入场景——RRDtool/Cacti 足矣。

八、参考链接