RRDTool: установка и использование во FreeBSD

RRDtool (Round Robin Database). Обеспечивает хранение и отображение данных мониторинга (загрузка каналов, температура и любая другая зависящая от времени последовательность данных, которую можно получить некоторым способом). Задумывалась как повторная, но более правильная реализация MRTG. Объём хранимых данных не увеличивается со временем (ячейки хранения используются циклически). Использование различных функций консолидации данных позволяет охватывать большие интервалы времени без чрезмерного увеличения объема БД за счет снижения разрешающей способности. В отличие от mrtg, программа не упаковывает старые данные самостоятельно, это надо предусматривать при проектировании БД. Сбор информации и генерация HTML-кода также производится с помощью внешних средств. Более мощные средства генерации графиков. Все времена во внутреннем формате Unix (число секунд с 1 января 1970 в UTC). Значения счетчиков могут быть целыми или вещественными числами или специальным значением UNKNOWN. Лицензия - GPL (но автор не будет против, если в благодарность послать ему CD/DVD из указанного им списка; при установке rrdtool имитируется заказ CD на amazone.com ;-). Необходимо иметь perl 5 (без perl rrdtool соберется, но не будет модулей подержки perl) и обычный набор средств компиляции (make, gcc, autoconf, automake, libtool). Имеется также поддержка tcl и python. Нельзя использовать для учета и биллинга - слишком много он усредняет и сглаживает, используя достаточно сложные алгоритмы. Установка 1.2.13 (Linux RedHat 9)

В версии 1.2 вместо gd используется libart (антиалиасинг, прозрачность, TrueType; дополнительно вывод в форматах PDF, SVG, EPS); поддержка переменных (VDEF); изменился формат хранения данных (новая версия читает старые архивы); дополнительные библиотеки не включены в поставку; предсказание следующего значения методом Holt-Winters; отсеивание подозрительных (слишком сильно отдличающихся от предсказанных) данных.

проверить наличие пакетов -devel библиотек zlib, libpng, freetype, libart_lgpl

скачать и развернуть архив

прочитать doc/rrdbuild.txt

./configure [--prefix=/usr/local/rddtool-версия] [--disable-rrdcgi] [--enable-shared] [--disable-tcl] [--disable-python]

make

make install (/usr/local/rrdtool-1.2.13)

