пишем скрипты для Cacti

Рассмотрим, как писать собственные скрипты для Cacti. Для примера я решил показать, как строить графики температуры процессора и материнской платы, используя пакет healthd (здесь и далее примеры приведены для FreeBSD).

установка healthd

Сразу скажу, что сначала я хотел нужную информацию получать с помощью mbmon'а. После того, как я поставил его, я столкнулся с определенными трудностями, связанными с smbus. Решения проблемы я пока не нашел, но скрипт для mbmon'а был уже написан, поэтому я приведу его здесь – он должен работать. После этого я наткнулся на другую утилиту - healthd и решил попробовать ее.

После установки healthd - если все прошло успешно - исполняемые файлы находятся в /usr/local/bin. В пакете на самом деле две программы (в отличие от mbmon) - клиент и сервер (демон). Они называются healthdc и healthd соответственно. Конфигурируется сервер при помощи файла /usr/local/etc/healthd.conf, но мы его трогать не будем, так как все должно нормально работать в конфигурации по умолчанию.

После того, как мы установили клиент и сервер, сначала необходимо запустить сервер. Для этого воспользуемся скриптом, который уже находится в /usr/local/etc/rc.d/.

/usr/local/etc/rc.d/healthd.sh start

Чтобы сервер загружался вместе с системой, нужно добавить следующую строчку в /etc/rc.conf:

healthd_enable="YES"

Теперь можно считать, что установка закончена, и можно попробовать запустить клиента.

клиент healthdc

Как я уже говорил выше, клиент называется healthdc и находится в /usr/local/bin. Если после установки был сделан rehash, запускаем его командой

healthdc

localhost 27.0 35.0 0.0 2576 2360 5532 1.38 3.20 3.33 5.08 15.50 -4.00 -4.61


Как видно, вывод команды довольно простой, но информативный. Нам нужны будут только 2, 3, 5, 6 и 7 поля. Это есть температура материнской платы, центрального процессора и текущие скорости вращения трех вентиляторов охлаждения.

пишем скрипт

Писать скрипт будем на Perl. Нужно всего лишь вызвать healthdc без параметров и разобрать его вывод. У меня получилось вот что:

#!/usr/bin/perl

my %data;

$in = `/usr/local/bin/healthdc`;
@data = split(/\t/, $in);
printf "TEMP0:%.2f TEMP1:%.2f FAN0:%d FAN1:%d FAN2:%d", $data[1], $data[2], $data[4], $data[5], $data[6];


Думаю, пояснять работу программы не надо, и так все должно быть понятно.

Проверяем, как он работает:

perl ./health_monitor.pl
TEMP0:27.00 TEMP1:35.00 FAN0:2596 FAN1:2343 FAN2:5532


Cacti требует, чтобы значению каждого из полей предшествовало его имя.

Имя и значения каждого поля должны быть отделены друг от друга двоеточием. Я назвал поля TEMP0, TEMP1, FAN0, FAN1 и FAN2 соответственно.

строим графики

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

data input method

Сначала нужно добавить новый метод ввода данных (Data Input Method). Имя методу (Name) можно дать любое, главное потом самому не запутаться. В качестве Input type здесь нужно указать "Script/Command", поскольку данные мы будем брать из скрипта. Input String - команда, которая выполняется с целью добыть драгоценную информацию. Сюда пишем "perl <path_cacti>/scripts/health_monitor.pl".

Поскольку healthdc не принимает никаких параметров (в нашем случае), в "Input Fields" ничего не добавляем. Зато выводимых полей (Output Fields) будет целых 5. Добавим параметры и дадим им соответствующие имена. После этого метод можно сохранять.

data templates

Далее идем в Data Templates и создаем шаблон для данных. Здесь нужно будет указать все параметры и их характеристики параметров, которые будут использоваться в этом шаблоне. Имя снова можно задавать любое, но желательно, чтобы оно совпадало с именем метода ввода данных.

В качестве Data Input Method выбираем метод, который мы только что создали. Остальные параметры можно оставить со значениями, заданными по умолчанию. Теперь добавляем информацию о каждом из полей данных. Прежде всего даем им разумные имена (Temp0, Temp1 и так далее). Минимальное и максимальное значение для температур я задал 0 и 90 C. Для кулеров максимальное значение можно задать в районе 4000-5000. Data Source Type - "Gauge". Шаблон для дынных готов.

graph templates

После этого можно создавать шаблоны для графиков. У нас их будет 2 – для температур и скоростей вращения кулеров соответственно. Тут все просто. Добавляем 2 области типа AREA (цвета по вкусу) для первого, и 3 таких же для второго шаблона.

графики

Вот и все. Можно считать, что вся работа сделана. Теперь осталось только нажать New Graphs и создать 2 графика на основе только что описанных шаблонов.



Андрей Жиденков, впервые опубликовано на opennet.ru


Сетевые решения. Статья была опубликована в номере 07 за 2007 год в рубрике sysadmin

©1999-2024 Сетевые решения