Уважаемые оптимизаторы. Чтобы получить ссылку на свой сайт из комментариев, нужно вначале написать 50 комментариев по делу без ссылки. Бессмысленные комментарии удаляются.
Уважаемые пользователи. Рекомендуем Вам зарегистрироваться. Скоро будет много сервисов для зарегистрированных пользователей.
[система 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-адрес маршрутизатора):
Когда скрипт сбора данных готов, следует привязать его к 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. (допустим, что все
Recent Comments