Содержание статьи
Плох тот админ, кто не контролирует состояние подопечных систем. Потраченное
на установку даже простейшей системы мониторинга время окупится с лихвой.
Лениться в этом вопросе не стоит, да и выбор готовых решений, распространяемых
под свободными лицензиями, сегодня достаточно велик. Системный монитор Symon
обладает хорошей функциональностью, весьма прост в настройках, а генерируемые им
графики наглядны и информативны.
Установка Symon
Системный монитор
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,
как и 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 ]
Настройки, выставленные в шаблоне, позволяют мониторить лишь четыре параметра
локальной системы и отправлять результат на 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.conf
monitor { 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
веб-сервера:
# cd syweb
# cp -rv htdocs/syweb /var/www
# cp -rv symon /var/www
Веб-сервер должен считывать с них данные, поэтому меняем владельца каталога
(в Free/OpenBSD апач работает от имени учетной записи 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 довольно простой и понятный в настройках инструмент, при
помощи которого можно снимать статистику основных системных параметров сразу с
нескольких серверов.
МИНИ СТАТЬЯ: установка symon/symux в Ubuntu/Debian
Направленность на *BSD-системы сказалась на том, что найти symon в
репозитариях дистрибутивов Linux непросто. Повезло, разве что,
гентушникам. Поэтому пользователям остальных дистрибутивов Linux придется
собирать эту систему мониторинга самостоятельно. Но благо, процесс стандартен, и
сюрпризов обычно не бывает. Cборка в Linux осуществляется при помощи Pmake,
который по умолчанию не устанавливается:
$ sudo apt-get install pmake
Далее скачиваем и распаковываем архив с symon-x.xx.tar.gz. Переходим в
созданный каталог и даем команды:
$ pmake
$ sudo pmake install
В отличие от BSD, установка исполняемых файлов производится в /usr/local/bin.
Если при компиляции будет выдано сообщение: "symux.c:46:17: error: rrd.h: No
such file or Directory", значит, в системе отсутствуют заголовочные файлы
RRDTool. Доустанавливаем пакет librrd2-dev и повторяем попытку. Или – собираем
Symux отдельно. Также в Linux обязательно заводим учетную запись "_symon":
$ sudo useradd -d /var/empty -L daemon -c 'symon account' -s
/sbin/nologin _symon
INFO
Названия процессов для proc смотрим при помощи ps, названия сетевых
интерфейсов вспоминаются по ifconfig, а диски поможет найти fdisk или dmesg.
Список сенсоров специфичен для каждого железа, получить его можно при помощи
команды "sysctl hw.sensors".
Подробнее о RRDTool читай в статье "Универсальный
наблюдатель".