【问题标题】:RRDTool give me a blank graphRRDTool 给我一张空白图
【发布时间】:2017-05-31 02:56:03
【问题描述】:

我一直在尝试通过反复试验和研究来让它发挥作用

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

这里可以访问 2 周的数据。 https://drive.google.com/file/d/0ByhxkwJBdusDUnBMTFI4bFlFTFE/view?usp=sharing

【问题讨论】:

    标签: graph rrdtool rrd


    【解决方案1】:

    这里有几个问题。

    首先,您的 RRD Create 肯定是错误的。看来您保留数据的时间不够长,也没有定义任何摘要 RRA。

    其次,您没有告诉我们数据样本,因此我们无法验证它们是否在正确的范围内。 (更新:现在我有了数据样本)

    第三,您的图表命令未指定时间窗口,因此未显示包含您的数据的时间窗口。您的 LINE 指令也没有指定颜色,因此无论如何都不会绘制线。

    最后,从提供实际数据的后期更新中,我看到采样间隔通常大于心跳,因此数据被拒绝。您将需要增加心跳(DS 定义中的 600),并且可能还增加后来 RRA 定义中的 XFF 设置(0.5 应该可能上升到 0.9)

    所以,RRD 定义。您的定义指定了一个 10 秒的步骤,对数据有 600 秒的心跳。然后,您定义了一个 RRA,设置为 1cdp=1pdp,并且只有 24 行——这意味着它只有 4 分钟长。是的,您将在 4 分钟后丢弃所有数据,因此永远不会有足够的时间进行一个小时的汇总。

    注意事项:

    • cdp == 综合数据点。 RRA 中的一行。
    • pdp == 主要数据点。来自 DS 的时间归一化样本
    • DS == 数据源,实际样本
    • RRA == 循环存档;存储标准化的综合数据的位置
    • XFF == 在 CDP 变得未知之前,有多少数据是未知的
    • Heartbeat == 样本之间的时间间隔后样本变为未知数

    由于您说您每小时(平均)有 35 个样本,这意味着它们大约每 2 分钟一次。所以,10s 的步长太小了,1min 应该没问题。 10 分钟的心跳可能太大 - 5 分钟应该没问题 - 但现在让我们坚持 10 分钟,因为您没有指定数据样本的时间不规则程度。

    然后,您想每小时汇总一次,因此您需要一个额外的 1cdp=60pdp 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:Attempts
    

    【讨论】:

    • 我这样做了,并输入了数千条记录,但我的图表仍然是空白的。我添加了您想要的数据样本。要允许输入较早的记录 --start 1435125030 也是必要的。
    • 您正在以大约 2015 年 6 月的日期启动 RRD...然后您正在输入 2017 年 5 月 19 日的数据。好吧,很公平,虽然您不能在更新中使用十进制时间,但您必须使用整数。但是,您的图形命令没有指定 --start 或 --end,因此默认情况下它将使用 --end=now--start='end-1day'。当然,这个时间窗口内不会有数据。尝试使用--start=1495170017 --end='start+1day',然后您的图形时间窗口应该与您的数据时间窗口相对应。
    • 哦,您现在还说您希望样本 SUMMED 来获得每小时费率,而不是平均费率。这是完全不同的事情,因为 RRDTool 以每秒速率工作。而不是使用 Gauge 类型,您应该使用 ABSOLUTE,并且在显示时,在显示之前将存储的值乘以 STEPWIDTH。
    • 我将开始时间更新为1435727683或2015-07-01 00:14:43,并更改了数据集以匹配。将值合并为整秒。不用找了。将更新我上面的陈述。
    • 错误:无效选项 -- 'end=start+1day' 也无效 --end=1438318800 或 --end 1438318800。好的,这些选项可以与 graph 命令一起使用,但它仍然是空白的。