Symon: удобная система мониторинга
Sergey Jaremchuk feat. Andrey Matveev
Плох тот админ, который не контролирует состояние подопечных систем. Лениться в этом вопросе не стоит. Время на установку даже простейшей системы мониторинга в последствии окупится с лихвой. Задачу упрощает то, что сегодня выбор готовых решений, распространяемых под свободными лицензиями, достаточно велик. Системный монитор Symon обладает хорошей функциональностью, весьма прост в настройках, а генерируемые им графики наглядны и информативны.
Содержание:
- Установка Symon
- Конфигурационные файлы Symon
- Настраиваем Symux
- Анализируем данные
- Мини-статья: Установка symon/symux в Ubuntu/Debian
- Боковые выносы
Системный монитор изначально был написан для работы с 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.
Кроме этого, на просторах Сети можно найти еще ряд связанных проектов. Например, , как и 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 и 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
Так контролируется загрузка процессора, ОЗУ, работа интерфейса обратной петли и жесткого диска. Это самый простой пример. Все возможные параметры приведены в справочной странице . Вот только некоторые из них:
- 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.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:
# ftp # 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 читай в статье «Универсальный наблюдатель» в X_11_2008.
VIDEO
-
На прилагаемом к журналу диске ты найдешь видеоролик, в котором показано, как с помощью symon настроить систему мониторинга серверов.
WWW
- Сайт проекта Symon — .
- Сайт проекта phpSymon — .
Статья опубликована в мартовском номере журнала «Xakep» за 2009 год.






