新闻详情

新闻详情

首页 / 资讯中心 / 详情

rrdtool 1.4.7编译安装与监控图表实战指南

发布时间:2026/9/26 1:14:15来源:尧图网络
rrdtool 1.4.7编译安装与监控图表实战指南
简介这份压缩包是 RRDTool 1.4.7 的完整发行源码适合正在搭建 Smokeping、Cacti、MRTG 等监控平台的运维工程师也适合想深入理解时序数据环形存储机制的开发者。包内共 314 个文件1.29 MB主要包含 49 个 C 源码与 22 个头文件用于编译核心库和 rrdtool 命令行程序另有 31 个 POD 格式的手册页、31 个 HTML 说明、30 个 TXT 文档以及 Perl 模块和 configure 构建脚本方便离线阅读和自定义编译。已有 263 人学习下载。通过源码可了解 RRD 特有的环形数据库如何以固定大小文件滚动写入、如何通过 Heartbeat 控制采集频率以及如何利用 rrdgraph 生成折线图、饼图等可视化结果透过 rrdcreate、rrdgraph、rrdcached、rrdtutorial 等手册还能掌握数据库建表、图形化输出、缓存守护进程的工作方式并参考其与常见监控系统对接的接口。对需要二次开发或进行低版本兼容适配的读者这套小型源码包也是很好的学习样本。1. 折腾 rrdtool-1.4.7.tar.gz监控图表背后的环形数据库做网络监控的同行应该都有印象smokeping 的延迟曲线、cacti 的流量图、mrtg 的老式日周月图背后统一是 rrdtool 在干活。这个 rrdtool-1.4.7.tar.gz 里装的是监控绘图链路最核心的底座一个按环形缓冲方式存储时间序列数据的数据库和一套 rrdcreate、rrdtool update、rrdtool graph 命令行工具。1.4.7 虽然老但稳定、依赖简单至今仍是 smokeping 2.6.x 和 cacti 0.8.8 生产环境的常用搭配。适合需要自己编译监控后端、定制保留策略或离线部署的人。一句话如果你只用 apt 装确实不用折腾但如果要在内网环境离线编译、或者让 smokeping 的 RRA 配置完全可控自己编译一遍 1.4.7 才是最省心的路。2. RRD 数据模型理解环形缓冲、PDP 与 RRA 再动手RRDtool 这个名字拆开是两件事RRDRound Robin Database和 tool。它不是一个通用数据库而是预先挖好一圈固定大小的槽位数据写满后从头覆盖像一个环形缓冲区。对应监控场景就是你只关心最近一天、最近一周、最近一个月老数据没有无限保留的必要环形覆盖正好省空间。1.4.7 的数据文件格式非常稳定同一份 .rrd 从编译机直接拷到另一台服务器只要架构一致smokeping 读起来没差别。理解这个基础后面所有参数才不会玄学。2.1 环形缓冲与 PDP 的关系数据落盘的最小单位是 PDPPrimary Data Point。每过一个 --step 周期默认 300 秒引擎会把这一周期内收到的 update 值归并成一个 PDP。比如你用 smokeping 每 5 分钟探一次延迟一个 PDP 就是一次探针结果的代表。RRARound Robin Archive里的点叫 CDPConsolidated Data Point它是对多个 PDP 聚合后的结果比如 6 个 PDP 合成一个半小时均值。xff 参数控制容错比例生成 CDP 时原始 PDP 里超过多少比例是 unknown这个 CDP 就直接记为未知。写数据的最小单位是 PDP读出来画图的单位是 CDP这两个概念经常被搞混。新手容易犯的错误是以为 rowsN 就代表 N 分钟实际上 rows 是 CDP 个数要乘以 steps 再乘以 step 间隔才算得出这份归档能覆盖的时间长度。比如 RRA:AVERAGE:0.5:6:288step 300 秒steps6那么一个 CDP 占 1800 秒288 个 CDP 正好覆盖 6 天。heartbeat 是另一个容易被忽略的参数。它表示允许相邻两次 update 的最大间隔超过这个间隔引擎认为数据流中断中间的 PDP 会标记为 unknown。探针间隔是 300 秒时heartbeat 至少给到 600 秒否则偶尔丢一次探针整段曲线就会出缺口。2.2 rrdcreate 参数与保留策略设计创建文件的命令长这样rrdtool create traffic.rrd \ --start now-2h --step 300 \ DS:input:COUNTER:600:0:U \ DS:output:COUNTER:600:0:U \ RRA:AVERAGE:0.5:1:288 \ RRA:AVERAGE:0.5:6:288 \ RRA:MAX:0.5:6:288第一行 --start 用 now-2h是给第一个 PDP 留出预热空间同时避免从 1970 年开始占位。DS:input:COUNTER:600:0:U 定义数据源 input类型 COUNTERheartbeat 600 秒最小值 0最大值不限。COUNTER 类型专门处理网络流量这种不断递增的计数器引擎会自动计算两次 update 之间的差值如果你直接喂的是瞬时速率就用 GAUGE。RRA 行最劝退新手的其实是那个 0.5。它叫 xff是未知数据允许比例的阈值。RRA:AVERAGE:0.5:6:288 表示 6 个 PDP 合成一个 CDP如果这 6 个 PDP 里有超过 50% 是 unknown这个 CDP 就是 UN没超过就按已有值计算。监控链路抖动时这个参数决定你的曲线是断成锯齿还是直接透传一个洞。至于 rows 的换算我自己第一次部署时全靠手算后来直接写成小脚本step300; steps12; rows1440 echo $((rows * steps * step / 86400)) daysstep 300、steps 12 意味着每小时一个 CDProws 1440 就是 1440 小时正好 60 天。保留策略设计阶段把这些值先算明白比装完再回头改 RRA 省事得多。2.3 rrdupdate、fetch 与结构校验数据写入用 updaterrdtool update traffic.rrd N:102455:87123N 表示当前时间也可以写绝对时间戳。一次更新多个 DS 时按 create 定义的顺序给值顺序错了数据就张冠李戴。批量回填历史数据时用 --template 指定字段名避免全靠记忆rrdtool update traffic.rrd --template input:output 1620000000:98000:76000fetch 用来确认数据真的写进去了rrdtool fetch traffic.rrd AVERAGE --start -1h --end nowfetch 输出第一列是时间戳后面是各 DS 的值UN 表示未知。写监控脚本时我习惯用 rrdtool info 检查文件里的 step、rows、steps、last_ds 这几个字段确认结构跟配置一致再交给 smokeping 或者 cacti。这一步能省掉后面大量排查时间尤其是多台设备共用一套模板时哪怕只有一台设备的 DS 顺序写错图表也会静默错位。3. 编译安装 rrdtool-1.4.7从 tar.gz 解压到 configure 全流程下载回来的 rrdtool-1.4.7.tar.gz 是源码包不是编译好的成品。tar.gz 文件怎么解压就不赘述了但解压前建议先核对一下包大小和校验和防止传输过程中损坏。解压后进入目录第一件事不是跑 configure而是先检查系统里有没有画图和压缩相关的开发包否则 configure 会在第一步就报错。3.1 tar.gz 解压与依赖检查sha256sum rrdtool-1.4.7.tar.gz tar -zxf rrdtool-1.4.7.tar.gz cd rrdtool-1.4.7在 Debian / Ubuntu 系包括银河麒麟 V10 这种基于 Ubuntu 的桌面环境上需要先确认这些包apt install -y libpng-dev zlib1g-dev libfreetype6-dev libart-2.0-dev1.4.7 的 configure 默认找 libart 作为绘图后端cairo 是可选的。我一般把 libart 装上因为它跟 1.4.7 的 graph 功能配合最稳cairo 也顺手装后面想调 --enable-cairo 时不用回头补依赖。如果你用的是内网离线环境把这些 deb 包先下好再离线安装这个版本的依赖链很短比装 smokeping 那一整套省事多了。3.2 configure 参数按需裁剪configure 是这套源码里最容易翻车的地方因为 1.4.7 默认会尝试编译 tcl、python、ruby、perl 的语言绑定任何一个对应开发环境不干净都会报错。我实际部署时一般这样裁剪./configure --prefix/opt/rrdtool-1.4.7 \ --disable-tcl --disable-python --disable-ruby \ --with-libart参数说明--prefix 指定安装目录建议用独立目录而不是 /usr/local方便以后切换版本。--disable-tcl / --disable-python / --disable-ruby 关掉语言绑定监控场景只用命令行工具和 C 库绑定模块反而引入版本冲突。--with-libart 明确指定绘图后端避免 configure 在 libart 和 cairo 之间摇摆。configure 结束时如果看到类似 rrdtool is now configured, run make to build 的输出说明依赖检查过了。如果卡在某个 checking for ... 上把报错那行的库名拿去 apt search缺哪个装哪个。我遇到最典型的错误是 configure: error: Please set PYTHON to point to a valid python binary其实就是没装 python-dev或者系统 python 版本太新加上 --disable-python 就能跳过。提示configure 报错时不要反复重跑碰运气。先看 config.log 最后 30 行缺库就装库缺头文件就装 -dev 包。这样处理过一次之后后面基本一路通畅。3.3 make 安装与冒烟验证依赖齐了编译就是机械操作make -j4 make installmake -j4 用 4 进程并行编译编译机内存小于 1G 时老老实实去掉 -j41.4.7 单进程编译也就吃两三百 MB。安装完成后验证三步走/opt/rrdtool-1.4.7/bin/rrdtool --version /opt/rrdtool-1.4.7/bin/rrdtool --help | head -30 echo export PATH/opt/rrdtool-1.4.7/bin:\$PATH /etc/profile.d/rrdtool.sh echo export LD_LIBRARY_PATH/opt/rrdtool-1.4.7/lib:\$LD_LIBRARY_PATH /etc/profile.d/rrdtool.shLD_LIBRARY_PATH 很多人会漏。rrdtool 的命令行工具安装时会往 /opt/rrdtool-1.4.7/lib 放共享库不加这个变量运行时动不动就报 error while loading shared libraries: librrd.so.4。验证通过后再建一个最小 rrd 文件测一下读写能 create、update、fetch 完整走一圈再接入 smokeping 或 cacti。rrdtool create test.rrd --start now-60 --step 300 DS:t:GAUGE:600:0:U RRA:AVERAGE:0.5:1:288 rrdtool update test.rrd N:42 rrdtool fetch test.rrd AVERAGE --start -10min --end now三条命令都正常返回说明引擎本身没问题接下来接监控链路才不会一脸懵。4. 对接 smokeping 与 cacti把 rrdtool 1.4.7 塞进监控链路rrdtool 装好只是有了引擎真正干活要接进 smokeping、cacti 或者 mrtg 的链路。三条链路对 rrdtool 的调用方式完全不同这也是很多人装好之后不知道下一步干什么的原因。4.1 smokeping 的 rrdtool 路径与 RRA 配置smokeping 2.6.x 是 rrdtool 1.4.7 最常见的搭档。smokeping 自己不会画图它只是定期跑 fping 探针把延迟数据通过 rrdtool update 写进 rrd 文件然后在 web 请求时调用 rrdtool graph 生成图片。所以 smokeping 的配置里必须明确告诉它 rrdtool 在哪里。/etc/smokeping/config.d/General 里的关键行*** General *** owner monitor contact adminexample.com imgcache /var/www/smokeping/cache imgurl cache datadir /var/www/smokeping/data piddir /var/run/smokeping rrdtool /opt/rrdtool-1.4.7/bin/rrdtoolrrdtool 这一行必须填绝对路径不能光写 rrdtool 三个字让它去 PATH 里找。smokeping 进程由 web 服务器启动时环境变量 PATH 往往被精简过绝对路径是唯一保险的写法。imgcache 和 datadir 归属用户要对否则 smokeping 写不进缓存网页上全是红叉。Targets 配置里每个 host 会自动继承 General 里的 RRA 定义。smokeping 默认的 RRA 是 5 分钟一个点我在内网监控一般会追加一行小时均值归档方便看超过一周的趋势*** RRD *** step 300 rra RRA:AVERAGE:0.5:1:288 rra RRA:AVERAGE:0.5:6:288 rra RRA:AVERAGE:0.5:24:360 rra RRA:MAX:0.5:6:288最后一行 24 个 PDP 合成一个点每小时一个 CDP360 个覆盖 15 天正好对应 smokeping 页面上个月的粒度。4.2 cacti 对接版本匹配比路径更重要cacti 对 rrdtool 的依赖更直接主机负载、接口流量全部走 rrdtool graph。路径配置在 cacti 管理界面的 Settings → Paths → RRDTool Utility Path填/opt/rrdtool-1.4.7/bin/rrdtool但真正要命的是版本匹配。cacti 0.8.8 系列对 rrdtool 1.4.x 支持得非常好而 cacti 1.2.x 官方要求 rrdtool 1.7 以上强行用 1.4.7 会出现「图能生成但全空白日志里刷 invalid DS」的情况。如果公司内网统一用的是 cacti 0.8.8那 1.4.7 是合适选择如果已经升级到 1.2.x就别在 1.4.7 上耗时间。cacti 版本建议 rrdtool 版本备注0.8.8e 及以下1.4.x / 1.5.x稳定经典组合1.0.x1.5.x / 1.6.x部分新模板不兼容 1.41.2.x1.7.x / 1.8.x1.4.7 不建议使用cacti 的模板钩子会读取 rrdtool 的 --version 输出并做能力判断版本太旧新模板直接不给用。所以给 cacti 接 rrdtool 时先确认 cacti 版本再决定编不编译 1.4.7。4.3 把 mrtg 历史日志转存进 rrdmrtg 本身不依赖 rrdtool它靠 rateup 出图。但 mrtg 的日志是纯文本数据粒度只有 5 分钟又没有环形归档的概念日志会无限长大。很多老监控机上同时还躺着几年的 mrtg 日志转成 rrd 是常见的归档需求。mrtg 日志格式固定第一行是当前时间戳之后每行四列时间、入流量速率、出流量速率、最大入流量。用 awk 把后三列拼成 rrd update 的输入awk NR1 {cmdrrdtool update mrtg.rrd $1:$2:$3; system(cmd)} mrtg.log跑完后再用 rrdtool fetch 抽查几个时间点确认数值量纲没有对错。mrtg 的速率单位是 bytes/s 的派生单位而你在 rrd 里建 DS 时如果用 GAUGE写进去的就是原值如果用 COUNTER写入后引擎还会再做一次差分。同一批数据两种 DS 类型画出来完全不一样转之前先想清楚。5. 避坑指南编译报错、时区偏移、绘图乱码与版本陷阱rrdtool 这套东西资料不少但坑都藏在细节里。这里列五条我实际踩过的每条按现象、原因、解决的顺序说。5.1 configure 报错找不到 libpng / libart现象./configure 执行到一半输出 configure: error: Can not find libpng 或者 libart is required。原因系统里没有安装对应的 -dev 开发包rrdtool 需要头文件而不是运行库。解决Debian 系执行 apt install libpng-dev libart-2.0-devRed Hat 系对应的是 libpng-devel libart_lgpl-devel装完重新 configure 即可。注意装完要先跑 ldconfig否则有时能找到头文件但链接不到动态库。5.2 画图中文乱码或豆腐块现象rrdtool graph 生成的 PNG 里中文标题显示为一排方块。原因rrdtool 默认字体路径指向系统英文字体中文字形缺失。解决graph 命令里显式指定中文字体例如 wqy-zenheirrdtool graph day.png \ --font DEFAULT:/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc \ --title 中文标题 \ DEF:intraffic.rrd:input:AVERAGE \ LINE1:in#00cc00:in如果没有 wqy先装 fonts-wqy-zenhei 再指定路径。这个问题在内网麒麟 V10 上尤其常见系统自带字体集被裁剪过务必检查字体路径是否存在。5.3 rrd 文件时间整体偏移 8 小时现象图上的横轴时间比实际时间早或晚 8 小时怎么看怎么别扭。原因rrdtool 的时间参数接受本地时间字符串或时间戳你在 create 时写了 --start 2025-01-01 00:00:00引擎按当地时间解析但存储和图表输出默认按 UTC偏移就出来了。解决create 和 graph 的时间全部用时间戳或 date -u 生成的 UTC 时间最省事的是直接写 N。规范做法是rrdtool create traffic.rrd --start$(date -u -d 2 hours ago %s) --step 300从那以后我建 rrd 文件一律用 date -u再没见过时间偏移问题。5.4 smokeping 启动报 rrdtool not found现象smokeping 服务起来后马上退出日志里一行 rrdtool not found 或 RRDtool is not executable。原因General 配置里的 rrdtool 字段没填或者填了相对路径smokeping 的 CGI 进程 PATH 环境不完整。解决在 /etc/smokeping/config.d/General 里写死绝对路径 /opt/rrdtool-1.4.7/bin/rrdtool然后重启 smokeping 服务再看日志。排查时直接运行 smokeping --config/etc/smokeping/config 手动拉起可以看到最原始的错误输出systemd 日志里往往只有截断后的报错。5.5 cacti 图形空白但数据正常现象cacti 的图能显示坐标轴数据区全空白rra 目录下的 .rrd 文件在增长。原因最常见是 cacti 与 rrdtool 版本不匹配或 rrdtool graph 的绘图后端没选对。解决先看 cacti 版本0.8.8e 配 1.4.7 基本不会出这种问题1.2.x 就别用 1.4.7。再手动跑一遍 cacti 生成的 rrdtool graph 命令如果报 unknown argument 之类的错就是版本问题。手动跑命令这个习惯帮我定位过不少 cacti 的隐性故障比在界面里翻日志快得多。6. 进阶rrdtool graph 绘图参数与监控数据自动归档rrdtool graph 不只是出图工具它是整个监控系统里最值得定制的一环。graph 命令的核心是 DEF、CDEF、VDEF 三个关键字DEF 从 rrd 文件里取数CDEF 做 RPN 表达式运算VDEF 计算最大值、平均值这类聚合值。我常用的一组参数长这样rrdtool graph week.png \ --start end-7d --end now --step 900 \ --title eth0 周流量趋势 \ --vertical-label bit/s \ --font DEFAULT:/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc \ DEF:intraffic.rrd:input:AVERAGE \ DEF:outtraffic.rrd:output:AVERAGE \ CDEF:in_bitsin,8,* \ CDEF:out_bitsout,8,* \ AREA:in_bits#00cc00:入流量 \ LINE1:out_bits#0000ff:出流量 \ VDEF:maxinin_bits,MAXIMUM \ GPRINT:maxin:最大入流量: %6.2lf %sbit/sCDEF 里的 ,8,* 是 RPN 后缀表达式意思是把 in 乘以 8把 bytes 换算成 bit。GPRINT 会把 VDEF 算出来的最大值直接印在图上生成日报时不用再单独算一轮。这些都是 1.4.7 完整支持的老版本反而简单直接。批量归档的场景我一般写一个 shell 循环把多台设备、多个 DS 统一出图for dev in eth0 eth1 eth2; do rrdtool graph /var/www/mon/${dev}-week.png \ --start end-7d --end now \ --title ${dev} weekly \ --font DEFAULT:/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc \ DEF:intraffic-${dev}.rrd:input:AVERAGE \ LINE1:in#00cc00:${dev} in done循环里每次 graph 都会读一遍 rrd 文件设备多的时候 I/O 会上去建议在 crontab 里错峰执行不要整点全部一起跑。这个脚本再配合 rrdtool fetch 导出的 CSV就能把月报数据一并归档。说实话rrdtool 1.4.7 的文档和社区资料虽然老但恰恰是老版本才有一整套被验证过的生产配置。我自己每次编译完都会强制走一遍 rrdtool info 加 rrdtool graph 的冒烟验证确认时间偏移、字体、绘图后端全部正常再交给 smokeping 或 cacti 使用。这个习惯帮我挡掉过至少三次时区导致的返工。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Navicat for Mac 合法使用与安全替代方案指南 2026/9/26 1:53:55

Navicat for Mac 合法使用与安全替代方案指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Linux 下 UltraEdit v15 试用限制绕过:TaoToken 配置与验证实录 2026/9/26 1:53:55

Linux 下 UltraEdit v15 试用限制绕过:TaoToken 配置与验证实录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
GMSL PCIE视频采集卡实战评测:四路1080P60零丢帧,延迟10ms 2026/9/26 1:53:55

GMSL PCIE视频采集卡实战评测:四路1080P60零丢帧,延迟10ms

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SR1120实测:UWB不止定位,更是高速低功耗短距数据链路 2026/9/26 1:53:55

SR1120实测:UWB不止定位,更是高速低功耗短距数据链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
开源STM32温湿度监测项目评测:代码、原理图与仿真全解析 2026/9/26 1:53:55

开源STM32温湿度监测项目评测:代码、原理图与仿真全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
VisualVM实战指南:JDK自带Java诊断工具的正确用法 2026/9/26 1:53:48

VisualVM实战指南:JDK自带Java诊断工具的正确用法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