Оглавление
- Введение
- Подготовка
- Мониторинг сетевых служб сервера и отображение статистики по трафику с разделением по портам и протоколам
- Мониторинг и отображение статистики загрузки центрального процессора, использования памяти и количества запущенных процессов
- Мониторинг и отображение температуры центрального процессора, чипов и материнской платы
- Мониторинг и отображение температуры жестких дисков сервера
- Заключение
Наполнение базы данных RRD значениями, полученными с счетчиков ipfw
В принципе, для наполнения базы значениями все средства хороши. То есть, мы можем использовать что угодно - любое програмное обеспечение - главное, чтобы на выходе, это ПО выдавало цифры. Как я уже сказал, в третьем столбце вывода команды ipfw show мы имеем количество байт, которые прошли через данное правило. Нам потребуется отделить значение третьего столбца от всего остального, чтобы эти значения можно было внести в базу. Воспользуемся для этого стандартным *nix'овым парсером awk (/usr/bin/awk)
# ipfw show 11 | awk '{print $3}'
103918426
Мы получили число, которое теперь можно смело отправлять в созданную нами базу TOTAL-HTTP-DNS-PROXY.rrd Напишем скрипт, который будет делать это по всем обсчитываемым правилам сразу.
#!/bin/sh
#
# Created by Daemony | http://daemony.org/
#
RRDPREFIX=/usr/NET/rrd
inTOTAL=`/sbin/ipfw show 11 | awk '{print $3}'`
outTOTAL=`/sbin/ipfw show 12 | awk '{print $3}'`
inHTTP=`/sbin/ipfw show 13 | awk '{print $3}'`
outHTTP=`/sbin/ipfw show 14 | awk '{print $3}'`
inDNS=`/sbin/ipfw show 15 | awk '{print $3}'`
outDNS=`/sbin/ipfw show 16 | awk '{print $3}'`
inPROXY=`/sbin/ipfw show 17 | awk '{print $3}'`
outPROXY=`/sbin/ipfw show 18 | awk '{print $3}'`
`/usr/local/bin/rrdtool update $RRDPREFIX/TOTAL-HTTP-DNS-PROXY.rrd N:$inTOTAL:$outTOTAL:$inHTTP:$outHTTP:$inDNS:$outDNS:$inPROXY:$outPROXY`
Пояснения
Данный скрипт, будучи отправлен в /etc/crontab, в заданный интервал времени будет считывать значения с правил ipfw с 11 по 18, присваивать эти значения соответствующим переменным и последовательно отправлять их в базу TOTAL-HTTP-DNS-PROXY.rrd. Ничего сложного нет. И, пожалуй, это самый простой момент в изучении RRD.
Именуем скрипт UPDATE_TRAF.sh и ложим его в папку /usr/NET/scripts/ Уже на данном этапе можно запускать его в работу и собирать статистику. Пока мы дойдем до построения графиков, у нас уже соберутся какие-то значения и нам уже будет что показывать.
Подставляем скрипт в /etc/crontab и стартуем его с интервалом в одну минуту.
################### # COUNTERS ################### # # ---- RRDdb Updates ---- */1 * * * * root /usr/NET/scripts/UPDATE_TRAF.sh >/dev/null 2>&1
Совет! В тот момент, как только Вы сохраните измененный crontab, тут же обнулите правила ipfw. Сделать это можно перестартовав скрипт со всеми правилами. Если этого не сделать, то, поскольку на счетчиках ipfw уже накопились какие-то значения, эти значения первыми будут занесены в базу, а на графиках это отразится здоровенным, неактуальным и некрасивым скачком.
Данные начали накапливаться в базе. Можно приступить к самому интересному моменту.
Построение графиков использования сетевого подключения на основе накопленных значений в базе данных RRD
Графики можно строить, получая изображения в формате .PNG, либо в .GIF. Мне больше по душе первое. Построение графика сводится к извлечению значений DS из заданной БД, выполнения каких-либо математических операций над этими значениями и собственно самой отрисовки.
Как Вы помните, в нашей базе RRD мы накапливаем значения из восьми источников данных. В виду громоздкости скриптов (дабы не захламлять публикацию), я здесь приведу только один пример - скрипт построения графика использования канала по протоколу HTTP (источники данных - inHTTP и outHTTP) за последние шесть часов. Если Вы поймете принцип их построения, то без труда составите скрипты для остальных DS и для любого промежутка времени.
Вот пример скрипта:
Пояснения
Прежде всего фича, подсвеченная в коде желтым маркером. Этими двумя нехитрыми строчками в скрипте можно заставить RRD говорить на нашем родном великом и могучем. Учтите, что при этом кодировка Вашего редактора должна соответствовать указанной здесь. В моем случае это koi8-r!
- $RRDCMD graph $WWWPREFIX/HTTP_6h.png - команда rrdtool к созданию файла HTTP_6h.png в соответствующем каталоге нашего веб-сервера.
- --width и --height - задают ширину и высоту графика в пикселях. Учтите, что эти параметры задают ширину и высоту только самого графика, без полей с легендой, заголовком и т.д. В данном примере, с указанными значениями 760 и 200 на выходе получается изображение 849x304 px.
- --imgformat PNG - формат картинки. Укажите вместо PNG - GIF, если Вам так будет больше нравится.
- --start -6h - начало интервала отсчета периода, отображенного на графике. Начало (start) на графиках RRD слева, а конец (end) - справа. В данном случае, в совокупности с параметром --end now мы указываем построить график, конец отсчета которого прийдется на сейчас (специальное ключевое слово now), то есть на текущий момент времени, а начало графика будет лежать по шкале времени: "сейчас" минус шесть часов назад в прошлое. Задавая различные значения start и end (например, через cgi скрипт), можно выбирать из базы данных значения за нужные интервалы времени. Без приставки h (s - секунды, h -часы, d - дни и т.д.) программа воспринимает числа как секунды.
- --slope-mode - производит сглаживание графика.
- --font-render-mode - тип сглаживания шрифтов.
- Строки, начинающиеся с --font задают стили и размеры шрифтов и является необязательной частью тюнинга нашего будущего графика. DEFAULT - шрифт по умолчанию; TITLE - шрифт заголовка; AXIS - шрифт подписи по вертикали у шкалы; UNIT - шрифт, которым пишутся значения на шкалах; LEGEND - шрифт, для начертания легенды - информации под графиком; WATERMARK - шрифт водяного знака "RRTOOL / TOBI OETIKER" вертикально расположенного в правом верхнем углу. Собственно, последней опцией можно вообще избавиться от водяного знака, указав размер шрифта, например, 1. Но это будет невежливо по отношению к господину Тоби.
- Следующие строки, начинающиеся с --color задают цвет различных частей графика. Цвет указывается везде с помощью HTML кодов. BACK - цвет заднего фона изображения; CANVAS - фоновый цвет поля, на котором строится график; SHADEA - цвета верхней и левой границ графика; SHADEB - цвет нижней и правой границ графика; FONT - цвет шрифта; AXIS - цвет шрифта подписи по вертикали у шкалы; ARROW - цвет стрелочек; GRID - цвет мелкой сетки; MGRID - цвет крупной сетки. Оттюнингуйте свои графики как Вам заблагорассудится, прочитав более подробно о шрифтах и цветах в руководстве RRD.
- --vertical-label - что будет написано по вертикальной шкале.
- --title - что будет написано в заголовке графика.
Cледующая строчка:
DEF:inoctetsHTTP=$RRDPREFIX/TOTAL-HTTP-DNS-PROXY.rrd:inHTTP:AVERAGE
дает программе знать откуда извлекать какие данные. В этом примере определяется переменная inoctetsHTTP, которой присваивается значение ячейки имеющей DS с именем inHTTP и типом AVARAGE в базе TOTAL-HTTP-DNS-PROXY.rrd. Таким же образом определяется переменная outoctetsHTTP
Дальше мы производим перевод байт в биты.
"CDEF:inbitsHTTP=inoctetsHTTP,8,*"
Это обратная польская запись. (Подробнее о том, что это такое Вы можете узнать в руководстве RRD). Этой строкой мы получаем переменную inbitsHTTP значение которой равняется "inoctetsHTTP умноженное на восемь". Таким же самым образом мы получаем и значение переменной outbitsHTTP
Следущие строчки определяют тип графика и его цвета. Собственно, сам график строится вот этим:
AREA:outbitsHTTP#FF0000:"HTTP OUT "
AREA:inbitsHTTP#FFFF00:"HTTP IN "
Здесь AREA - это тип графика - заполняется все пространство выбранным цветом #FF0000. Чтобы отобразить график в виде линии, можно указать вместо AREA - LINEX, где X - это целое число от 1 до 3 (обычно), которое определяет толщину линии в пикселях. Какие еще можно построить типы графиков прочитайте, пожалуйста, в руководстве.
"HTTP OUT " - это то, что будет отображено в легенде. Можно писать что угодно и даже по русски. Единственное замечание: кодировка Вашего редактора должна совпадать с указанной кодировкой в начале скрипта.
outbitsHTTP - переменная, значения которой следует использовать для построения графика.
Учтите, что графики строятся в той последовательности, в которой они прописаны в скрипте. То есть в данном случае, сначала будет прорисован график outbitsHTTP, а только потом inbitsHTTP. Второй будет накладываться на первый. Потому, если большую часть времени outbitsHTTP у Вас больше чем inbitsHTTP не стоит беспокоиться, что какая-то из составляющих статистики полностью закроет другую. Если сомневаетесь, воспользуйтесь не AREA, а LINE1.
Строчки, начинающиеся с GPRINT предназначены для отображения служебной информации в легенде графика. Более подробно об этом необязательном параметре посмотрите в руководстве. Я же поясню на примере одной из строчек.
GPRINT:inbitsHTTP:LAST:"Последнее %6.2lf %sbps "
Такая запись выведет в легенде последнее полученное значение переменной inbitsHTTP. При этом будет сделана пометка со словом "Последнее" за которым последует само число. Число это, если оно имеет дробную часть, будет содержать максимум шесть знаков до запятой и будет округлено до двух знаков после запятой - это определено параметром %6.2lf. Кроме этого, после этого числа будет написано "bps" с соответствующей приставкой - K - Кило; M - Мега; G - Гига - это определено %s.
Другие элементы:
- COMMENT:n - вставит перенос строки. Кстати, COMMENT:" "n вставит уже перенос строки и одну пустую строку.
- c - выровняет по центру все содержимое, что было написано после последнего переноса и до нее. Аналогично сработают: r - выравнивание по правой стороне; l - выравнивание по левой стороне.
Все пробелы между двойными кавычками учитываются и это дает нам возможность в совокупности с моноширинным шрифтом (например, Courier New) выровнять всю таблицу результатов точно по центру.
Сохраните созданный скрипт и запустите его.
# ./CREATE_GRAPH_TRAF.sh 849x304 #
Кроме информации о размерах получившегося изображения после выполнения скрипта ничего появиться не должно. В один shell скрипт можно вставить несколько последовательных скриптов для генерации графиков. У меня в одном скрипте прописаны rrdtool create для всех нужных мне графиков.
| Предыдущая страница | Следующая страница |










Вторник, 15 ноября, 2011 в 15:05:24
а Munin ваще прелесть =)
Вторник, 15 ноября, 2011 в 15:04:31
Cacti давно уже упрощает труд
Воскресенье, 30 октября, 2011 в 10:02:33
«Количество килобайт на страницу можно посмотреть командой:
# sysctl hw.pagesize» — s/килобайт/байт/
Понедельник, 3 января, 2011 в 17:13:02
Очень подробная статья! Спасибо!
Побольше бы таких описаний в сети!
Пятница, 9 апреля, 2010 в 14:50:56
и ссылка не работает:
http://daemony.org/statistics