我一直在尝试通过反复试验和研究来实现这一点。
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数据示例:
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必须将1、2等相加才能得到每小时的费率。它们指示了恰好在那时发生的事件的数量。
我有一个有70万条记录的mysql数据库。平均流量是每小时35。我希望将每小时的事件总数作为单个数据点并绘制成图表。有时每秒有多个事件,因此必须对其求和。
我也希望能够将每个月的图表作为一个单独的线和颜色的图表。
尽管尝试了数百次,我得到的只是一张空白的图表。
更新:
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插入数据:
mysql -u user -ppassword db -e "select concat(oob_time_sec,\":\",count(*)) from ulog2 where oob_time_sec between unix_timestamp(\"2015-07-01 00:00:00\") and unix_timestamp(\"2015-07-14 23:59:59\") group by oob_time_sec order by oob_time_sec " |xargs -n1 rrdtool update attempt_db.rrd以下是对两周数据的访问。https://drive.google.com/file/d/0ByhxkwJBdusDUnBMTFI4bFlFTFE/view?usp=sharing
发布于 2017-06-01 08:12:17
这里有几个问题。
首先,你的RRD创建肯定是错误的。似乎您保存数据的时间不够长,并且没有定义任何摘要RRA。
其次,您没有告诉我们数据样本,所以我们无法验证它们是否在正确的范围内。(更新:现在我有了数据样本)
第三,您的图形命令没有指定时间窗口,因此不会显示包含数据的时间窗口。您也没有在您的LINE指令中指定颜色,所以无论如何都不会绘制这条线。
最后,从提供实际数据的最新更新中,我看到采样间隔通常大于心跳,因此数据被拒绝。您将需要增加心跳( DS定义中的600 ),并且可能还需要在后面的RRA定义中增加XFF设置( 0.5可能会上升到0.9)
所以,RRD的定义。您的定义指定了10s步长,数据心跳为600s。然后,您定义了一个RRA,设置为1cdp=1pdp,只有24行--这意味着它只有4分钟长。是的,你在4分钟后丢弃了所有的数据,所以永远不会得到足够的数据来完成一个小时的汇总。
备注:
之前,样本之间有多长时间间隔
由于您说每小时(平均)有35个样本,这意味着它们大约每2分钟一次。所以,10秒的步长太小了,1分钟应该没问题。10分钟的心跳可能太大了-5分钟应该可以-但让我们暂时坚持10分钟,因为您没有指定数据样本的时间有多不规则。
然后,您想要每小时汇总一次,因此您将需要一个额外的1cdp=60pdp RRA,该RRA具有足够的行--假设200行,这将涵盖一周,但您可能需要更多行。这是因为1pdp=1step=1minute,所以我们需要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,将值保持在1分钟精度;第二个是一周长,累积到每小时的平均值。我们有10分钟的心跳,所以只要你的数据至少如此频繁地到达,你就不会得到任何差距。
下一件要记住的事情是,您的数据需要按递增的时间顺序添加到RRD中,并且您需要输入至少62分钟的连续样本,然后才能在每小时摘要的RRA中看到任何内容。
要显示这条线,请使用LINE1:attempts#ff0000:Attempts获得一条漂亮的红线和一个图例。
注意所有这些,您应该开始看到一些图形出现--前提是您在图形命令上使用--start和--end来指定包含数据的同一时间窗口!
现在,在同一张图上获得不同的月份有点复杂。首先,您需要极大地扩展第二个RRA的大小--从200 (大约一周)扩展到4500 (大约6个月)。接下来,在调用'RRD Graph‘函数时,您需要使用时间偏移量来定义具有-n*28*24*3600秒时间偏移量的多行(我建议使用周的倍数而不是日历月,以便更好地进行比较,但您可以使用任何您想要的值)。您将使用带有:start和:end选项的额外DEF来完成此操作。然后在图表上以单独的线条绘制它们。有关更多信息,请参阅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:Attemptshttps://stackoverflow.com/questions/44274879
复制相似问题