问题描述
最近,我遇到了rrdtool的一个奇怪行为:如果数据是在随机时间插入到数据库中的,则在图形上会出现“飞溅”,这可以在附图中看到。我还注意到传入的数据与数据库转储中的数据不匹配。请告诉我我在做什么错。
我尝试了rrdtool版本1.6.0和1.7.2,平台是Orange Pi One(armv7l)和Armbian Linux(内核版本:5.4.45-sunxi)。我也在x86平台上进行了测试,看起来工作正常。
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