微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RRDTool:数据库和图形上出现奇怪的“飞溅”

如何解决RRDTool:数据库和图形上出现奇怪的“飞溅”

最近,我遇到了rrdtool的一个奇怪行为:如果数据是在随机时间插入到数据库中的,则在图形上会出现“飞溅”,这可以在附图中看到。我还注意到传入的数据与数据库转储中的数据不匹配。请告诉我我在做什么错。

我尝试了rrdtool版本1.6.0和1.7.2,平台是Orange Pi One(armv7l)和Armbian Linux(内核版本:5.4.45-sunxi)。我也在x86平台上进行了测试,看起来工作正常。

strange graph

RRD文件是使用以下命令创建的:

function pushMsg() {
  var usrId = "Uc2db25baf...";
  var url = 'https://api.line.me/v2/bot/message/push';
  var channel_access_token = "soEtz7raMUcVQdhlQ7ttFaqUyiktj0...";
  var options = {
    "method" : "post","headers" : {
      "Content-Type" : "application/json","Authorization" : "Bearer " + channel_access_token
    },"payload" : {
    "to": "U1426ccaa18df...","messages" : [
      {
        "type" : "text","text" : "Hello World"
      }
    ]
  },"muteHttpExceptions": true
  };
  var result = UrlFetchApp.fetch(url,options);
  Logger.log("code: " + result.getResponseCode());
  Logger.log("text: " + result.getContentText());
}

数据由MQTT随机产生,并通过下一条命令插入到数据库中,例如:

$ rrdcreate /var/db/homed_sensor_7.rrd --step 10 DS:data:GAUGE:3600:U:U RRA:AVERAGE:0.5:1:8640

输入带有时间戳和值的数据日志:

$ rrdupdate /var/db/homed_sensor_7.rrd N:24.8125

RRD同时转储:

$ cat /var/log/homed.log | grep 'Sensor 7' | grep '2020.08.11 08:1'
2020.08.11 08:10:08.667 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:10:09.616 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:10:13.400 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:10:14.348 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:10:40.324 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:10:41.269 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:10:45.894 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:10:46.856 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:10:54.293 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:10:55.215 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:10:58.032 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:10:58.972 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:11:03.592 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:11:04.518 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:11:22.266 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:11:23.204 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:11:49.320 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:11:50.264 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:12:08.986 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:12:09.906 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:12:19.224 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:12:20.159 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:12:35.085 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:12:35.999 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:13:10.514 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:13:11.453 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:13:34.626 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:13:36.513 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:13:57.952 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:13:58.896 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:14:12.028 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:14:12.982 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:14:33.386 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:14:34.341 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:14:43.482 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:14:43.711 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:14:45.597 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:14:46.534 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:15:08.645 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:15:09.751 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:15:12.852 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:15:13.317 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:18:41.772 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:18:42.712 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:19:07.107 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:19:08.058 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:19:33.253 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:19:34.194 homed-sensor: Sensor 7 temperature 24.75
2020.08.11 08:19:53.916 homed-sensor: Sensor 7 temperature 24.8125
2020.08.11 08:19:54.860 homed-sensor: Sensor 7 temperature 24.75

解决方法

通过在向数据库中插入数据时添加 closest 时间戳来解决问题:

$ rrdupdate /var/db/homed_sensor_7.rrd 1597122920:24.8125
,

这是导致您出现问题的数据规范化。

简单来说,RRD 必须的数据必须完全在配置的时间间隔边界上。如果您为此提供了数据偏移量,则它将基于可用的样本及其时间点,使用直线插值法尝试对其进行估算。

如果您的样本还有很长的路要走,这可能意味着它高估了下一个样本,因此低估了以下样本。总体平均水平是正确的,但是您会发现峰值(如您所见)。

您发现的解决方案是确保时间戳准确地位于时间边界上-在您的情况下为10秒的倍数。

这里对正在进行的各种数据操作有很好的解释:http://rrdtool.vandenbogaerdt.nl/process.php

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。