/usr/local/rrdtool-1.2.13/lib/ (librrd.la, librrd.so.2.0.7, librrd.so.2, librrd.so, librrd.a, (librrd_th.la, librrd_th.so.2.0.7, librrd_th.so.2, librrd_th.so, librrd_th.a)

/usr/local/rrdtool-1.2.13/lib/perl/5.8.0/ (RRDp.pm)

/usr/local/rrdtool-1.2.13/lib/perl/5.8.0/i386-linux-thread-multi/ (RRDs.pm, perllocal.pod, ntmake.pl, auto/)

/usr/local/rrdtool-1.2.13/bin/ (rrdtool, rrdupdate, rrdcgi)

/usr/local/rrdtool-1.2.13/include/rrd.h

/usr/local/rrdtool-1.2.13/man/man1/ (bin_dec_hex.1, cdeftutorial.1, rpntutorial.1, rrd*.1)

/usr/local/rrdtool-1.2.13/share/

doc/rrdtool-1.2.13/ (html/, txt/)

man/man3/ (RRDp.3pm, RRDs.3pm)

rrdtool/fonts/DejaVuSansMono-Roman.ttf

rrdtool/examples/ Установка 1.0.33 (Linux RedHat 6.2 и Solaris 2.5)

В исходники версии 1.0 включены >zlib, gd (довольно старый - без поддержки png и jpeg), libpng, libcgi.

скачать и развернуть архив

./configure [--prefix=/usr/local/rddtool-версия] [--enable-shared] [--with-tcllib=/path-где-лежит-tclConfig.sh] (в RedHat 6.2 tcl лежит в /usr/lib, в Solaris - в /usr/local/lib)

в Solaris включить /usr/ccs/bin в PATH

make

make install (/usr/local/rrdtool-1.0.33)

lib (librrd.a, librrd.la, perl/)

bin (rrdcgi, rrdtool, rrdupdate, trytime)

include/rrd.h

doc/ (форматы: txt и pod)

html/

man/man1/

examples/ (bigtops.pl, cgi-demo.cgi, minmax.pl, piped-demo.pl, shared-demo.pl, stripes.pl)

contrib/

make site-perl-install (perl-овые модули RRDp.pm и RRDs.pm в общедоступное место)

make site-tcl-install (если был запрошен модуль для tcl) Методика использования

Основные этапы использования:

проектирование и создание базы данных (rrdtool create)

регулярное получение значения счетчика с помощью, например, snmpget; занесение значения счетчика и времени его получения (это не обязательно текущее время) в базу данных (rrdtool update)

при необходимости извлечение информации из БД (rrdtool fetch)

при необходимости создание графика (rrdtool graph); генерация html-страницы производится внешними средствами

Параметры передаются в командной строке или через stdin (в этом случае в командной строке должен быть знак "минус"). Для удобства в интерактивном режиме обеспечиваются команды: cd (делает chroot при работе с uid=0), mkdir, ls, quit. Описание любой команды можно получить командой: rrdtool help имя-команды (без указания имени команды выдаётся список команд).

rrdtool можно использовать по сети следующим способом (про безопасность автор не задумывался, так что рекомендую пользоваться сбором данных с помощью ssh):

в /etc/services добавить (номер порта произвольный)

rrdsrv 13900/tcp

в /etc/inetd.conf добавить (для xinetd модифицировать соответственно)

rrdsrv stream tcp nowait root /usr/local/rrdtool/bin/rrdtool rrdtool - /var/rrd

Создание базы данных

rrdtool create имя-файла.rrd --start начальное-время --step интервал DS:имя-источника-данных:тип-источника-данных:heartbeat:min:max RRA:функция-консолидации:x-доля:отсчетов-на-ячейку:число-ячеек

Начальное время задается в формате timestamp или at-формате (по умолчанию - текущее время). Можно использовать также формат вида: 20010906 20:07 (без секунд!).

Интервал задает предполагаемый интервал в секундах между последовательными отсчетами, задавая таким образом (вместе с начальным временем) сетку по оси времени (по умолчанию 300 секунд).

Каждый DS (data source) описывает отдельный источник данных (их может быть несколько в одной БД). Имя источника не длинее 19 символов. Типы источников:

COUNTER: для получения текущего значения отсчета предыдущее значение счетчика вычитается из текущего и делится на интервал между отсчетами (например, счетчик переданных байт). Переполнение счетчика обрабатывается только для типа COUNTER (предполагается, что счетчик 32 или 64-битный). Интересно, как это сочетается с вещественными числами?

GAUGE: текущее значение отсчета приравнивается полученному значению счетчика (например, температура вместо изменения температуры)

DERIVE: COUNTER, который может уменьшаться

ABSOLUTE: для получения текущего значения отсчета текущее значение счетчика делится на интервал между отсчетами (используется для счетчиков, обнуляемых при чтении)

COMPUTE: вычисляемое значение в виде rpn-выражения

heartbeat устанавливает максимальный допустимый интервал в секундах между последовательными отсчетами (рекомендуется 2*step). При превышении его промежуточные отсчеты заполняются значением UNKNOWN.

Если значения min и/или max установлены (отсутствие установок определяется символом U), то обработанные значения отсчетов, выходящие за эти пределы, не используются (считаются неопределёнными).

Каждый RRA (round robin archives) для DS (может быть несколько архивов для одного источника-данных) описывает количество ячеек в архиве (после заполнения последней ячейки запись идет в первую), как вычисляется значение ячейки из значения отсчетов (функция консолидации: AVERAGE, MAX, MIN, TOTAL, LAST; сколько отсчетов комбинировать в одну ячейку).

x-доля определяет долю неопределённых значений в интервале консолидации, при которой консолидированное значение ещё считается определённым (от 0 до 1).

В версии 1.2 в дополнение к прежним функциям консолидации добавились функции сглаживания (предсказание на основе предыдущих данных) и фильтрации предположительно ошибочных данных (слишком большое отклонение от предсказанного): HWPREDICT (предсказание методом Holt-Winters), DEVPREDICT (отклонение от предсказания, взвешенное для одного цикла), FAILURES (слишком большое отклонение от предсказанного), SEASONAL (предсказание по алгоритму Holt-Winters со скользящим окном в 288 отсчётов), DEVSEASONAL.

Чтобы съимитировать поведение mrtg (600 5-минутных отсчетов, 600 30-минутных отсчетов, 600 2-часовых отсчетов, 732 дневных отсчета; хранятся усредненные за интервал отсчеты и пиковые значение 5-минутных отсчетов за интервал; всего получается 797 дней) необходимо создать следующую БД:

rrdtool create bd.rrd

DS:input:COUNTER:600:U:U

DS:output:COUNTER:600:U:U

RRA:AVERAGE:0.5:1:600

RRA:AVERAGE:0.5:6:700

RRA:AVERAGE:0.5:24:775

RRA:AVERAGE:0.5:288:797

RRA:MAX:0.5:1:600

RRA:MAX:0.5:6:700

RRA:MAX:0.5:24:775

RRA:MAX:0.5:288:797

Посмотреть описание БД можно с помощью команды

rrdtool info filename.rrd

Изменить размер RRA можно командой (создаётся новый файл; номер RRA можно получить командой info)

rrdtool resize filename.rrd номер-rra {GROW | SHRINK} число-ячеек

Изменить любой параметр DS можно командой

rrdtool tune filename.rrd [--heartbeat имя-ds:heartbeat] [--minimum имя-ds:min] [--maximum имя-ds:max] [--data-source-type имя-ds:тип-ds] [--data-source-rename старое-имя-ds:новое-имя-ds] Занесение значения в БД

rrdtool update имя-файла.rrd время:значение[:значение-DS2...] ...

Время задается в at-формате или во внутреннем формате Unix. В качестве времени можно использовать символ N (текущее время). В качестве значения можно использовать символ U (unknown). rrdtool пытается интерполировать невовремя приходящие отсчеты, пытаясь привязать их к равномерной временной сетке. Реальные значения тоже хранятся для интерполяции следующих отчетов. Времена должны быть по возрастающей! Болтливый вариант команды update - updatev. Ключ --template позволяет задать последовательность (имена DS через ':'), в которой задаются значения. Извлечение значений из БД

rrdtool fetch имя-файла.rrd функция-консолидации [--resolution секунд] [--start время] [--end время]

Используется также внутри функции построения графика. rrdtool пытается подобрать RRA подходящего разрешения или производит вычисления на ходу (по умолчанию - максимальное разрешение из имеющихся). Время начала (по умолчанию - end-1day) и конца интервала (по умолчанию - now) задается в at-формате или во внутреннем формате Unix. Результат выводится в текстовом виде на stdout по одному значению в строке в экспоненциальном формате (в начале строки выводится время во внутреннем формате Unix), первые 2 строки - заголовок (имена DS). Для гарантированного выбора RRA нужного разрешения необходимо не только задать параметр --resolution, но и параметры --start и --end, кратные выбранному разрешению, например:

TIME=$(date +%s)

RRDRES=900

rrdtool fetch имя-файла.rrd AVERAGE -r $RRDRES

-e $(echo $(($TIME/$RRDRES*$RRDRES))) -s e-1h

Экспорт в формате XML (определение переменной и шага см, в опсании команды graph):

rrdtool xport имя-файла.rrd [--start время] [--end время] [--maxrows число-отсчётов] [--step шаг] [определение-переменной] [XPORT:имя-переменной[:описание]] ...

Посмотреть время последнего изменения (во внутреннем формате Unix)

rrdtool last filename.rrd

Посмотреть время первого изменения определённого RRA (во внутреннем формате Unix; номер RRA можно получить командой info)

rrdtool first filename.rrd --rraindex номер-RRA Построение графиков

rrdtool graph имя-файла [--start время] [--end время] [--step шаг] [--x-grid описание-оси-времени] [--force-rules-legend] [--y-grid описание-оси-y] [--alt-y-grid] [--no-gridfit] [--units-exponent экспонента] [--units-length число] [--vertical-label текст] [--width пикселей] [--height пикселей] [--only-graph] [--imginfo formatstring] --imgformat PNG|SVG|PDF|EPS [--zoom масштаб] [--upper-limit maxY] [--lower-limit minY] [--rigid] [--alt-autoscale] [--alt-autoscale-max] [--base кило] [--logarithmic] [--units=si] [--color элемент#rrggbb[aa]] [--font элемент:размер:[имя-файла-ttf-шрифта]] [--font-render-mode тип-сглаживания]] [--font-smoothing-threshold размер] [--tabwidth пикселов] [--no-legend] [--title текст] [--watermark текст] [--slope-mode] [--lazy] [определение-переменной] ... [определение-вида-графика] ...

В качестве имени файла можно использовать "-" (вывод на stdout).

Время начала (по умолчанию - end-1day) и конца интервала (по умолчанию - now) задается в at-формате или во внутреннем формате Unix. По умолчанию, rrdtool вычисляет размер интервала времени, приходящегося на 1 пиксел, и пытается извлечь данные с указанным разрешением. Ключ --step позволяет задать разрешение вручную (шаг меньше 1 пикселя молча игнорируется).

Описание метки оси времени и сетки (--x-grid) может быть none (отсутствие сетки), autoconfigure или GTM:GST:MTM:MST:LTM:LST:LPR:LFM. Например: MINUTE:10:HOUR:1:HOUR:1:0:%X.

GTM - единицы мелкой сетки (SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR)

GST - количество этих единиц между линиями мелкой сетки

MTM - единицы крупной сетки

MST - количество этих единиц между линиями крупной сетки

LTM - единицы для текстовых меток времени

LST - количество этих единиц между текстовыми метками времени

LPR - точность текстовых меток в секундах

LFM - формат strftime для генерации текста метки

Описание метки оси Y и сетки (--y-grid) может быть none (отсутствие сетки), autoconfigure или шаг-мелкой-сетки:шаг-текстовых-меток. --alt-y-grid автоматически порождает достаточно плотную метрическую сетку по оси Y (т.е. каждые 1, 2, 5 или 10 единиц или кратных им). --no-gridfit отменяет выравнивание сетки по целым пикселям. --units-exponent позволяет вручную задать единицы измерения по оси Y: 0 - единицы, 3 - k, 6 - M, -3 - m и т.д. --units-length позволяет задать число цифр в метке по оси Y. --logarithmic задаёт логарифмический масштаб по оси Y. --units=si позволяет сохранить метрические метки при логарифмическом масштабе. --force-rules-legend выводит метки осей, даже если сами оси не поместились.

--width (400) и --height (100) определяют размер области, занимаемой графиком (ещё требуется некоторое пространство на оформление). --only-graph отключает вывод сопроводительных надписей (подходит для иконок совместно с --height меньше 32).

--imginfo позволяет вывести на stdout строку текста, параметризованную именем файла и разрешением картинки. Например: --imginfo '<IMG SRC="/img/%s" WIDTH="%lu" HEIGHT="%lu" ALT="Demo">'

--zoom позволяет масштабировать график. --upper-limit задает максимальное значение Y на графике вместо автоматически вычисляемого. Если максимальное значение функции больше указанного, то не учитывается пока не указан ключ --rigid. --lower-limit задает минимальное значение Y на графике вместо автоматически вычисляемого. Если минимальное значение функции меньше указанного, то не учитывается пока не указан ключ --rigid. --alt-autoscale определяет интервал по оси Y на основе минимального и максимального значения функции не округляя до одного из предопределенных интервалов. --alt-autoscale-max не округляет только максимальное значение до одного из предопределенных интервалов.

--base определяет, что понимается под кило - 1000 или 1024 (для трафика должно быть 1000).

--color позволяет переопределить цвета элементов оформления: BACK (фон), CANVAS, SHADEA (верхняя и левая границы), SHADEB (нижняя и правая границы), GRID (мелкая сетка), MGRID (крупная сетка), FONT, AXIS (оси), FRAME (рамка), ARROW (стрелки вверх и вправо). Ключ может быть использован несколько раз.

--font позволяет переопределить для PNG шрифт и размер шрифта элементов оформления: DEFAULT, TITLE, AXIS, UNIT, LEGEND. Отслеживается также переменная окружения RRD_DEFAULT_FONT. --font-render-mode позволяет задать режим сглаживания: normal, light, mono. --font-smoothing-threshold определяет минимальный размер шрифта, который ещё будет сглаживаться (по умолчанию - 0).

--slope-mode сглаживает график.

--lazy отменяет генерацию графика, если файл существует и не устарел.

Определение переменной (может использоваться в дальнейшем; имя переменной может состоять из букв, цифр, тире и подчёркивания; не длинее 255 символов) имеет следующий вид:

DEF:имя-переменной=filename.rrd:имя-DS:функция-консолидации[:step=шаг][:start=время][:end=время][:reduce=функция-консолидации]

CDEF:имя-переменной=выражение-в-обратной-польской-записи (виртуальный DS)

VDEF:имя-переменной=выражение-в-обратной-польской-записи (вычисление значения, можно использовать только агрегирующие функции; вместе со значением может вычисляться момент времени)

Выбор RRA происходит автоматически исходя из функции консолидации и необходимого разрешения (в идеальном случае один отсчет на один пиксел; например, если разрешение RRA - 300 секунд, то для графика шириной 400 пикселов необходимо выбрать интервал 300*400 секунд, т.е. указать "--start end-2000minutes"). Если разрешение RRA выше, чем требуется, то производится дальнейшая консолидация с помощью указанной функции ( а если - ниже?).

Элементы обратной польской записи (числа, имена ранее определенных переменных и коды операций) перечисляются через запятую. Истина - 1, ложь - 0. Сравнение с неопределённым или бесконечным значением всегда даёт 0. Логарифмы натуральные. Углы в радианах. Допустимы операции: +, -, *, /, %, SIN, COS, LOG, EXP, SQRT, ATAN, ATAN2 (первым извлекается x, затем y), DEG2RAD, RAD2DEG, FLOOR, CEIL, LT, LE, GT, GE, EQ, IF (извлекает 3 элемента из стека; если последнее извлеченное значение не 0, т.е. истина, то в стек кладется второе извлеченное значение, иначе - первое), MIN, MAX, LIMIT (первые 2 значения из стека определяют границы, если третье значение лежит внутри этих границ, то оно кладется в стек, иначе в стек кладется неопределенное значение), DUP (дублирует верхний элемент стека), EXC (меняет 2 верхних элемента местами), POP (удаляет верхний элемент из стека), UN (если верхний элемент стека является неопределенным значением, то он заменяется на 1, иначе - на 0), UNKN (в стек кладется неопределенное значение), INF (бесконечность в стек), NEGINF (отрицательная бесконечность), ISINF (если верхний элемент стека является бесконечным значением, то он заменяется на 1, иначе - на 0), SORT (первый извлечённый элемент определяет число элементов для сортировки), REV (обратить последовательность, первый извлечённый элемент определяет число элементов), TREND (усреднение, первый извлечённый элемент определяет интервал времени), PREV (если это первый отсчет, то неопределенное значение в стек, иначе значение данного DS, вычисленное на предыдущем шаге), PREV(имя-переменной) (если это первый отсчет, то неопределенное значение в стек, иначе значение данной переменной VDEF, вычисленное на предыдущем шаге), COUNT (поместить в стек индекс текущего значения в DS), NOW (текущее время), TIME (время отсчета), LTIME (TIME с добавлением смещения временой зоны и учетом летнего времени). Агрегирующие операции для VDEF: MAXIMUM, MINIMUM, AVERAGE, LAST, FIRST, TOTAL (сумма значений, умноженных на интервал отсчёта; например, можно получить общий траффик по БД скоростей), PERCENT (первый параметр - число процентов; второй - имя DS или CDEF; значения последовательности сортируются; возвращается такое число, что заданный процент значений не превышает его), параметры корреляции (LSLSLOPE, LSLINT, LSLCORREL).

Примеры обратной польской записи:

idat1,UN,0,idat1,IF (замена неопределенного значения на 0)

Определение вида графика:

PRINT:имя-переменной-VDEF:формат (печать текстовой строки по указанному формату на stdout)

GPRINT:имя-переменной-VDEF:формат (аналогично PRINT, но результат печатается в графике под легендой)

COMMENT:текст (печать текста в график)

HRULE:значение#rrggbbaa[:легенда] (устарело; горизонтальная линия на указанной высоте с комментарием)

VRULE:время#rrggbbaa[:легенда] (вертикальная линия с комментарием; время задаётся явно или именем VDEF-переменной)

LINE[ширина]:имя-переменной[#rrggbbaa[:легенда[:STACK]]] (бесцветная линия полезна в сочетании со STACK (поднятие над предыдущей линией или областью); ширина задаётся вещественным числом)

AREA:имя-переменной[#rrggbbaa[:легенда[:STACK]]] (заливка области)

STACK:имя-переменной[#rrggbbaa[:легенда]] (устарело; линия или область, поднятая над предыдущей LINE, AREA или STACK)

TICK:имя-переменной#rrggbbaa[:доля-от-оси-Y[:легенда]] (вертикальные засечки на месте каждого определённого и ненулевого значения переменной)

SHIFT:имя-переменной:смещение (график указанной переменной будет строиться со сдвигом времени назад; смещение задаётся числом или именем переменной)

Символы ':' в тексте и легендах необходимо защищать обратной косой чертой. Управление форматированием текста:

l - выравнивание влево

- выравнивание вправо

c - выравнивание в центр

j - justify

g - подавить вывод завершающих строку пробелов

s - переход на следующую строку (только для COMMENT)

Формат:

любой символ, кроме '%', печатается как есть

%% - символ '%'

%#.#le - экспоненциальный формат

%#.#lf - вещественное число с точкой

%s - сокращённое наименование использованных единиц СИ (k, M и т.д.)

%a, %A - сокращённое или полное имя дня недели

%b, %B - сокращённое или полное имя месяца

%d, %m, %y, %H, %M, %S - день, месяц, год, часы, минуты, секунды в виде 2 цифр

%Y - год в виде 4 цифр

%j - номер дня недели (0-6)

%w - день года (1-366)

%c - дата и время

%x - дата

%X - время

%U - номер недели (первая неделя года по первому воскресенью)

%W - номер недели (первая неделя года по первому понедельнику)

%Z - часовой пояс

Пример наложения графиков текущей и предыдущей недели:

...

--end now --start end-1w

DEF:thisweek=router.rrd:ds0:AVERAGE

DEF:lastweek=router.rrd:ds0:AVERAGE:end=now-1w:start=end-1w

...

Обмен данными

Данные в БД хранятся в двоичном формате, поэтому файлы .rrd нельзя копировать между компьютерами различной архитектуры. Для обмена (и ручного внесения изменений) используются утилиты rrdtool dump и rrdtool restore.

Вывод в файл в формате XML: rrdtool dump filename.rrd > filename.xml

Чтение из файла в формате XML (возможна проверка минимальных и максимальных значений): rrdtool restore filename.xml filename.rrd [--range-check] [--force-overwrite] at-формат указания времени

Состоит из двух частей:

опорное время (по умолчанию - now) состоит из

времени дня (HH:MM, HH.MM, HH, midnight, noon)

дня (имя-месяца день-месяца [год], yesterday, today, tomorrow, MM/DD/[YY]YY, DD.MM.[YY]YY, YYYYMMDD)

В качестве исключения можно использовать формат: 19970703 12:45

смещение относительно опорного времени (в одно смещение можно конкатенировать несколько единиц - 1h30m; можно использовать несколько смещений - -6h+15min)

знак (+ или -)

число

единица измерения (years, months, weeks, days, hours, minutes, seconds); можно сокращать вплоть до одной буквы; чтобы понять, что означает буква m - минуты или месяца программе приходится читать мысли ;)

Пробелы (и заменяющие их подчеркивания или запятые) вставляются по вкусу (закавычивать для shell не забывайте!).

В качестве опорного времени для начала можно использовать слово end, а опорного времени для конца интервала можно использовать слово start (цикл ссылок устраивать не надо!).

Результат может вас удивить (May 31 -1month есть 1 мая!), особенно в момент перехода на летнее время и обратно. Сбор информации с удаленных хостов с помощью SSH

SSH довольно медленно инициализирует сеанс, поэтому сбор информации с удалённых хостов необходимо пакетировать:

настроить выполнение пакетной команды ssh без задания пароля

на хранящем базу хосте создать специальный ключ для работы rrdtool

ssh-keygen -t dsa -b 2048 -N "" -f ~/.ssh/rrdtool

на остальных хостах добавить его в ~/.ssh/authorized_keys с командой ~/rrdtool/gather_answer.sh

на хранящем базу хосте в crontab внести выполнение каждые 5 минут ~/rrdtool/gather_query.sh

gather_query.sh: обращается по ssh ко всем хостам и складывает результат в ~/rrdtool/имя-хоста.data

gather_answer.sh: собирает необходимую информацию в зависимости от имени локального хоста и выводит её на stdout

Источник: http://bog.pp.ru/work/rrdtool.html

Обновлено: 12.03.2015