Cacti для нестандартных объектов

Автор статьи: Андрей Бородийчук

>

 

Cacti для нестандартных объектов

[система Cacti - мониторинг нестандартных объектов]
материал подготовил: Андрей Бородийчук
25.05.2006
 

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

Рассмотрим реальную задачу. Есть большая сеть, разбитая маршрутизаторами* на более мелкие подсети. Необходимо отслеживать, сколько пользователей обслуживается каждым маршрутизатором и сколько из них блокированы за неуплату. В нашем распоряжении база данных биллинга, в которой есть таблица, где каждой машине поставлен в соответствие IP-адрес маршрутизатора.

Для начала создается скрипт*, который сможет вывести в консоль требуемые величины в формате name1:value1 name2:value2 (количество переменных может быть любым) в зависимости от переданного ему параметра.

 

<?php  
  #  Подключение  к  базе  данных  
        $db  =  mysql_connect  ('host',  'login',  'pass');  
        mysql_select_db  ('database',  $db);  
  #  Аргумент,  переданный  скрипту  
        $router  =  $_SERVER['argv'][1];  
  #  Запрос-выборка  общего  количества  клиентов  
        $clients  =  mysql_query('select  count(*)  from  clients  where  router="'.$router.'"');  
  #  Запрос-выборка  количества  блокированных  клиентов  
        $blocked  =  mysql_query('select  count(*)  from  clients  where  router="'.$router.'"  
        and  blocked=1');  
  #  Обработка  результатов  
        $clients  =  mysql_fetch_row($clients);  
        $blocked  =  mysql_fetch_row($blocked);  
  #  Вывод  результата  
        printf('clients:%d  blocked:%d',  $clients,  $blocked);  
?>

Этот скрипт логичнее всего будет поместить в папку scripts директории, в которую установлена Cacti. Далее он тестируется вручную. При вызове из командной строки он должен возвратить требуемый результат (не забудьте передать ему обязательный аргумент - IP-адрес маршрутизатора):

user@server  $  /usr/bin/php  -q  /home/www/cacti/scripts/routers.php  10.1.0.22  
clients:315  blocked:29  
<samp>user@server  $

Скрипт сбора статистики

Когда скрипт сбора данных готов, следует привязать его к Cacti. Для этого переходим к методам сбора данных (Data Input Methods). Щелкая по ссылке Add, создаем новый метод. Заполняем поля:

  • Name - это описание, которое будет вам понятно. В нашем случае логично будет написать Router: Clients, Blocked.
  • Input Type - способ получения данных. Выбираем Script/Command.
  • Input String - командная строка. Сюда следует ввести команду, которой мы тестировали скрипт, заменив обязательный параметр на имя переменной в угловых скобках: /usr/bin/php -q /home/www/cacti/scripts/routers.php <router>.

Далее нажимаем кнопку Create и замечаем, что к форме добавились две таблицы: Input Fields и Output Fields. Первая - это параметры, передаваемые скрипту. Вторая - переменные, возвращаемые скриптом. Нажимаем Add в таблице Input Fields и заполняем форму:

  • Field [Input] - выпадающий список, в котором перечислен
    ы все переменные, передаваемые скрипту. Они берутся из строки, которую мы ввели как команду в предыдущей форме. В нашем случае там только один пункт - router. Его и следует выбрать.
  • Friendly Name - описание данного параметра. пишем Router IP.

Остальные поля для нас не важны, за исключением разве что галочки Allow Empty Input - разрешить запуск скрипта без данного параметра (но тогда нужно было в самом скрипте предусмотреть обработку подобной ситуации!). Снова нажимаем Create и возвращаемся в свойства этого метода ввода данных. Переходим к таблице Output Fields, нажимаем там Add и заполняем ее форму:

  • Name - имя возвращаемого значения. Указываем clients (должно совпадать с возвращаемым скриптом параметром, однако если он один, то допускается любое).
  • Friendly Name - его описание. В нашем случае - Clients count.
  • Галочка Update RRD File символизирует о том, что этот параметр следует отслеживать, а не игнорировать (возможен случай, когда часть параметров, возвращаемых скриптом, неинтересна в плане мониторинга).

Сохраняем и повторяем то же для переменной blocked с описанием Blocked clients count. На этом редактирование метода ввода данных окончено, остается только нажать кнопку Save.

Метод сбора данных
Создание метода сбора данных

Далее переходим к шаблонам хранения данных (Data Templates) - создаем новый, заполняем поля. В таблице Data Templates:

  • Name - имя, которое будет отображаться. К примеру - Router stats.

Далее таблица Data Source - это хранилища данных. Обратите внимание - здесь появляются напротив каждого поля галочки Use Per-Data Source Value. Если мы ее установим, то используемое значение можно будет впоследствии изменить уже непосредственно при создании того или иного объекта на основе этого шаблона.

  • Name - так будут называться хранилища статистики. пишем Router stats: Clients, Blocked.
  • Data Input Method - из выпадающего списка выбираем созданный нами ранее метод ввода данных: Router: Clients, Blocked.

оставшиеся поля таблицы Data Source оставляем как есть. Табличка Data Source Item содержит описание отслеживаемой переменной - одной или нескольких.

  • Internal Data Source Name - внутреннее название отслеживаемой переменной. Указываем blocked.

Нажимаем Create и видим результат: в эту табличку добавилась строка Output Field и появилась таблица Custom Data.

  • В выпадающем списке поля Output Field можно увидеть переменные и их описания, которые мы задавали в методе ввода данных. Поскольку внутреннее название переменной мы дали blocked - выбираем из списка соответствующую величину blocked - Blocked clients count.
  • Поля Minimum Value и Maximum Value позволяют задать пределы изменения отслеживаемой величины - если она выйдет за эти рамки, то на графике будет пробел.
  • В Data Source Type выбираем GAUGE - это значит, что величина будет записываться "как есть". Если бы мы выбрали COUNTER - записывалась бы разница между прошлым и текущим ее состоянием.
  • Heartbeat оставляем как есть - это своеобразная внутренняя перестраховка Cacti от зависания.

Далее в этой же таблице нажимаем New - и появляется второе внутреннее хранилище. Заполняем аналогично первому, только имя даем ему clients и, соответственно, Output Field выбираем clients - Clients count. Кроме того, Cacti по умолчанию проставляет максимальное значение параметра в 100, поэтому будьте внимательны и лучше установите его в ноль, чтобы не было потом недоразумений. Далее заполняем таблицу Custom Data - она содержит пользовательские данные, передаваемые скрипту (если таковые требуются, и в нашем случае они требуются). Поскольку у нас в методе сбора данных только один параметр передается скрипту, то в этой таблице только одно поле, названное, как и наш комментарий к данному параметру: Router IP. Вот здесь однозначно следует установить галочку Use Per-Data Source Value - чтобы мы могли задать этот параметр отдельно для каждого хранилища (то есть чтобы собирать информацию одновременно с нескольких маршрутизаторов), и в качестве значения по умолчанию можно ввести, к примеру, 10.1.0. (допустим, что все

Алексей Волков

0 Комментариев

Нет комментариев!

Пока нет комментариев, но вы можете стать первым, кто прокомментировал данный пост

Оставить комментарий

Только зарегистрированные пользователи могут оставлять комментарии.