Graphite是一款经典的开源监控系统,它的核心能力是接收、存储并以图形方式展示各种时间序列数据。与Prometheus这类新兴方案相比,Graphite架构更简单直接,特别适合已经熟悉其推送模型的运维团队。整套系统由三个部分组成:carbon负责接收客户端推送过来的指标数据,whisper作为固定大小的时序数据库文件格式负责落盘,graphite-web则提供基于Django的Web界面用于绘图查询。本文将以Ubuntu为例,完整演示这套系统的搭建流程,并说明每个环节容易踩到的坑。

一、安装前的准备与组件选型
在动手之前,先确认Ubuntu版本。Ubuntu 20.04和22.04的官方软件源里都包含了graphite-carbon和graphite-web这两个包,可以直接通过apt安装,省去了手动配置Python虚拟环境的麻烦。如果你的系统是更老的版本,可能需要借助pip来安装,但那样依赖管理会复杂不少,不推荐新手尝试。
安装前建议先更新软件源并安装基础依赖:
sudo apt update sudo apt install -y graphite-carbon graphite-web graphite-web-uwsgi apache2 libapache2-mod-wsgi-py3
这里顺便解释一下选型思路。carbon默认监听2003端口接收明文TCP数据,另外还有plaintext UDP、pickle等模式可选。存储后端whisper的每个指标对应一个.wsp文件,文件大小在创建时就固定下来,取决于保留策略,所以搭建完成后要预留足够的磁盘空间。graphite-web默认使用SQLite存储用户配置,如果只是单机使用完全可以不动它,生产环境再考虑换成PostgreSQL。
二、配置并启动carbon数据接收服务
安装完成后,carbon的主配置文件位于/etc/carbon/carbon.conf。首先需要开启数据接收功能,编辑该文件,把CARBON_CACHE_ENABLED设置为True:
sudo vim /etc/carbon/carbon.conf # 找到 [cache] 段落,修改以下配置 CARBON_CACHE_ENABLED = True
接下来是保留策略配置,文件为/etc/carbon/storage-schemas.conf。这个文件决定了不同前缀的指标以什么频率采集、保留多久。默认的策略是一分钟一个点保留一年,写入格式为[策略名]加上pattern和retentions两项,例如:
[test-metrics] pattern = ^test\. retentions = 10s:1d,1m:7d,10m:1y
上面配置的含义是,所有以test.开头的指标,前1天按10秒粒度存储,7天内按1分钟粒度降采样,一年内按10分钟粒度保留。注意存储成本与retentions的精细程度成正比,采集频率越高文件越大。配置完成后设置开机自启并启动服务:
sudo systemctl enable carbon-cache sudo systemctl start carbon-cache sudo systemctl status carbon-cache
验证服务是否正常工作,可以用最简单的nc向2003端口推一条测试数据:
echo "test.metric.one $(date +%s) 42" | nc localhost 2003
如果carbon运行正常,几秒后就能在/var/lib/graphite/whisper/test/metric/one.wsp看到生成的数据文件。如果文件没出现,优先检查服务日志/var/log/carbon/carbon-cache/console.log,常见原因是storage-schemas.conf语法错误导致策略解析失败。
三、初始化graphite-web并完成访问验证
graphite-web需要在首次使用前同步数据库,执行下面的命令创建管理员用户:
sudo graphite-manage syncdb
然后修改本地配置文件/etc/graphite/local_settings.py,把时区设置对,否则图表横轴的时间会错位:
TIME_ZONE = 'Asia/Shanghai'
接下来启用Apache的站点配置。安装包自带了一个graphite的配置文件,位于/etc/apache2/sites-available/graphite-web.conf,把它软链接到启用目录并重启Apache即可:
sudo a2dissite 000-default sudo a2ensite graphite-web sudo systemctl restart apache2
浏览器访问服务器的80端口,看到Graphite的树形指标浏览器界面就说明部署成功了。在左侧的Metrics目录中展开test节点,点击one指标,右侧会渲染出刚才推送的数据点。graphite-web的Composer界面支持实时调整函数,比如对指标应用sumSeries或者movingAverage,图形会即时刷新,非常适合临时排查问题。
这里有一个新手常犯的错误值得提醒:如果你在Web界面上看不到任何指标,先确认graphite-web读取的数据目录与carbon写入的目录一致,通常都应该是/var/lib/graphite/whisper,同时保证www-data用户对该目录有读权限。另外SELinux或AppArmor偶尔会拦截访问,遇到Permission denied类报错时可以往这两个方向排查。
四、接入真实业务数据的常用方案
系统跑起来之后,下一步就是把真实指标送进来。最通用的做法是在业务机器上部署collectd,通过write_graphite插件把采集数据转发给carbon:
LoadPlugin write_graphite
<Plugin write_graphite>
<Node "graphite-server">
Host "监控服务器IP"
Port "2003"
Protocol "tcp"
Prefix "collectd."
</Node>
</Plugin>
应用代码层面的埋点则可以借助statsd,它工作在carbon之前,负责指标聚合,把应用推送的海量细粒度数据按时间窗口汇总后再转发,能显著降低carbon的写入压力。Python应用也可以直接使用graphite-pymetrics或者手写socket客户端往2003端口发数据,格式就是前面测试用过的指标路径 时间戳 数值三段式,非常简单。
最后关于容量再啰嗦一句:whisper文件一旦创建,保留策略就固定了,后续调整retentions不会自动重写已有文件,需要用whisper-resize.py工具批量迁移。因此在规划阶段就把采集频率和保留周期想清楚,能省去很多后期维护成本。整套系统搭好后,配合Grafana作为前端展示也是常见组合,Grafana原生支持Graphite数据源,可以做出比自带界面更美观的监控大盘。
Graphite监控Ubuntu服务器时序数据库修改时间:2026-09-16 00:32:53