我一直试图通过反复试验和研究来实现这一目标
printjson()
数据样本:
rrdtool create attempt_db.rrd --start 1435125034 --step=10 DS:attempts:GAUGE:600:0:1000 RRA:AVERAGE:0.5:1:24
rrdtool update attempt_db.rrd <time unixtime>:<number>
rrdtool graph latency.png -a PNG -w 7850 -h 240 --slope-mode -u 2000
--vertical-label "attempts" DEF:attempts=attempt_db.rrd:attempts:MAX LINE1:attempts
必须对1,2,等等进行求和以获得小时费率。它们表示恰好在那个时间发生的事件数量。
我有一个700k记录的mysql数据库。平均流量为每小时35。 我希望将每小时的事件总计为单个数据点并绘制成图表。偶尔会有每秒多个事件,所以必须总计。
我还希望能够将每个月的图表作为单独的线条和颜色绘制在图表上。
尽管有数百次尝试,但我得到的只是一张空白图表。
更新:
rrdtool update attempt_db.rrd 1495170017.8874:1
rrdtool update attempt_db.rrd 1495170248.3469:1
rrdtool update attempt_db.rrd 1495170307.1935:2
rrdtool update attempt_db.rrd 1495170323.2595:1
rrdtool update attempt_db.rrd 1495170391.3133:1
rrdtool update attempt_db.rrd 1495170396.5190:1
rrdtool update attempt_db.rrd 1495170433.3954:1
rrdtool update attempt_db.rrd 1495170433.3983:1
rrdtool update attempt_db.rrd 1495170446.6604:1
rrdtool update attempt_db.rrd 1495170447.1263:1
rrdtool update attempt_db.rrd 1495170450.4443:1
rrdtool update attempt_db.rrd 1495170479.7533:1
插入数据:
rrdtool create attempt_db.rrd --step=60 --start 1435727683 DS:attempts:ABSOLUTE:600:0:1000 RRA:AVERAGE:0.5:1:1440 RRA:AVERAGE:0.5:60:2000
rrdtool graph latency.png -a PNG -w 7850 -h 240 --slope-mode -u 200 --vertical-label "attempts" DEF:attempts=attempt_db.rrd:attempts:MAX LINE1:attempts
这里可以访问2周的数据。 https://drive.google.com/file/d/0ByhxkwJBdusDUnBMTFI4bFlFTFE/view?usp=sharing
答案 0 :(得分:0)
这里有几个问题。
首先,您的RRD创建绝对是错误的。您似乎没有保持足够长的数据,也没有任何RRA摘要定义。
其次,您没有告诉我们数据样本,因此我们无法验证它们是否在正确的范围内。 (更新:现在我有数据样本)
第三,您的graph命令没有指定时间窗口,因此不显示包含数据的时间窗口。您也没有在LINE指令中指定颜色,因此无论如何都不会绘制线条。
最后,从提供实际数据的后期更新中,我看到采样间隔通常大于心跳,因此数据被拒绝。您将需要增加心跳(DS定义中的600)并且可能还会增加后续RRA定义中的XFF设置(0.5应该可能达到0.9)
所以,RRD的定义。您的定义指定10s步骤,数据上有600s心跳。然后,您定义了一个RRA,设置为1cdp = 1pdp,只有24行 - 这意味着它只有4分钟。是的,您在4分钟后丢弃所有数据,因此永远不会达到一小时汇总。
注意:
- cdp == consolodated数据点。 RRA中的一行。
- pdp ==主要数据点。来自DS的时间标准化样本
- DS ==数据来源,实际样本
- RRA ==循环档案;存储规范化的,合构数据的地方
- XFF ==在CDP未知之前可以知道哪些数据是未知的
- 心跳= =样本未知之前样本之间的时间
由于您说您每小时有35个样本(平均),这意味着它们大约每2分钟一次。所以,10s的步骤太小了,1分钟应该没问题。 10分钟的心跳可能太大了 - 5分钟应该没问题 - 但现在坚持10分钟,因为你没有说明你的数据样本的时间不规律。
然后,你想每小时总结一次,所以你需要一个额外的1cdp = 60pdp RRA,并且有足够的行用于图表 - 比方说200,这将涵盖一周,但你可能需要更多。这是因为1pdp = 1step = 1分钟,所以我们需要60pdp来为cdp做一个小时。
所以,试试这个:
rrdtool create attempt_db.rrd --step=60 DS:attempts:GAUGE:600:0:1000 \
RRA:AVERAGE:0.5:1:1440 RRA:AVERAGE:0.5:60:200
这设置了2个RRA - 第一个是1天长的RRA,保持1min精度的值;第二个是一个星期的长,滚动到小时平均值。我们有10分钟的心跳,所以只要您的数据至少经常到达,您就不会有任何差距。
接下来要记住的是,您的数据需要按照增加的时间顺序添加到RRD中,并且在您在每小时汇总RRA中看到任何内容之前,您需要输入至少62分钟的连续样本。< / p>
要显示该行,请使用LINE1:attempts#ff0000:Attempts
获得漂亮的红线和图例。
请注意所有这些,如果您在图形命令中使用--start
和--end
指定包含数据的相同时间窗口,则应该开始看到一些图表!
现在,在同一个图表上获得不同的月份有点复杂。首先,您需要大大扩展第二个RRA的规模 - 从200(约一周)到4500(约6个月)。接下来,在拨打“RRD图表”时,您需要使用时间偏移量。用于定义具有-n * 28 * 24 * 3600秒时间偏移的多行的功能(我建议使用周数的倍数而不是日历月来进行更好的比较,但您可以使用您想要的任何内容)。您可以使用DEF
和:start
选项的额外:end
执行此操作。然后将它们作为单独的线条绘制在图表上。有关详细信息,请参阅RRDTool manual。
因此,作为最终摘要,基于原始命令:
rrdtool create attempt_db.rrd --step=60 --start 1435727683 \
DS:attempts:ABSOLUTE:3600:0:1000 \
RRA:AVERAGE:0.5:1:1440 RRA:AVERAGE:0.9:60:2000
rrdtool graph latency.png -a PNG -w 7850 -h 240 --slope-mode -u 200 \
--start 1435727683 --end 1438404606 \
--vertical-label "attempts" \
DEF:attemptrate=attempt_db.rrd:attempts:MAX \
"CDEF:attempts=attemptrate,STEPWIDTH,*" LINE1:attempts#ff0000:Attempts