Как получить максимальные и максимальные значения из 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.