Graphite 1.1.10 介绍与选型指南
Graphite 指标时序存储与图表系统认知篇:三件套架构与 Whisper 存储模型、render 函数体系与 statsd 直推能力、1.1.10 版本溯源,并给出与 Prometheus、VictoriaMetrics、InfluxDB、RRDtool 的量化选型对比。
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-web | Python / Django | 查询与绘图前端 | 解析 render URL 请求,从存储层取数、执行函数计算、渲染 SVG/PNG 图或返回 JSON |
| carbon | Python(Twisted) | 指标接收守护进程 | 监听 2003(明文行协议)/2004(pickle)端口,把指标写入存储层;含 carbon-cache、carbon-relay、carbon-aggregator 三种形态 |
| whisper | Python | 时序存储库 | 固定大小预分配文件、类似 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-web | 1.1.10(2022-05-23 发布) | 1.2.1-pre2 | 42 |
| graphite-project/carbon | 1.1.10 | 无 | 34 |
| graphite-project/whisper | 1.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、sortByMaxima | Top-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):
- 一体化镜像(最快路径):
graphiteapp/graphite-statsd单镜像包含全部组件,官方 README 提供现成启动命令,映射 80/2003/2004/8125 端口即得完整服务,适合评估与小规模使用(本库部署篇已逐条实测); - pip 安装:
pip install graphite-web carbon whisper(PyPI 提供各组件包),配合 Django 数据库初始化与 carbon.conf/storage-schemas.conf 手工配置,适合需要精细控制的传统部署; - 发行版包 / 源码安装: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 一行为本文实查,其余组件行为同期同法溯源:
| 系统 | 仓库 | 最新稳定版 | 溯源标签总数 | 发布模型 |
|---|---|---|---|---|
| Graphite | graphite-project/graphite-web | 1.1.10(2022-05-23) | 42 | 三组件独立发版,慢节奏 bugfix |
| Prometheus | prometheus/prometheus | 3.15.0 | 560 | 高频三周节拍发版 |
| VictoriaMetrics | VictoriaMetrics/VictoriaMetrics | 1.154.0 | 1047(含分支) | 月度 LTS/里程碑 |
| InfluxDB | influxdata/influxdb | 3.12.1 | 545 | 商业驱动的季度大版本 |
| RRDtool | oetiker/rrdtool-1.x | 1.11.0 | 88 | 极低频维护性发布 |
解读:Graphite 的版本节奏显著慢于云原生三家——42 个 tag 对比 Prometheus 560 个。选择 Graphite 意味着接受「稳定但演进放缓」;对比维度的详细版本请在引用时以各自官方 releases 页实时复核。
7.2 能力维度对比
| 维度 | Graphite 1.1.10 | Prometheus 3.x | VictoriaMetrics 1.x | InfluxDB 3.x | RRDtool 1.11 |
|---|---|---|---|---|---|
| 采集模型 | 推(carbon/statsd UDP) | 拉(HTTP 抓取 + 服务发现) | 拉/推均支持 | 推/拉均支持 | 外部脚本填充 |
| 查询语言 | render 函数管道(URL) | PromQL | MetricsQL(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 足矣。
八、参考链接
- Graphite 官方文档站(overview / feeding-carbon / clustering / tags 章节):https://graphite.readthedocs.io/en/latest/
- graphite-web 1.1.10 发布说明:https://github.com/graphite-project/graphite-web/blob/1.1.10/docs/releases/1_1_10.rst(本文经 cdn.jsdelivr.net 镜像获取,查询日期 2026-10-20)
- carbon 项目:https://github.com/graphite-project/carbon
- whisper 项目:https://github.com/graphite-project/whisper
- 官方一体化镜像与 README(端口/环境变量/TagDB/实验特性):https://github.com/graphite-project/docker-graphite-statsd
- 本库实测篇:《Graphite 1.1.10 Docker Compose 部署指南》《Graphite 1.1.10 配置参数详解》《Graphite 1.1.10 常用 CLI 命令与工具详解》
- 对比系统官方仓库(版本溯源于查询日期 2026-10-20):https://github.com/prometheus/prometheus 、https://github.com/VictoriaMetrics/VictoriaMetrics 、https://github.com/influxdata/influxdb 、https://github.com/oetiker/rrdtool-1.x