如何在Ubuntu上搭建Graphite监控系统?

来源:Java编程网作者:赵六头衔:草根站长
导读:本期聚焦于赵六创作的《如何在Ubuntu上搭建Graphite监控系统?》,敬请观看详情。服务器指标越攒越多,光靠日志翻查已经不够用了,这时候一套可视化监控系统就显得格外重要。Graphite作为老牌开源监控方案,由carbon、whisper和graphite-web三个组件构成,能够高效存储和展示CPU、内存、磁盘、网络等各类时序数据。本文以Ubuntu环境为例,从系统依赖安装讲起,逐步演示 graphite-carbon与graphite-web的部署过程,包括数据目录权限配置、数据库同步、时区设置以及Web界面的访问验证,最后还会介绍statsd数据接入的基本思路,帮助你从零搭建一套可用的监控平台。

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

如何在Ubuntu上搭建Graphite监控系统?

一、安装前的准备与组件选型

在动手之前,先确认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

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0916/57598.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。