Как получить максимальные и максимальные значения из rrd файлов в одной команде rrd

У нас есть MRTG, настроенный для мониторинга сети. Для этого мы используем инструмент RRD для получения графика данных графика. Теперь я создал скрипт, который на самом деле извлекает данные из RRD-файлов, поэтому из извлеченных данных мне нужно максимум и максимум за 24 часа. Теперь с этими максимальными значениями я вычисляю использование плохой пропускной способности для каждого клиента / ссылки.

Теперь у меня вопрос: есть одна команда rrd для извлечения значений max, max, min и min из файлов RRD.

Так как я новичок в этом RRD, я был бы признателен, если бы команда также была предоставлена ​​вашим решением.

Пожалуйста помоги.

1 ответ

В RRD-файлах, созданных MRTG, источники данных "in" и "out" имеют имена "ds0" и "ds1" соответственно. Существует 8 RRA; они соответствуют гранулярности 5 минут, 30 минут, 2 часа и 1 дня с накоплениями AVG и MAX. По умолчанию они будут иметь длину 400 (более старые версии MRTG) или длину 800 (более новые версии MRTG), что означает, что у вас, скорее всего, будет временное окно 2 дня, 2 недели, 2 месяца и 2 года соответственно для этих RRAS. (Обратите внимание, что RRDTool 1.5 может опускать 1pdp MAX RRA, поскольку это функционально идентично 1pdp AVG RRA)

Для вас это означает следующее:

  • У вас нет RRA типа MIN. Если вы работаете в последние 2 дня, то это можно рассчитать по AVG RRA с самой высокой степенью детализации. В противном случае ваши данные будут все более неточными.
  • Ваш RRA с наименьшей гранулярностью содержит значения MAX на ежедневной основе. Однако эти дни разделены на полночь UCT, а не полночь по местному времени. Вы не указываете, для каких 24-часовых окон вам нужно рассчитывать.

Если вас интересуют только вычисления в течение последнего 24-часового периода, тогда во всех расчетах может использоваться RRA с самой высокой степенью детализации.

Обратите внимание, что, поскольку все границы шагов рассчитываются с использованием UCT, если вы не проживаете в этом часовом поясе, вы не можете использовать FETCH или XPORT для получения необходимых данных, которые необходимо суммировать по общему временному окну.

Чтобы получить данные, вы можете использовать что-то вроде этого:

rrdtool graph /dev/null -e 00:00 -s "end-1day" --step 300 
  DEF:inrmax=target.rrd:ds0:AVERAGE:step=300:reduce=MAXIMUM 
  DEF:outrmax=target.rrd:ds1:AVERAGE:step=300:reduce=MAXIMUM 
  DEF:inrmin=target.rrd:ds0:AVERAGE:step=300:reduce=MINIMUM 
  DEF:outrmin=target.rrd:ds1:AVERAGE:step=300:reduce=MINIMUM
  VDEF:inmax=inrmax,MAXIMUM 
  VDEF:inmin=inrmin,MINIMUM
  VDEF:outmax=outrmax,MAXIMUM 
  VDEF:outmin=outrmin,MINIMUM 
  LINE:inrmax 
  PRINT:inmax:"In Max=%lf"
  PRINT:inmin:"In Min=%lf"
  PRINT:outmax:"Out Max=%lf"
  PRINT:outmin:"Out Min=%lf"

Несколько замечаний по этому поводу:

  • Мы используем "график", чтобы мы могли использовать общее временное окно, не зависящее от границы шага
  • Используйте rrdgraph, чтобы использовать общее временное окно; fetch и xport будут работать на границах шагов.
  • Мы суммируем RRA с наибольшей гранулярностью на лету
  • Мы используем /dev/null, так как на самом деле не хотим графическое изображение
  • Мы должны определить фиктивную линию на графике, иначе мы ничего не получим
  • Строки DEF определяют шаг с наибольшей гранулярностью и снижение CF. Вы можете пропустить эту часть, если вы используете шаг 5 минут
  • Мы вычисляем итоговые значения с помощью VDEF, а затем печатаем их на стандартный вывод с помощью PRINT.
  • Первая строка вывода будет размером графика; Вы можете отказаться от этого

Когда вы вызываете rrdtool::graph из вашего php-скрипта, просто передайте ему параметры таким же образом, как при работе с командной строкой. Если вы не используете Linux, вам может понадобиться что-то отличное от /dev/null.

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