Статья для
Плох тот админ, который не контролирует состояние подопечных систем. Лениться в этом вопросе не стоит. Время на установку даже простейшей системы мониторинга в последствии окупится с лихвой. Задачу упрощает то, что сегодня выбор готовых решений, распространяемых под свободными лицензиями, достаточно велик. Системный монитор Symon обладает хорошей функциональностью, весьма прост в настройках, а генерируемые им графики наглядны и информативны.
Установка Symon
Системный монитор Symon (www.xs4all.nl/~wpd/symon) изначально был написан для работы с OpenBSD, но сейчас поддерживает еще FreeBSD, NetBSD и Linux. Распространяется под BSD подобной лицензией, разрешающей использовать как саму программу, так и исходный код, при условии сохранения информации об авторских правах. Программа потребляет минимум системных ресурсов и позволяет контролировать нагрузку CPU, состояние памяти, сетевых интерфейсов, разделов жесткого диска, данные PF и другие параметры. Традиционно для никсов Symon построен по клиент-серверной архитектуре. В нем используется несколько утилит, каждая из которых должным образом выполняет свой участок работы. Система сбора информации состоит из:
- сервер symon – собственно системный монитор, в его задачу входит сбор и пересылка данных. Для сбора некоторых системных параметров, не требующих привилегированного доступа (CPU, ОЗУ и других), может работать с правами обычного пользователя. По умолчанию после запуска переходит в chroot.
- клиент symux – получает потоки symon и сохраняет их в RRD файлы.
При этом один symux может получать и, соответственно, накапливать данные не только с локального, но и с нескольких удаленных серверов. Для анализа собранных данных и выдачи информации пользователю в удобном виде предусмотрено еще три приложения:
- syweb – набор PHP скриптов, использующих RRDtool для создания графиков на основе собранной информации;
- sylcd – клиент, предназначенный для вывода данных о сетевой нагрузке текущего узла на разнообразные LCD устройства (производства CrystalFontz и HD44780);
- SymuxClient.pm — «родной» модуль на Perl, в качестве примера использования к нему прилагается программа getsymonitem.pl.
Кроме этого, на просторах Сети можно найти еще ряд связанных проектов. Например, phpSymon (www.ryanflannery.net/works/phpsymon), как и syweb, собирает данные с указанного порта и выводит их в виде красивых графиков. Примеры конфигурационных файлов будут даны для FreeBSD, хотя все сказанное, за исключением процесса установки и особенностей обозначения устройств, актуально и для других систем. Установка при помощи системы портов стандартна:
# cd /usr/ports/sysutils/symon
# make install clean
Кроме собственно Symon, будет установлена большая группа зависимостей, включая RRDTool. Проверяем:
# pkg_info | grep symon
symon-2.79_1 Performance and information monitoring tool
Все на месте. Теперь можно приступать к настройкам.
Конфигурационные файлы Symon
Управление symon и symux осуществляется при помощи конфигурационных файлов symon.conf и symux.conf. Копируем их шаблоны в каталог /etc/:
# cp -v /usr/local/share/examples/symon/*.conf /etc/
И приступаем к разбору. Конфигурационный файл демона symon называется /etc/symon.conf. Правило мониторинга выглядит так:
monitor «{» resources «}» [every] «stream» [«from» host] [«to»] host [ port ]
Настройки, выставленные в шаблоне, позволяют мониторить лишь 4 параметра локальной системы и отправлять результат на 2100 порт локального узла (протокол UDP):
monitor {cpu(0), mem, if(lo0), io(wd0)} stream to 127.0.0.1 2100
Так контролируется загрузка процессора, ОЗУ, работа интерфейса обратной петли и жесткого диска. Это самый простой пример. Все возможные параметры приведены в справочной странице symon(8). Вот только некоторые из них:
- cpu/cpuiow – загрузка процессора в состояниях (idle, user, nice, system, interrupt), плюс iowait для cpuiow. Максимальное значение 100, подсчет ведется с шагом 2.
- df – статистика использования дискового пространства;
- if – счетчики сетевых интерфейсов (количество принятых/отправленных пакетов, байт, ошибки, отброшенные пакеты);
- io – производительность жесткого диска;
- mem – состояние памяти и свопа;
- pf/pfq – статистика пакетного фильтра PF (количество принятых и отброшенных пакетов, байт) и очереди ALTQ;
- sensor — информация с датчиков, показывающих температуру процессора, частоту вращения кулера и др. Тип сенсора указывается в скобках.
- proc – статистика процесса.
Кстати, сразу видны корни OpenBSD, ведь в списках нет iptables или IPFW, только PF. В ином случае придется отключать этот модуль, чтобы не возникла ошибка вроде: «fatal: pf module not available«. Аналогичное сообщение будет выведено, если неправильно назван сервис для proc или сетевой интерфейс. Названия процессов для proc смотрим при помощи ps, названия сетевых интерфейсов вспоминаются по ifconfig, диски поможет найти fdisk или dmesg. Список сенсоров также специфичен для каждого железа, получить его можно при помощи команды «sysctl hw.sensors». Чтобы упростить создание конфигурационного файла, разработчики предлагают скрипт c_config.sh. После его запуска получим заготовку, куда будут записаны настройки применительно к текущей системе (сетевые интерфейсы, io разделов диска, CPU и ОЗУ):
# /usr/local/share/symon/c_config.sh > /etc/symon.conf
Теперь остается лишь дополнить его своими параметрами. Для полноценного мониторинга «боевого» сервера, на котором работает прокси, апач, демон серых списков, MySQL и Clamd, пишем приблизительно такой конфиг:
# vi /etc/symon.confmonitor { cpu(0),
mem,
mbuf,
pf,
df(sd0a), df(sd0d), df(sd0e),
sensor(lm0.temp0), sensor(lm0.temp1), sensor(lm0.fan0),
proc(squid), proc(httpd), proc(spamd), proc(mysqld), proc(clamd),
if(fxp0), if(fxp1), if(fxp2), if(tun0),
io(wd0), io(wd1)
} stream to 127.0.0.1 2100
Если сбор данных будет производиться на другом сервере, то вместо localhost указываем IP-адрес (или DNS имя), на который следует отправлять собранные данные (stream to 192.168.10.10 2100). Не забудь открыть в пакетном фильтре этот адрес и порт. По умолчанию собранная информация отправляется каждые 5 секунд. Если необходимости в таком частом опросе нет, можно указать другое время вписав в правило параметр time с указанием секунд. Проверяем правильность конфига:
# /usr/local/libexec/symon -t
/etc/symon.conf: ok
Все в порядке, можно стартовать. При запуске без параметров symon переходит в режим демона, поэтому не сразу понятно, чем он там занимается. Чтобы протестировать его работу, лучше выполнить команду с ключами ‘-d‘ и ‘–u‘:
# /usr/local/libexec/symon -d -u
symon version 2.79 program id=9530 debug: symon packet size=362 sending packets to udp 127.0.0.1 2100 started module io(wd0)
И так далее. Если сообщений об ошибке не получено, можно запускать в рабочем режиме:
# /usr/local/libexec/symon
Так как все данные направляются в сетевой порт, работоспособность демона в этой ситуации можно отследить, анализом вывода «tcpdump –i lo0», прителнетившись к 2100 порту, наличием файла /var/run/symon.pid и процесса symon в выводе «ps au».
Осталось лишь добавить symon в автозагрузку:
# vi /etc/rc.local
if [ -x /usr/local/libexec/symon ]; then
echo ‘starting symon’; /usr/local/libexec/symon
fi
Данные отправлены, самое время их поймать.
Настраиваем Symux
Приступаем к настройке Symux. Конфигурационный файл symux.conf описывает источники, с которых будут приниматься данные, сами данные и каталог/файл, куда их сохранять. В одном файле могут содержаться ссылки на несколько источников:
# vi /etc/symux.conf
# На каком порту слушать входящие соединения symon
# mux 192.168.10.10 2100
mux 127.0.0.1 2100
# Определяем входящие данные для каждого источника
source 127.0.0.1 {
accept {
# Описываем, какую именно информацию принимаем (здесь просто перечисляем источники из symon.conf)
cpu(0),
mem,
mbuf,
pf,
df(sd0a), df(sd0d), df(sd0e),
sensor(lm0.temp0), sensor(lm0.temp1), sensor(lm0.fan0),
proc(squid), proc(httpd), proc(spamd), proc(mysqld), proc(clamd),
if(fxp0), if(fxp1), if(fxp2), if(tun0),
io(wd0), io(wd1)
}
# Каталог, в который будем сохранять данные
datadir «/var/www/symon/rrds/localhost»
# Опционально можно указать и названия файлов
# write sensor(lm0.fan1) in «/var/www/symon/rrds/localhost/sensor_lm0.fan0.rrd»
}
# Аналогично описываются все остальные сервера с запущенным symon
Как видишь, все просто. Конфигурационный файл составлен, проверяем:
# /usr/local/libexec/symux -t
warning: /etc/symux.conf:7: file ‘/var/www/symon/rrds/localhost/df_sd0e.rrd’, guessedannot be opened
warning: /etc/symux.conf: no filename specified for stream ‘df(sd0e)’
Кроме собственно конфига, эта команда проверит наличие всех указанных ресурсов, а также прав доступа к каталогу, в который будут сохраняться данные. Такого каталога пока нет, создаем его:
# mkdir -p /var/www/symon/rrds/localhost
Демон symux не может самостоятельно создавать RRD файлы. Для этого используется специальный скрипт c_smrrds.sh, входящий в поставку symon. Команда для запуска выглядит так:
c_smrrds.sh [oneday] [interval <seconds>] [all] <rrd files>
В данном случае поступаем просто:
# cd /usr/local/share/symon/ # ./c_smrrds.sh all
В итоге скрипт выдаст список созданных файлов. Проверяем снова:
# /usr/local/libexec/symux -t
/etc/symux.conf: ok
Можно работать, добавляем symux в автозагрузку:
# vi /etc/rc.local
if [ -x /usr/local/libexec/symux ]; then
echo ‘starting symux’; /usr/local/libexec/symux
fi
Так же как и symon, симуксу при запуске можно передать ряд параметров. Например, ключ ‘-l’ позволяет просмотреть список активных файлов, куда собираются данные в текущей конфигурации. Чтобы увидеть отладочную информацию, первый запуск произведем с ключом ‘-d‘.
# /usr/local/libexec/symux -d
debug: rrdupdate — /var/www/symon/rrds/localhost/df_sd0e.rrd 1233494631:15630616:8801288:8801288:0:0:0:0
Данные пришли. Теперь на них нужно как-то посмотреть.
Анализируем данные
Как уже говорилось, для анализа собранной информации проект предлагает несколько скриптов. Один из них (модуль SymuxClient.pm и скрипт getsymonitem.pl) после установки можно найти в /usr/local/share/symon/client. Скрипт довольно прост в работе, в общем случае вызов выглядит так:
./getsymonitem.pl <symux host> <symux port> <measured host> <stream> <item>
# cd /usr/local/share/symon/client # ./getsymonitem.pl 127.0.0.1 2100 127.0.0.1 ‘cpu(0)’ user 12.80
В качестве последнего параметра используем информацию из «man 8 symux». Применительно к CPU это: user, nice, system, interrupt, idle. Более наглядно представляют информацию скрипты, написанные на PHP, — syweb или phpSymon. Для их работы нам понадобится связка Apache + PHP. Скачиваем и распаковываем архив syweb:
# wget -c http://www.xs4all.nl/~wpd/symon/philes/syweb-0.58.tar.gz
# tar zxf syweb-0.58.tar.gz
Копируем находящиеся внутри каталоги htdocs и symon в DocumentRoot веб-сервера. У меня это /var/www: # cd syweb
# cp -rv htdocs/syweb /var/www
# cp -rv symon /var/www
Веб-сервер должен считывать с них данные, поэтому меняем владельца каталога (в FreeBSD апач работает от имени учетной записи www):
# chown -R www:www /var/www/syweb/
# chown -R www:www /var/www/symon/
В файле syweb/setup.inc необходимо изменить несколько переменных под наши реалии. В нем есть несколько заготовок для различных систем Free/OpenBSD и ситуаций (chroot или нет):
# vi /var/www/syweb/setup.inc
$symon[‘rrdtool_path’]=’/usr/local/bin/rrdtool’;
$symon[‘cache_dir’]=’/var/www/symon/cache’;
$symon[‘host_tree’]=’/var/www/symon/rrds’;
$symon[‘layout_dir’]=’/var/www/symon’;
Все указанные каталоги у нас уже созданы, остался каталог для кэша:
# mkdir /var/www/symon/cache
# chown www:www /var/www/symon/cache
Если вебсервер запускается в chroot, дополнительно следует запустить скрипт, находящийся в архиве install_rrdtool.sh, который перенесет библиотеки rrd в chroot окружение. Все готово, заходим на страницу http://localhost/syweb и смотрим красивые графики.
Используя меню, можно изменить временной промежуток и их размер, в отдельный пункт вынесена статистика PF.
Если есть необходимость защитить эту информацию от посторонних лиц, можно использовать .htaccess:
# vi /var/www/syweb/.htaccess
AuthName «Syweb zone»
AuthType Basic
AuthUserFile /usr/local/etc/apache/httpd_access
require valid-user
Пароль создаем при помощи утилиты htpasswd, входящей в состав Apache:
# htpasswd -c /usr/local/etc/apache/httpd_access admin
Как видишь, Symon довольно простой и понятный в настройках инструмент, при помощи которого можно снимать статистику основных параметров сразу с нескольких серверов.
//
з форматуванням конфігів — повна і абсолютна лажа…
//
Спасибо. Глюк какой то, нужно наверное тему менять.