Мониторинг FreeBSD сервера: статистика по трафику, загрузка процессора, использование памяти, количество процессов, температура процессора, материнской платы и жестких дисков. Визуализация полученых данных в виде графиков на основе Round Robin Database (RRD).
Человек с самого начала своего появления на Земле имел жажду к рисованию. Первобытные люди рисовали мамонтов на стенах пещер, в которых они жили. Древние египтяне украшали свои гробницы росписями, на которых изображали свой быт и свою религию. Леонардо Да Винчи изобразил своей кистью Мону Лизу, да так изобразил, что над загадкой этой великой картины ученые до сих пор ломают головы. Великий Айвазовский рисовал море - страсть всей его жизни.
Чем же хуже системные администраторы? Ведь, как известно, сисадмины - тоже люди, а потому и они рисуют. Вернее было бы сказать, рисует за сисадминов софт, который они написали и сконфигурировали под свои нужды. И сегодня мы будем рисовать графики для отображения различной статистики
Нет! Мы их будем не “строить”, а именно рисовать. Ведь благодаря человеку по имени Тоби Отикер (Tobi Oetiker) мы имеем для этого потрясающий инструмент, под названием rrdtool или RRD.
RRD - это аббревиатура от Round Robin Database - (кольцевая база данных). Почему “кольцевая”? Потому что по прошествии определенного времени (в зависимости от размера базы) старые данные затираются, а на их место ложатся новые. Размер файлы базы всегда постоянный. База представляет собой бинарный файл, который можно прочитать с помощью инструментов из пакета rrdtools.
RRD был написан господином Отикером в качестве замены всем известному , который он сам и написал. Но RRD планировалось реализовать несколько иначе. В двух словах: основное отличие RRD от MRTG в том, что для хранения одного и того же объема данных RRD отнимет гораздо меньше дискового пространства, чем MRTG. Многие значения во времени повторяются. Это дает возможность использовать различные функции консолидации (объединения), что в свою очередь позволяет охватывать большие интервалы времени без чрезмерного увеличения объема базы, ну и конечно за счет снижения разрешающей способности.
RRD - это целый набор утилит, которые позволяют создавать RRD БД, наполнять ячейки баз числовыми значениями, изменять, при необходимости размеры и параметры баз, а также вынимать из них накопленные значения с целью наглядного представления этих значений в виде графиков.
Именно здесь “сухие цифры” превращаются в искусство - в живопись системного администратора. Возможно, кто-то, будучи человеком далеким от этой темы, не увидит в этом красоты… Что ж, ну возможно этому человеку станет понятен “Черный квадрат” Малевича. Но сисадмин и подобные ему увидят и рассмотрят красоту в этих причудливых переплетениях электрических импульсов, в которых отображена история. История того, как через сетевой интерфейс родного и близкого сердцу маршрутизатора когда-то пролетели миллионы и миллиарды бит или же что-то еще, что сисадмин пожелал нарисовать для себя напамять, сохранив и превратив это в историю.
Оглавление
- Введение
- Подготовка
- Мониторинг сетевых служб сервера и отображение статистики по трафику с разделением по портам и протоколам
- Мониторинг и отображение статистики загрузки центрального процессора, использования памяти и количества запущенных процессов
- Мониторинг и отображение температуры центрального процессора, чипов и материнской платы
- Мониторинг и отображение температуры жестких дисков сервера
- Заключение
Подготовка
От лирики перейдем к делу. Прежде всего, для более полного понимания данного материала я попрошу Вас прочитать документацию по RRD на русском языке, которую очень давно перевел с английского . В процессе прихода к пониманию принципов работы с RRD я руководствовался большей частью именно ей, потому что изложил Сергей Евгеньевич все достаточно доходчиво и понятно. Кроме этого, в процессе написания этого материала я использовал в качестве источника английскую документацию по rrdtool на .
Многие из Вас наверняка уже сталкивались с такими системами мониторинга как или . Они также используют RRDTOOL и предоставляют готовые шаблоны для мониторинга самых разнообразных параметров системы. Но, без понимания того, как эти системы работают и без понимания самого RRD, пользоваться ими нет смысла. Пожалуйста, не пишите в комментариях высказывания вида “Зачем было это писать, когда есть cacti“. Такие комментарии будут удаляться. Я пишу это для тех, кто так же как и я желает разобраться в работе с RRD.
Здесь я не стану переводить на русский язык мануал по RRDTOOL и по сопутствующим ему командам, а всего лишь приведу готовые и рабочие примеры использования RRD для сбора и визуализации статистики различных параметров FreeBSD сервера, естественно, с пояснениями к ним.
Набор возможностей RRD достаточно широк и многообразен. Честно говоря, я сам не до конца со всеми ознакомился, но, тем не менее, извлек то, что мне было необходимо в первую очередь. Остальное, я уверен, прийдет со временем, если будет нужно. Что вышло Вы можете посмотреть на этой странице.
Важно запомнить, что база данных rrdtool - это всего лишь совокупность ячеек, в которые записываются числа в порядке хронологии. Следовательно, для того, чтобы собирать какую-либо статистику, нам в первую очередь нужно получить цифры. Эти цифры могут быть получены самыми разными способами и, как подтверждение этому, в статье я буду использовать различные источники получения данных, начиная с файерволла ipfw и заканчивая программами из портов.
В статье пойдет речь о том, как получить в виде .PNG (или .GIF) графиков статистику использования сетевого интерфейса, с отображением текущей загрузки канала по определенным портам и протоколам, статистику использования ресурсов центрального процессора, статистику использования памяти сервера, а также количества запущенных процессов в системе. Кроме этого покажу как можно оперативно отслеживать температуру различных аппаратных узлов сервера. На самом деле, это далеко не полный перечень возможностей. Главное понять основной принцип, а дальше фантазии не будет предела.
* * *
Установка rrdtool под FreeBSD не должна вызвать трудностей, поэтому детально этот момент я не описываю. Установить пакет можно из коллекции портов. Обратите внимание, в портах несколько версий RRD:
# cd /usr/ports/ # make search name="rrdtool" ... Port: rrdtool-1.3.3 Path: /usr/ports/databases/rrdtool Info: Round Robin Database Tools Maint: bg1tpt@gmail.com B-deps: bitstream-vera-1.10_4 cairo-1.6.4_3,1 encodings-1.0.2,1 expat-2.0.1 font-bh-ttf-1.0.0 font-misc-ethiopic-1.0.0 font-misc-meltho-1.0.0_1 font-util-1.0.1 fontconfig-2.5.0,1 freetype2-2.3.7 gamin-0.1.9_2 gettext-0.17_1 gio-fam-backend-2.16.5 glib-2.16.5 gmake-3.81_3 kbproto-1.0.3 libX11-1.1.3_1,1 libXau-1.0.3_2 libXdmcp-1.0.2_1 libXft-2.1.13 libXrender-0.9.4_1 libfontenc-1.0.4 libiconv-1.11_1 libpthread-stubs-0.1 libtool-1.5.26 libxcb-1.1.90.1 libxml2-2.6.32_1 mkfontdir-1.0.3_1 mkfontscale-1.0.3 pango-1.20.5 pcre-7.8 perl-5.8.8_1 pixman-0.10.0_2 pkg-config-0.23_1 png-1.2.32 python25-2.5.2_3 renderproto-0.9.3 xcb-proto-1.2 xcb-util-0.2.1 xorg-fonts-truetype-7.3 xproto-7.0.10_1 R-deps: bitstream-vera-1.10_4 cairo-1.6.4_3,1 encodings-1.0.2,1 expat-2.0.1 font-bh-ttf-1.0.0 font-misc-ethiopic-1.0.0 font-misc-meltho-1.0.0_1 font-util-1.0.1 fontconfig-2.5.0,1 freetype2-2.3.7 gamin-0.1.9_2 gettext-0.17_1 gio-fam-backend-2.16.5 glib-2.16.5 kbproto-1.0.3 libX11-1.1.3_1,1 libXau-1.0.3_2 libXdmcp-1.0.2_1 libXft-2.1.13 libXrender-0.9.4_1 libfontenc-1.0.4 libiconv-1.11_1 libpthread-stubs-0.1 libxcb-1.1.90.1 libxml2-2.6.32_1 mkfontdir-1.0.3_1 mkfontscale-1.0.3 pango-1.20.5 pcre-7.8 perl-5.8.8_1 pixman-0.10.0_2 pkg-config-0.23_1 png-1.2.32 python25-2.5.2_3 renderproto-0.9.3 xcb-proto-1.2 xcb-util-0.2.1 xorg-fonts-truetype-7.3 xproto-7.0.10_1 WWW: http://www.rrdtool.org/ Port: rrdtool-1.0.50_1 Path: /usr/ports/databases/rrdtool10 Info: Round Robin Database Tools Maint: lth@FreeBSD.org B-deps: libtool-1.5.26 perl-5.8.8_1 R-deps: perl-5.8.8_1 WWW: http://www.rrdtool.org/ Port: rrdtool-1.2.28 Path: /usr/ports/databases/rrdtool12 Info: Round Robin Database Tools v1.2 Maint: koitsu@FreeBSD.org B-deps: freetype2-2.3.7 gettext-0.17_1 gmake-3.81_3 libart_lgpl-2.3.20,1 libiconv-1.11_1 libtool-1.5.26 perl-5.8.8_1 pkg-config-0.23_1 png-1.2.32 R-deps: freetype2-2.3.7 libart_lgpl-2.3.20,1 perl-5.8.8_1 pkg-config-0.23_1 png-1.2.32 WWW: http://www.rrdtool.org/ ...
Ставим порт: /usr/ports/databases/rrdtool
# cd /usr/ports/databases/rrdtool # make install clean
Обратите внимание, будет также установлено достаточно много зависимостей. В частности это различные шрифты и библиотеки X. Когда установка будет завершена, у Вас в каталоге /usr/local/bin появятся такие файлы:
# ls -la /usr/local/bin/rrd* -r-xr-xr-x 1 root wheel 22812 24 мар 14:00 /usr/local/bin/rrdcgi -r-xr-xr-x 1 root wheel 22732 24 мар 14:00 /usr/local/bin/rrdtool -r-xr-xr-x 1 root wheel 61352 24 мар 14:00 /usr/local/bin/rrdupdate
Будем считать что rrdtool Вы установили.
Для работы всей системы мониторинга я выделил специальный каталог под эти цели - только лишь для своего удобства. В нем создаю подкаталоги, где будут храниться шелл скрипты, RRD архивы, а также каталог, который будет доступен для чтения веб-серверу и в который будут складываться готовые графические изображения в формате .PNG.
# mkdir /usr/NET # chmod 710 /usr/NET ; chown root:www /usr/NET # mkdir /usr/NET/rrd ; chmod 700 /usr/NET/rrd # mkdir /usr/NET/scripts ; chmod 700 /usr/NET/scripts # mkdir /usr/NET/www_pub ; chmod 750 /usr/NET/www_pub ; chown root:www /usr/NET/www_pub
В конфигурацию вашего веб-сервера можно теперь добавить что-то вроде такого:
Alias /trafshow_public/ "/usr/NET/www_pub/"
<Directory "/usr/NET/www_pub">
Options None
AllowOverride Limit
Order deny,allow
Allow from all
</Directory>
Можно в папку /usr/NET/www_pub положить еще .htaccess файл, с запретом просмотра файлов в директории.
Options -Indexes
Готово. Приступаем к основному.
| Следующая страница |
ПРИ ЧАСТИЧНОМ, ЛИБО ПОЛНОМ КОПИРОВАНИИ МАТЕРИАЛОВ ЭТОГО САЙТА, ПОЖАЛУЙСТА, НЕ ЗАБЫВАЙТЕ УКАЗЫВАТЬ ССЫЛКУ http://live.daemony.org/ КАК НА ИСТОЧНИК!
Похожие публикации
Теги: charts, count, cpu, FreeBSD, hdd, ipfw, proxy, ram, rrd, rrdtool, визуализация, мониторинг, построение графиков, пример скрипта, прокси, статистика, статистика по трафику, температура, трафик


