Передовой наблюдательный пункт. Symon: удобная система мониторинга [2009]
Плох тот админ, кто не контролирует состояние подопечных систем. Потраченное на установку даже простейшей системы мониторинга время окупится с лихвой. Лениться в этом вопросе не стоит, да и выбор готовых решений, распространяемых под свободными лицензиями, сегодня достаточно велик. Системный монитор 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/:
Настройки, выставленные в шаблоне, позволяют мониторить лишь четыре параметра локальной системы и отправлять результат на 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 – статистика использования дискового пространства.
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 и ОЗУ):
Остается лишь дополнить его своими параметрами. Для полноценного мониторинга «боевого» сервера, на котором работает прокси, апач, демон серых списков, MySQL и Clamd, пишем приблизительно такой конфиг:
Если сбор данных будет производиться на другом сервере, то вместо 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. Команда для запуска выглядит так:
В итоге скрипт выдаст список созданных файлов. Проверяем снова:
# /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'.
Данные пришли. Теперь на них нужно как-то посмотреть.
Анализируем данные
Как уже говорилось, для анализа собранной информации проект предлагает несколько скриптов. Один из них (модуль SymuxClient.pm и скрипт getsymonitem.pl) после установки можно найти в /usr/local/share/symon/client. Скрипт довольно прост в работе; в общем случае вызов выглядит так:
# 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 веб-сервера:
В файле syweb/setup.inc необходимо изменить несколько переменных под наши реалии. В нем есть несколько заготовок для различных систем Free/OpenBSD и ситуаций (с chroot или без):
Если веб-сервер запускается в chroot, дополнительно следует запустить скрипт, находящийся в архиве install_rrdtool.sh, который перенесет библиотеки rrd в chroot-окружение.
Все готово, заходим на страницу http://localhost/syweb и смотрим красивые графики. Используя меню, можно изменить временной промежуток и их размер. В отдельный пункт вынесена статистика PF. Если необходимо защитить эту информацию от посторонних лиц, можно использовать .htaccess:
Как видишь, Symon довольно простой и понятный в настройках инструмент, при помощи которого можно снимать статистику основных системных параметров сразу с нескольких серверов.
Установка symon/symux в Ubuntu/Debian
Направленность на *BSD-системы сказалась на том, что найти symon в репозитариях дистрибутивов Linux непросто. Повезло, разве что, гентушникам (gentoo-portage.com/net-analyzer/symon). Поэтому пользователям остальных дистрибутивов 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»: