RRDTool дает мне пустой график

Я пытался заставить это работать методом проб, ошибок и исследований.

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 и т. д. должны быть суммированы, чтобы получить почасовую ставку. Они указывают количество событий, произошедших именно в это время.

У меня есть база данных mysql из 700 тыс. записей. Средний поток 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


person cybernard    schedule 31.05.2017    source источник


Ответы (1)


Здесь есть несколько проблем.

Во-первых, ваш RRD Create определенно неверен. Кажется, вы недостаточно долго храните данные и не определили сводную RRA.

Во-вторых, вы не сообщили нам образцы данных, поэтому мы не можем проверить, находятся ли они в правильных пределах. (обновление: теперь у меня есть образцы данных)

В-третьих, ваша графическая команда не указывает временное окно и поэтому не отображает временное окно, содержащее ваши данные. У вас также нет цвета, указанного в вашей директиве LINE, поэтому линия все равно не рисуется.

Наконец, из позднего обновления, предоставляющего фактические данные, я вижу, что интервал выборки часто больше, чем сердцебиение, поэтому данные отклоняются. Вам нужно будет увеличить сердцебиение (600 в определении DS) и, возможно, также увеличить настройку XFF в более позднем определении RRA (0,5, вероятно, должно увеличиться до 0,9).

Итак, определение RRD. В вашем определении указан шаг в 10 секунд с периодом пульсации данных в 600 секунд. Затем у вас определен один RRA с настройкой 1cdp=1pdp и только 24 строками, что означает, что он длится всего 4 минуты. Да, вы выбрасываете все данные через 4 минуты, так что их никогда не будет достаточно для создания часовой сводки.

Примечания:

  • cdp == консолидированная точка данных. Ряд в RRA.
  • pdp == первичная точка данных. Нормализованная по времени выборка из DS
  • DS == источник данных, фактическая выборка
  • RRA == круговой архив; где хранятся нормализованные консолидированные данные
  • XFF == Какая часть данных может быть неизвестной до того, как CDP станет неизвестной
  • Сердцебиение == сколько времени между образцами, прежде чем образец станет неизвестным

Поскольку вы говорите, что у вас есть 35 образцов в час (в среднем), это означает, что они примерно каждые 2 минуты. Таким образом, шаг в 10 секунд слишком мал, и 1 минута должна подойти. 10-минутное сердцебиение, вероятно, слишком велико — 5 минут должно быть в порядке — но пока давайте остановимся на 10 минутах, поскольку вы не указываете, насколько нерегулярны ваши выборки данных по времени.

Затем вы хотите почасово подводить итоги, поэтому вам понадобится дополнительный RRA 1cdp=60pdp с достаточным количеством строк для графика — скажем, 200, что будет охватывать неделю, но вам может понадобиться больше. Это потому, что 1pdp=1шаг=1минута, поэтому нам нужно 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: первый RRA длится 1 день, сохраняя значения с точностью до 1 минуты; второй длится неделю, сводясь к средним почасовым показателям. У нас есть 10-минутное сердцебиение, поэтому, если ваши данные поступают хотя бы так часто, у вас не будет пробелов.

Следующее, что нужно помнить, это то, что ваши данные должны быть добавлены в RRD в возрастающем порядке времени, и вам нужно будет ввести как минимум 62 минуты последовательных выборок, прежде чем вы увидите что-либо в почасовом сводном RRA.

Чтобы отобразить линию, используйте LINE1:attempts#ff0000:Attempts, чтобы получить красивую красную линию и легенду.

Позаботьтесь обо всем этом, и вы должны начать видеть некоторые графики — при условии, что вы используете --start и --end в своей команде графика, чтобы указать то же самое временное окно, которое содержит ваши данные!

Теперь получить разные месяцы на одном графике немного сложнее. Прежде всего, вам необходимо значительно увеличить размер вашего второго RRA — с 200 (примерно на неделю) до 4500 (около 6 месяцев). Затем вам нужно будет использовать смещение времени при вызове функции «RRD Graph», чтобы определить несколько строк со смещением времени -n*28*24*3600 секунд (я рекомендую использовать кратное количество недель, а не календарных месяцев для лучшее сравнение, но вы можете использовать все, что хотите). Вы сделаете это, используя дополнительные DEF с опциями :start и :end. Затем нанесите их на график отдельными линиями. Дополнительную информацию см. в руководстве RRDTool. .

Итак, в качестве окончательного резюме, основанного на ваших исходных командах:

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
person Steve Shipway    schedule 01.06.2017
comment
Я сделал это и загрузил несколько тысяч записей, но мой график по-прежнему пуст. Я добавил образцы данных, которые вы хотели. Чтобы разрешить ввод более ранних записей, также необходимо --start 1435125030. - person cybernard; 01.06.2017
comment
Вы вводите в RRD дату примерно июнь 2015 года... затем вы вводите данные за 19 мая 2017 года. Хорошо, справедливо, хотя вы не можете использовать десятичное время в обновлениях, вы должны использовать целое число. Однако ваша команда graph не указывает --start или --end, поэтому по умолчанию она будет использовать --end=now и --start='end-1day'. Разумеется, в этом временном окне данных не будет. Попробуйте использовать --start=1495170017 --end='start+1day', и тогда ваше временное окно графика должно соответствовать вашему временному окну данных. - person Steve Shipway; 01.06.2017
comment
О, теперь вы также говорите, что хотите, чтобы образцы были СУММИРОВАННЫМИ, чтобы получить почасовую ставку, а не усреднение. Это совсем другое дело, поскольку RRDTool работает с частотой в секунду. Вместо использования типа Gauge вы должны использовать ABSOLUTE, а при отображении умножать сохраненное значение на STEPWIDTH перед отображением. - person Steve Shipway; 01.06.2017
comment
Я обновил время начала до 1435727683 или 2015-07-01 00:14:43 и изменил набор данных, чтобы он соответствовал. Объединены значения в целые секунды. Без изменений. Обновлю свои заявления выше. - person cybernard; 01.06.2017
comment
ОШИБКА: недопустимая опция -- 'end=start+1day' Также недействительна --end=1438318800 или --end 1438318800. Хорошо, опции работают с командой graph, но она по-прежнему пуста. - person cybernard; 01.06.2017
comment
Я добавил образцы данных за 2 недели. Пожалуйста, используйте его, чтобы дать мне командную строку для создания хотя бы одного рабочего графика, и опубликуйте используемые команды, чтобы я мог с ними повозиться. - person cybernard; 01.06.2017
comment
Хорошо, увидев ваши фактические данные, я заметил, что (в отличие от вашего первоначального примера) есть БОЛЬШИЕ пробелы. Время выборки регулярно составляет 1000 секунд или более. Однако ваш RRD настроен на пульсацию 600 с, что означает, что образцы станут недействительными. - person Steve Shipway; 08.06.2017
comment
Используя rrdtool dump, я вижу, что некоторые CDP устанавливаются, где интервал выборки составляет ‹600 с, но многие не устанавливаются, потому что интервал слишком велик. Увеличьте свое сердцебиение с 600 (в rrdtool create), чтобы получить больше из них. Вероятно, вы также захотите уменьшить XFF в определении секунд RRA с 0,5 до 0,1 или меньше. - person Steve Shipway; 08.06.2017
comment
Наконец, ваша графическая команда не указывает цвет, поэтому линия рисуется невидимо. Вам также необходимо умножить на STEPWIDTH. Используйте это, и вы получите строку: rrdtool graph latency.png -a PNG -w 700 -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 - person Steve Shipway; 08.06.2017
comment
Хорошо, по крайней мере, я получил линию. Я меняю начало/конец для графика данных за неделю, но линия есть только у пары дней. Думаю, мне нужно ввести больше данных. - person cybernard; 08.06.2017