Спасибо за статью - после ознакомления наконец-то поборол лень и решил больше не откладывать знакомство с rrdtool. В целом, по написанному все понятно, за исключением некоторых моментов, но мне кажется в статье нет той полноты и ясности, которой стоило бы ее наделить. После прочтения пришлось перелопатить не один англ. мануал и посты с зарубежных форумов, чтобы понять суть rrd.
Долго догонял в терминах и используемых понятиях (стоило бы здесь упомянуть о них подробнее, в частности про PDP и CDP и что именно хранится в rrd), не понял зачем создавать
RRA:AVERAGE:0.5:1:6000
RRA:MAX:0.5:1:6000
RRA:MIN:0.5:1:6000
когда можно было обойтись всего одним RRA, ведь любая из этих функций от одного единственного значения вернет это самое значение. Получается, что одно и то же храним три раза? Да и эти интервалы в 775, 797 дней, наследие mrtg, а в статье так и вообще умноженные на 10… Имхо, бездумно это как-то. Или вы соревнуетесь с госархивом и через ~20 лет будет чем с ним помериться?
Кстати, инфу по общему трафику можно брать по snmp из .1.3.6.1.2.1.2.2.1.10.X и .1.3.6.1.2.1.2.2.1.16.X (X - номер интерфейса). Тогда и сброс счетчиков ipfw не страшен и не останутся обделенные те, кто не использует ipfw. К тому же, rrdtool умеет обрабатывать сбросы на ноль после максимального значения счетчика (эти значения snmp 32-битные, после значения 2^32 счетчик снова с нуля считает) и провалов на графике не будет…
спасибо . пересмотрю коменты . внесу корректировку в скрипт
И вместо одного тире два, –
Читай комменты на предыдущей странице. У меня то же самое было. Форматирование нарушено, некоторых символов в строках не хватает. В частности, в конце каждой строки должен стоять символ \
чтото не хочет создаваться база данных… видать в скрипте ошибка какаято . выдает следующее:
# ./create-traff-rrddb.sh
ERROR: you must define at least one Round Robin Archive
-step: not found
DS:inTOTAL:COUNTER:120:U:U: not found
DS:outTOTAL:COUNTER:120:U:U: not found
DS:inHTTP:COUNTER:120:U:U: not found
DS:outHTTP:COUNTER:120:U:U: not found
DS:inDNS:COUNTER:120:U:U: not found
DS:outDNS:COUNTER:120:U:U: not found
DS:inPROXY:COUNTER:120:U:U: not found
DS:outPROXY:COUNTER:120:U:U: not found
RRA:AVERAGE:0.5:1:6000: not found
RRA:AVERAGE:0.5:5:6000: not found
RRA:AVERAGE:0.5:30:7000: not found
RRA:AVERAGE:0.5:120:7750: not found
RRA:AVERAGE:0.5:1440:7970: not found
RRA:MAX:0.5:1:6000: not found
RRA:MAX:0.5:5:6000: not found
RRA:MAX:0.5:30:7000: not found
RRA:MAX:0.5:120:7750: not found
RRA:MAX:0.5:1440:7970: not found
RRA:MIN:0.5:1:6000: not found
RRA:MIN:0.5:5:6000: not found
RRA:MIN:0.5:30:7000: not found
RRA:MIN:0.5:120:7750: not found
RRA:MIN:0.5:1440:7970: not found
как это можно лечить ?
… принцип буквально следующий
‘CDEF:CPUall=CPUus,CPUni,+,CPUsy,+,CPUin,+,CPUid,+’ \
‘CDEF:pCPUus=CPUus,CPUall,/,100,*’ \
‘CDEF:pCPUni=CPUni,CPUall,/,100,*’ \
‘CDEF:pCPUsy=CPUsy,CPUall,/,100,*’ \
‘CDEF:pCPUin=CPUin,CPUall,/,100,*’ \
‘CDEF:pCPUid=CPUid,CPUall,/,100,*’ \
‘CDEF:pCPUsum=100,pCPUid,-’ \
Это всё верно, но не логично использовать snmpd только лишь для снятия загрузки проца да у локальной машины - бестолково. И данные который получается снимать при этом не достаточно точны (бывает).
Ведь можно снимать прерывания (sysctl kern.cp_time), данные которые на несколько порядков выше нежели используя snmpd. Да счётчики rrdtool очень кстати в этом варианте )
Что значит зачем? У тебя есть инструмент, который хранит данные и рисует графики. А ты волен его использовать как тебе заблагорассудится. По мне, так в этом вся прелесть. Ты волен сам решать что и как записывать в базу, а потом рисовать графики на основе этих данных.
Увидев статью в первый раз светился от счастья, но потом перечитав кучу информации про rrdtool был раздосадован ею … мало того что нет осмысленого представления что зачем, так и для извлечения простых данных используются внешние программы … спрашивается зачем???
мои графики например такие:
И это всё снимается без помощи сторонних программ, базы имеют нужные (подчеркнуть) размеры которые весят не больше 2 метров (с учётом того что снимается 6 разных периодов данных).
Хотел было поделиться своими наработками с автором, но через блог к нему не достучаться.