RRDTool: странные "всплески" в базе и на графике

Недавно я столкнулся со странным поведением rrdtool: если данные были вставлены в базу в случайное время, на графике появляются "всплески", это видно на прилагаемом рисунке. Еще я заметил, что входящие данные не совпадают с данными в дампе базы данных. Подскажите, пожалуйста, что я делаю не так.

Я пробовал rrdtool версий 1.6.0 и 1.7.2, платформа - Orange Pi One (armv7l) с Armbian Linux (версия ядра: 5.4.45-sunxi). Я также тестировал на платформе x86, и, похоже, все работает нормально.

странный график

Файл RRD был создан с помощью команды:

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

Данные поступают через MQTT в случайное время и вставляются в базу данных следующей командой, например:

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

Журнал входных данных с отметками времени и значениями:

$ 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

Дамп РРД при этом:

$ rrdtool dump /var/db/rrd/homed_sensor_7.rrd | grep '2020-08-11 08:1'
<!-- 2020-08-11 08:10:00 MSK / 1597122600 --> <row><v>2.600518229e+01</v></row>
<!-- 2020-08-11 08:10:10 MSK / 1597122610 --> <row><v>2.480645131e+01</v></row>
<!-- 2020-08-11 08:10:20 MSK / 1597122620 --> <row><v>2.350490220e+01</v></row>
<!-- 2020-08-11 08:10:30 MSK / 1597122630 --> <row><v>2.546319293e+01</v></row>
<!-- 2020-08-11 08:10:40 MSK / 1597122640 --> <row><v>2.546319293e+01</v></row>
<!-- 2020-08-11 08:10:50 MSK / 1597122650 --> <row><v>2.480096602e+01</v></row>
<!-- 2020-08-11 08:11:00 MSK / 1597122660 --> <row><v>2.480094575e+01</v></row>
<!-- 2020-08-11 08:11:10 MSK / 1597122670 --> <row><v>2.391521916e+01</v></row>
<!-- 2020-08-11 08:11:20 MSK / 1597122680 --> <row><v>2.570375508e+01</v></row>
<!-- 2020-08-11 08:11:30 MSK / 1597122690 --> <row><v>2.305996423e+01</v></row>
<!-- 2020-08-11 08:11:40 MSK / 1597122700 --> <row><v>2.655912879e+01</v></row>
<!-- 2020-08-11 08:11:50 MSK / 1597122710 --> <row><v>2.480876661e+01</v></row>
<!-- 2020-08-11 08:12:00 MSK / 1597122720 --> <row><v>2.481034981e+01</v></row>
<!-- 2020-08-11 08:12:10 MSK / 1597122730 --> <row><v>2.480667576e+01</v></row>
<!-- 2020-08-11 08:12:20 MSK / 1597122740 --> <row><v>2.480821922e+01</v></row>
<!-- 2020-08-11 08:12:30 MSK / 1597122750 --> <row><v>2.481094399e+01</v></row>
<!-- 2020-08-11 08:12:40 MSK / 1597122760 --> <row><v>2.266941020e+01</v></row>
<!-- 2020-08-11 08:12:50 MSK / 1597122770 --> <row><v>2.552484289e+01</v></row>
<!-- 2020-08-11 08:13:00 MSK / 1597122780 --> <row><v>2.552484289e+01</v></row>
<!-- 2020-08-11 08:13:10 MSK / 1597122790 --> <row><v>2.552484289e+01</v></row>
<!-- 2020-08-11 08:13:20 MSK / 1597122800 --> <row><v>2.366359064e+01</v></row>
<!-- 2020-08-11 08:13:30 MSK / 1597122810 --> <row><v>2.595585752e+01</v></row>
<!-- 2020-08-11 08:13:40 MSK / 1597122820 --> <row><v>2.383080995e+01</v></row>
<!-- 2020-08-11 08:13:50 MSK / 1597122830 --> <row><v>2.578249258e+01</v></row>
<!-- 2020-08-11 08:14:00 MSK / 1597122840 --> <row><v>2.476898851e+01</v></row>
<!-- 2020-08-11 08:14:10 MSK / 1597122850 --> <row><v>2.485007357e+01</v></row>
<!-- 2020-08-11 08:14:20 MSK / 1597122860 --> <row><v>2.249212094e+01</v></row>
<!-- 2020-08-11 08:14:30 MSK / 1597122870 --> <row><v>2.712694797e+01</v></row>
<!-- 2020-08-11 08:14:40 MSK / 1597122880 --> <row><v>2.480676238e+01</v></row>
<!-- 2020-08-11 08:14:50 MSK / 1597122890 --> <row><v>2.397873126e+01</v></row>
<!-- 2020-08-11 08:15:00 MSK / 1597122900 --> <row><v>2.563894731e+01</v></row>
<!-- 2020-08-11 08:15:10 MSK / 1597122910 --> <row><v>2.480573101e+01</v></row>
<!-- 2020-08-11 08:15:20 MSK / 1597122920 --> <row><v>2.333396444e+01</v></row>
<!-- 2020-08-11 08:15:30 MSK / 1597122930 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:15:40 MSK / 1597122940 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:15:50 MSK / 1597122950 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:16:00 MSK / 1597122960 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:16:10 MSK / 1597122970 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:16:20 MSK / 1597122980 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:16:30 MSK / 1597122990 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:16:40 MSK / 1597123000 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:16:50 MSK / 1597123010 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:17:00 MSK / 1597123020 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:17:10 MSK / 1597123030 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:17:20 MSK / 1597123040 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:17:30 MSK / 1597123050 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:17:40 MSK / 1597123060 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:17:50 MSK / 1597123070 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:18:00 MSK / 1597123080 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:18:10 MSK / 1597123090 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:18:20 MSK / 1597123100 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:18:30 MSK / 1597123110 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:18:40 MSK / 1597123120 --> <row><v>2.488628828e+01</v></row>
<!-- 2020-08-11 08:18:50 MSK / 1597123130 --> <row><v>2.432612710e+01</v></row>
<!-- 2020-08-11 08:19:00 MSK / 1597123140 --> <row><v>2.529321738e+01</v></row>
<!-- 2020-08-11 08:19:10 MSK / 1597123150 --> <row><v>2.268383952e+01</v></row>
<!-- 2020-08-11 08:19:20 MSK / 1597123160 --> <row><v>2.587393409e+01</v></row>
<!-- 2020-08-11 08:19:30 MSK / 1597123170 --> <row><v>2.587393409e+01</v></row>
<!-- 2020-08-11 08:19:40 MSK / 1597123180 --> <row><v>2.316523793e+01</v></row>
<!-- 2020-08-11 08:19:50 MSK / 1597123190 --> <row><v>2.645360868e+01</v></row>
<!-- 2020-08-11 08:10:00 MSK / 1597122600 --> <row><v>2.479729023e+01</v></row>

2 ответа

Решена проблема путем добавления ближайшей отметки времени при вставке данных в базу данных:

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

Это нормализация данных, вызывающая вашу проблему.

Говоря простым языком, RRD должен иметь данные точно на настроенной границе временного интервала. Если вы предоставите смещение данных для этого, тогда он будет использовать прямолинейную интерполяцию, чтобы попытаться оценить его на основе доступных выборок и их моментов во времени.

Если до вашего образца далеко, это может означать, что он переоценивает следующий, и, как результат, недооценивает следующее. Общее среднее значение будет правильным, но у вас будут всплески (как вы можете видеть).

Решение, как вы заметили, состоит в том, чтобы убедиться, что метка времени находится точно на временной границе - в вашем случае кратно 10 секундам.

Здесь есть хорошее объяснение различных манипуляций с данными: http://rrdtool.vandenbogaerdt.nl/process.php

Другие вопросы по тегам