Использование rrdtool для мониторинга сети: :Журнал СА 5. Рубрика. Администрирование /. Продукты и решения. Facebook. Мой мир. Вконтакте. Одноклассники. Google+ ВСЕВОЛОД СТАХОВИспользование rrdtool для мониторинга сети. Мониторинг сети и оборудования входит в одну из основных обязанностей администратора. Например, постоянное слежение способно выявить узкие места сети, показать рост ее загрузки, увидеть расход аппаратных ресурсов на серверах, вовремя обнаружит атаку и многое другое. Мониторинг можно делать самыми разнообразными способами, но, наверное, самым удобным является графическое представление данных, полученных от различных счетчиков. В данной статье речь пойдет об одной из наиболее грамотно организованных программ для выполнения таких действий, а именно о rrdtool (http: //www. Rrdtool была разработана в качестве альтернативы mrtg (написанной, кстати, тем же автором). Основной целью автора было ускорение работы и добавление расширенных возможностей по построению графиков, а также устойчивость к сбоям. Rrdtool является очень «чистой» в плане понимания логики работы, но за это пришлось поплатиться отсутствием внешнего файла конфигурации. Этот недостаток пытались исправить во многих fron- end к rrdtool (http: //www. Тем более что для сбора данных с различных счетчиков выполняются практически аналогичные действия. Итак, рассмотрим общую логику работы rrdtool. Вначале мы создаем так называемую round- robin database (кольцевая или закольцованная база), в которую можно записывать показания счетчиков. Почему round- robin – т. Было выбрано очень грамотное решение – записывать в одну ячейку данных несколько показателей, производя над ними некую статистическую функцию. В каждую round- robin базу данных можно записывать несколько рядов ячеек, принимающих показатели из одного источника, но по- иному комбинируя поступающие данные. Ну а график строится банальным извлечением данных из базы за определенный период. Как все это выглядит на практике? В первую очередь нужно решить, за какими данными мы будем следить. RRDtool позволяет создавать графики на основании данных из базы RRD таких как сетевой трафик, температура, загрузка процессора и так далее. В ОС Fedora пакет chkconfig установлен по умолчанию, в Ubuntu его. Команда «sudo apt-cache search rrdtool» в Debian/Ubuntu .Естественно, на первый план выходит контроль трафика маршрутизаторов, коммутаторов, нагрузка аппаратной части серверов (загрузка ЦП, использование жестких дисков, контроль работы сетевых интерфейсов, объем свободной памяти и прочее), нагрузка на сетевые сервисы, такие как http- , ftp- , proxy- сервера. И первый вопрос, который встает перед нами, – как собирать статистическую информацию. Наиболее общим решением является использование протокола snmp, но это не всегда является приемлемым для некоторых целей, например, статистики http- сервера. Тогда на помощь приходят различные утилиты анализа log- файлов, счетчики программных firewall. Если используется snmp, то для снятия статистики достаточно иметь программы, вроде snmpget и документацию по OID соответствующего оборудования (например, по оборудованию Cisco всегда можно найти список поддерживаемых OID для конкретного устройства). В противном случае приходится вручную задавать команду для анализа необходимых параметров. Главные критерии в выборе метода – скорость, доступность и надежность. Конечно, необходимо учесть, что ценность статистической информации в ее постоянном контроле, то есть если взглянуть на состояние системы в данный момент, то вряд ли можно понять, справляется ли она с нагрузкой, увидеть рост нагрузки и выявить момент, когда что- либо будет нуждаться в замене или усовершенствовании. Определившись с источником информации, можно приступить к написанию скрипта для rrdtool. Для начала некоторые сведения о структуре скриптов. Прежде всего создаются два или три скрипта, один из которых выполняется однократно, создавая round- robin базы данных при помощи rrdtool create. Далее необходимо периодически запускать скрипт обновления round- robin databases (далее rrdb), который снимает показания с различных сенсоров и передает их в rrdb при помощи rrdtool- update, кроме того, в этот скрипт можно включить генерацию графиков (rrdtool graph). В некоторых случаях можно вынести генерацию графиков в cgi- скрипт, тогда каждый раз при вызове cgi- скрипта будут генерироваться графики. Второй вариант подходит при использовании mod. При создании скрипта обновления rrdb необходимо учесть, что вызываться он будет весьма часто и при большом количестве собираемых данных может сильно «тормозить» систему. Для таких языков, как perl и python, написаны соответствующие библиотеки для доступа к rrdb, поэтому часто целесообразно использовать именно их. Однако в данной статье я буду ориентироваться все же на shell- скрипты, т. Rrdtool содержит также несколько сторонних библиотек, таких как libgd (для генерации графики), libpng (для генерации png- изображений), а также zlib (для компрессии изображений). Обязательно нужно указать в аргументах к configure - -enable- shared=yes для создания разделяемых библиотек rrdtool для дальнейшего их использования другими программами. Итак, для начала опишу применение утилит из пакета rrdtool. Для создания rrdb используется команда rrdtool create, имеющая следующий синтаксис: rrdtool create filename. Строки DS описывают источники данных, которые будут поступать в rrdb, параметры DS- line означают следующее: имя. Переполнение счетчика обрабатывается только для типа COUNTER. Счетчики могут хранить только целые 3. GAUGE: получаемое значение просто кладется в rrdb (например, для счетчика загрузки CPU или температуры, когда нужна не разность, а само значение); DERIVE: COUNTER, который может уменьшаться (защиты от переполнения нет); ABSOLUTE: получаемое значение делится на интервал времени между отсчетами, полезно для обнуляющихся при чтении источников данных. Вообще понятие архива в данном случае означает ряд значений, получаемых для DS и имеющего такие параметры, как число точек отсчета на ячейку ряда и число ячеек в ряду. Все данные, осуществляемые с rrdb происходят не через реальные значения счетчиков, а через RRA, что позволяет вести статистику различных временных периодов и сильно сокращает размер rrdb. Синтаксис RRA- line таков: функция. Создаются также 8 рядов, четыре из которых используют для консолидации данных функцию AVERAGE, а остальные – MAX. При этом создаются следующие промежутки: 6. В данном случае имитируется поведение mrtg, обрабатывающей такие же временные промежутки. Для внесения данных со счетчиков в rrdb используется команда rrdtool update, имеющая достаточно простой формат: rrdtool update имя. Хотя можно не заморачиваться этими проблемами и просто использовать значение «N». Значения DS указываются в том порядке, в котором они были определены в rrdtool create (допускается альтернативный порядок, но тогда имена DS должны быть перечислены указанием опции: - t ds- name: ds- name..). В качестве значения можно использовать символ «U», обозначающий неопределенное значение. За один вызов rrdtool update в rrdb может быть передано несколько отсчетов, для чего можно указать несколько строк: time: value. Скрипт, вызывающий rrdtool update, лучше всего запускать через интервал step, указанный при создании rrdb. Приведу пример скрипта, осуществляющего обновление счетчиков принятых и отправленных байт через маршрутизатор, на базе freebsd; также производится мониторинг загрузки процессора: -- #!/bin/shcpuload=`sysctl vm. Для этого используется команда rrdtool graph, на мой взгляд, наиболее сложная по синтаксису и самая тяжелая для понимания. Здесь я привожу достаточно краткое ее описание, за более подробной информацией советую обратиться к странице Сергея Богомолова . В rrdtool graph есть, собственно говоря, два способа задания переменных. Один – непосредственно из rrdb, а другой – на базе оценки некоторого выражения, составленного в обратной польской нотации. Рассмотрим оба этих способа. Для извлечения данных из rrdb используется следующая конструкция: DEF: имя. Идея записи такова: числа помещаются в стек, операторы извлекают нужное количество чисел из стека, проводят над ними необходимые операции и помещают результат в стек. Например, выражение: 2 3 +будет обработано следующим образом: поместить в стек число 2. Выражения в обратной польской нотации очень легко обрабатывать программно (для обычной записи необходимо строить бинарное дерево операндов). Теперь вернемся к rrdtool. Запись переменной таким способом выглядит следующим образом: CDEF: имя. Список операторов довольно широк: стандартные арифметические (+, - , *, /, %); тригонометрические (SIN, COS); алгебраические (LOG, EXP, FLOOR, CEIL); сравнения (GT, GE (> =), LT, LE (< =), EQ, работают так – берутся два числа из стека, сравниваются, в стек помещается 0 или 1, например: 1,2,LT поместит в стек 0 (аналогично 1> 2)); условный оператор IF (из стека берутся три значения, если последнее истинно (не ноль) – в стек помещается второе выражение, если ложно – то первое, например 1,2,LT,1,0,IF будет расцениваться так, если 1> 2, то поместить в стек 1, иначе поместить 0); статистические (MIN, MAX, берут из двух значений из стека минимальное и максимальное соответственно); ограничения (LIMIT, берет три значения из стека: var,low,high – если var не лежит между low и high, то в стек помещается UNKNOWN, иначе – var). Есть еще ряд операций для работы непосредственно со стеком, но применяются они довольно редко, потому рассматриваться здесь не будут. Теперь перейдем к этапу задания отрисовки графика. Для этого существует ряд параметров. Общий вид директив, задающих линии и области, на графике таков: Тип: имя. Приведу пример скрипта, который создает графики загрузки CPU и сетевого интерфейса: #/bin/sh. WWWPREFIX=/usr/local/www/htdocs/rrdtool. RRDPREFIX=/usr/local/var/rrdtool/usr/local/bin/rrdtool graph $WWWPREFIX/cpuusage. Перегрузка наступает при загруженности процессора на более чем 5. В графике загрузки сети происходит перерасчет байт, возвращаемых счетчиками ipfw в биты, в которых принято мерить нагрузку сети. В данном примере генерируются однодневные графики. Изменив переменную $PAST, можно добиться генерации графиков за нужный период времени. Collectd — Следим за системой с минимальными затратами. Настройка и использование нотификаций / Хабрахабр. Что это такое? Collectd — это небольшой демон, который каждые 1. Есть возможность сбора статистики для нескольких хостов и отсылка её на сервер, который занимается отрисовкой красивых графиков. Установка. Ставим его как обычно через любимый пакетный установщик emerge/yum/apt- get или чо- там- еще- существует. Во первых оно замаскировано ~x. Чтобы указать какие плагины ставить надо их указать либо в package. JFYI Почему необходимо обновиться: потому что вывод данных в rrd в этих версиях отличается, следовательно либо писать костыль для конвертации либо писать 2 скрипта для генерации графиков на фронт- енд морде. Да и изза изменения графиков придется учитывать версию клиента на хосте и под нее отдельно писать правила для нотификаций. В дебиане и центосе у меня поставились все плагины. Ну потому что из готового пакета ставится : )Настройка. Едем дальше. Формат конфига мне вообще не понравился, долго искать где что, поэтому для себя я его порезал на нужные мне части, благо что из конфига можно подключать другие конфиги, как говорится, inline : ). Опять же в генте весь конфиг в одном файле, который находится в /etc/collectd. В дебиане оно ставится в красивый путь /etc/collectd/collectd. Вообщем я у себя на генте сделал примерно такую же конфигурацию, немножко ее изменив. В частности подключение нужных мне плагинов вынес в отдельную директорию и каждый плагин (точнее его конфигурацию) так же в отдельный файл. Вот как он стал выглядеть: # Config file for collectd(1). Остальные файлы подключаются из директорий inst и conf. JFYI Так же обратите внимание на параметр FQDNLookup true — если у вас в hostname чтото прописано, то оно должно ресолвиться! В противном случае оно вылетит с ошибкой, другое решение — выставить этот параметр в false. В каталоге inst находятся файлы конфигурации плагинов: gen- collectd- master collectd # ls - la /etc/collectd/inst/. Nov 2. 6 2. 0: 5. JFYI можно написать свой обработчик нотификаций. Для этого нужно подлючить плагин exec и прописать скрипт, который будет запускаться при генерации нотификации. Делается это так: Load. Plugin exec. < Plugin exec>. Notification. Exec thunder . У себя я не буду это рассматривать пока, как правильно делать это решит каждый для себя сам : )Этот плагин служит для взаимодействия между серверами collectd. Чтобы настроить текущий сервер как сервер для сбора статистики, необходимо задать ему параметр Listen «1. Чтобы настроить клиента, надо вместо Listen указать Server «1. Единственные примеры настройки нотификации некоторых плагинов есть только в конфиге thresholds. Threshold это обычный плагин, поэтому он и загружается как плагин. Все параметры задаются внутри контейнера < Plugin «threshold»>. Внутри него может быть заданы контейнеры в следующей последовательности — . Блок Host необязателен, с помощью него можно привязать нотификации для определенного хоста. Также, все значения должны быть заданы только внутри блока Type, единственное значение, которое может быть задано вне блока Type это Instance. Итак, приступим непосредственно к конфигурации нотификаций. Плагин cpu< Type . Мы указываем, что нужно следить за значением user (пользовательские процессы) и если оно достигнет значения 8. Hits — количество попаданий в это значение за один Interval (см настройку основного конфига), в нашем случае равно 1, т. Тут можно поставить значение больше, например на 6, т. Плагин ping< Plugin . Эта таблица содержит значение либо 0 либо 1. Соответственно задаем генерацию типа Failure если значение превысит 0. Если задать 1, то не будет работать : )Плагин memory< Plugin . Если значение достигнет или станет меньше указанного значения, то будет сгенерирована нотификация. Теперь самое интересное, этого нет в документации и пример найти тяжело оказалось, поэтому пришлось экспериментировать. Делаем нотификации на место на диске Плагин df< Plugin . Так же ниже мы четко указываем, что не использовать процентные значения. Вопрос про это появился еще в 2. Вот, собственно, и все, основные плагины настроены, нотификации на них тоже. Пожелания, предложения, вопросы приветствуются. Отвечу по возможности.
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |