Переход к предыдущей публикации Полуночная “романтика” при свечах Lenovo Ideapad G530-4A | Мощная лошадка за разумные деньги Переход к следущей публикации

Мониторинг FreeBSD сервера: статистика по трафику, загрузка процессора, использование памяти, количество процессов, температура процессора, материнской платы и жестких дисков. Визуализация полученых данных в виде графиков на основе Round Robin Database (RRD).

Среда, 8 апреля, 2009 01:59:13 EEST

Исправления от 26 июня, 2009 01:12:12

Сбор статистики сервера с последующей визуализацией в виде графиков на основе Round Robin Database (RRD). Человек с самого начала своего появления на Земле имел жажду к рисованию. Первобытные люди рисовали мамонтов на стенах пещер, в которых они жили. Древние египтяне украшали свои гробницы росписями, на которых изображали свой быт и свою религию. Леонардо Да Винчи изобразил своей кистью Мону Лизу, да так изобразил, что над загадкой этой великой картины ученые до сих пор ломают головы. Великий Айвазовский рисовал море - страсть всей его жизни.

Чем же хуже системные администраторы? Ведь, как известно, сисадмины - тоже люди, а потому и они рисуют. Вернее было бы сказать, рисует за сисадминов софт, который они написали и сконфигурировали под свои нужды. И сегодня мы будем рисовать графики для отображения различной статистики

Нет! Мы их будем не “строить”, а именно рисовать. Ведь благодаря человеку по имени Тоби Отикер (Tobi Oetiker) мы имеем для этого потрясающий инструмент, под названием rrdtool или RRD.

RRD - это аббревиатура от Round Robin Database - (кольцевая база данных). Почему “кольцевая”? Потому что по прошествии определенного времени (в зависимости от размера базы) старые данные затираются, а на их место ложатся новые. Размер файлы базы всегда постоянный. База представляет собой бинарный файл, который можно прочитать с помощью инструментов из пакета rrdtools.

RRD был написан господином Отикером в качестве замены всем известному mrtg, который он сам и написал. Но RRD планировалось реализовать несколько иначе. В двух словах: основное отличие RRD от MRTG в том, что для хранения одного и того же объема данных RRD отнимет гораздо меньше дискового пространства, чем MRTG. Многие значения во времени повторяются. Это дает возможность использовать различные функции консолидации (объединения), что в свою очередь позволяет охватывать большие интервалы времени без чрезмерного увеличения объема базы, ну и конечно за счет снижения разрешающей способности.

RRD - это целый набор утилит, которые позволяют создавать RRD БД, наполнять ячейки баз числовыми значениями, изменять, при необходимости размеры и параметры баз, а также вынимать из них накопленные значения с целью наглядного представления этих значений в виде графиков.

Именно здесь “сухие цифры” превращаются в искусство - в живопись системного администратора. Возможно, кто-то, будучи человеком далеким от этой темы, не увидит в этом красоты… Что ж, ну возможно этому человеку станет понятен “Черный квадрат” Малевича. Но сисадмин и подобные ему увидят и рассмотрят красоту в этих причудливых переплетениях электрических импульсов, в которых отображена история. История того, как через сетевой интерфейс родного и близкого сердцу маршрутизатора когда-то пролетели миллионы и миллиарды бит или же что-то еще, что сисадмин пожелал нарисовать для себя напамять, сохранив и превратив это в историю.

Подготовка

От лирики перейдем к делу. Прежде всего, для более полного понимания данного материала я попрошу Вас прочитать документацию по RRD на русском языке, которую очень давно перевел с английского Сергей Богомолов. В процессе прихода к пониманию принципов работы с RRD я руководствовался большей частью именно ей, потому что изложил Сергей Евгеньевич все достаточно доходчиво и понятно. Кроме этого, в процессе написания этого материала я использовал в качестве источника английскую документацию по rrdtool на сайте автора.

Многие из Вас наверняка уже сталкивались с такими системами мониторинга как Cacti или Zabbix. Они также используют 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/ КАК НА ИСТОЧНИК!

Похожие публикации

Страницы: 1 2 3 4 5 6 7

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

1 ... 14 15 16

smbd 14 марта, 2010 03:39:00 EET .:. ID #26023 .:.

Спасибо за статью - после ознакомления наконец-то поборол лень и решил больше не откладывать знакомство с 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 счетчик снова с нуля считает) и провалов на графике не будет…

leks07 12 февраля, 2010 21:16:21 EET .:. ID #25015 .:.

Zerox: И вместо одного тире два, –

спасибо . пересмотрю коменты . внесу корректировку в скрипт

Zerox 12 февраля, 2010 20:46:28 EET .:. ID #25013 .:.

И вместо одного тире два, –

Zerox 12 февраля, 2010 20:45:21 EET .:. ID #25012 .:.

leks07: чтото не хочет создаваться база данных… видать в скрипте ошибка какаято . выдает следующее:# ./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как это можно лечить ?

Читай комменты на предыдущей странице. У меня то же самое было. Форматирование нарушено, некоторых символов в строках не хватает. В частности, в конце каждой строки должен стоять символ \

leks07 12 февраля, 2010 20:42:57 EET .:. ID #25011 .:.

чтото не хочет создаваться база данных… видать в скрипте ошибка какаято . выдает следующее:

# ./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

как это можно лечить ?

titanius 10 февраля, 2010 00:38:49 EET .:. ID #24918 .:.

… принцип буквально следующий

‘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,-’ \

titanius 10 февраля, 2010 00:35:56 EET .:. ID #24917 .:.

Zerox:
Что значит зачем? У тебя есть инструмент, который хранит данные и рисует графики. А ты волен его использовать как тебе заблагорассудится. По мне, так в этом вся прелесть. Ты волен сам решать что и как записывать в базу, а потом рисовать графики на основе этих данных.

Это всё верно, но не логично использовать snmpd только лишь для снятия загрузки проца да у локальной машины - бестолково. И данные который получается снимать при этом не достаточно точны (бывает).

Ведь можно снимать прерывания (sysctl kern.cp_time), данные которые на несколько порядков выше нежели используя snmpd. Да счётчики rrdtool очень кстати в этом варианте )

Zerox 9 февраля, 2010 23:48:42 EET .:. ID #24914 .:.

titanius: Увидев статью в первый раз светился от счастья, но потом перечитав кучу информации про rrdtool был раздосадован ею … мало того что нет осмысленого представления что зачем, так и для извлечения простых данных используются внешние программы … спрашивается зачем???

Что значит зачем? У тебя есть инструмент, который хранит данные и рисует графики. А ты волен его использовать как тебе заблагорассудится. По мне, так в этом вся прелесть. Ты волен сам решать что и как записывать в базу, а потом рисовать графики на основе этих данных.

titanius 9 февраля, 2010 22:30:44 EET .:. ID #24910 .:.

Увидев статью в первый раз светился от счастья, но потом перечитав кучу информации про rrdtool был раздосадован ею … мало того что нет осмысленого представления что зачем, так и для извлечения простых данных используются внешние программы … спрашивается зачем???

мои графики например такие:
-=-ссылка-=-
-=-ссылка-=-
-=-ссылка-=-

И это всё снимается без помощи сторонних программ, базы имеют нужные (подчеркнуть) размеры которые весят не больше 2 метров (с учётом того что снимается 6 разных периодов данных).

Хотел было поделиться своими наработками с автором, но через блог к нему не достучаться.

1 ... 14 15 16

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)