Система мониторинга на базе Symon


Мини-руководство "шаг за шагом"

Перед установкой symon убедитесь, что Web-сервер Apache работает не в chroot-окружении (httpd_flags="-u" в /etc/rc.conf.local), модуль mod_php5 подключен, а дистрибутивный архив xbase46.tgz установлен (sudo tar zxvpf xbase46.tgz -C /).

Через переменную окружения PKG_PATH указываем расположение прекомпилированных пакетов:

% export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/packages/i386

Устанавливаем пакет symon вместе с зависимостями:

% sudo pkg_add symon

Копируем примеры конфигурационных файлов в каталог /etc:

% sudo cp /usr/local/share/examples/symon/*.conf /etc

Редактируем конфигурационный файл системного монитора, в задачу которого входит сбор и пересылка данных.

% sudo vi /etc/symon.conf
monitor { cpu(0),
	  mem,
	  mbuf,
	  pf,
	  io(wd0), df(wd0e),
	  if(enc0), if(bge0), if(rl0),
#	  sensor(lm0.temp0), sensor(lm0.temp1), sensor(lm0.fan1),
	  proc(squid), proc(httpd), proc(sshd)
} stream to 127.0.0.1 2100

Symux работает в режиме сервера, он получает потоки symon и сохраняет их в RRD-файлы. Конфигурируем:

% sudo vi /etc/symux.conf
# Указываем, на каком порту слушать входящие соединения symon
mux 127.0.0.1 2100
# Определяем входящие данные для каждого источника
source 127.0.0.1 {
# Описываем, какую именно информацию принимаем
# (здесь просто перечисляем источники из symon.conf)
	accept { cpu(0),
		 mem,
		 mbuf,
		 pf,
		 io(wd0), df(wd0e),
		 if(enc0), if(bge0), if(rl0),
#		 sensor(lm0.temp0), sensor(lm0.temp1), sensor(lm0.fan1),
		 proc(squid), proc(httpd), proc(sshd)
	}

#	write sensor(lm0.temp0) in "/var/www/symon/rrds/localhost/sensor_lm0.temp0.rrd"
#	write sensor(lm0.temp1) in "/var/www/symon/rrds/localhost/sensor_lm0.temp1.rrd"
#	write sensor(lm0.fan1) in "/var/www/symon/rrds/localhost/sensor_lm0.fan1.rrd"

# Каталог, в который будем сохранять данные
	datadir "/var/www/symon/rrds/localhost"
}

Создаем каталог для данных:

% sudo mkdir -p /var/www/symon/rrds/localhost
% sudo chown -R root:wheel /var/www/symon
% sudo chmod -R 755 /var/www/symon
% cd /var/www/symon/rrds/localhost

С помощью скрипта c_smrrds.sh, входящего в поставку symon, создаем необходимые RRD-файлы:

% sudo /usr/local/share/symon/c_smrrds.sh all
/var/www/symon/rrds/localhost/proc_sshd.rrd created
/var/www/symon/rrds/localhost/proc_httpd.rrd created
/var/www/symon/rrds/localhost/proc_squid.rrd created
/var/www/symon/rrds/localhost/if_rl0.rrd created
/var/www/symon/rrds/localhost/if_bge0.rrd created
/var/www/symon/rrds/localhost/if_enc0.rrd created
/var/www/symon/rrds/localhost/df_wd0e.rrd created
/var/www/symon/rrds/localhost/io_wd0.rrd created
/var/www/symon/rrds/localhost/pf.rrd created
/var/www/symon/rrds/localhost/mbuf.rrd created
/var/www/symon/rrds/localhost/mem.rrd created
/var/www/symon/rrds/localhost/cpu0.rrd created

При возникновении ошибок, связанных с отсутствием требуемых динамических библиотек, выполняем команду:

% sudo ldconfig /usr/local/lib /usr/X11R6/lib

Для тестирования запускаем symux и symon в режиме отладки:

% sudo /usr/local/libexec/symux -d
symux version 2.79
program id=32039
debug: size of churnbuffer = 2361
debug: shm from 0x88cde000 to 0x89104ac0
debug: symux packet size=1642
listening for incoming symon traffic on udp 127.0.0.1 2100
listening for incoming connections on tcp 127.0.0.1 2100

% sudo /usr/local/libexec/symon -d
symon version 2.79
program id=25989
debug: symon packet size=821
sending packets to udp 127.0.0.1 2100
started module proc(sshd)
started module proc(httpd)
started module proc(squid)
started module if(rl0)
started module if(bge0)
started module if(enc0)
started module df(wd0e)
started module io(wd0)
started module pf()
started module mbuf()
started module mem()
started module cpu(0)

В случае возникновения ошибки "symux: could not get a semaphore" попробуйте увеличить значения sysctl-переменных kern.seminfo.semmni и kern.seminfo.semmns:

% sudo sysctl kern.seminfo.semmni=128
kern.seminfo.semmni: 10 -> 128
% sudo sysctl kern.seminfo.semmns=256
kern.seminfo.semmns: 60 -> 256

Если все в порядке, запускаем symux и symon в нормальном режиме:

% sudo /usr/local/libexec/symux
% sudo /usr/local/libexec/symon

Прописываем запуск symux и symon в сценарий загрузки:

% sudo vi /etc/rc.local
if [ -x /usr/local/libexec/symux -a -f /etc/symux.conf ]; then
	echo -n ' symux'; /usr/local/libexec/symux
fi

if [ -x /usr/local/libexec/symon -a -f /etc/symon.conf ]; then
	echo -n ' symon'; /usr/local/libexec/symon
fi

Чтобы просмотреть собранную информацию, можно воспользоваться скриптом getsymonitem.pl (в качестве последнего параметра используем информацию из «man 8 symux», применительно к CPU это: user, nice, system, interrupt, idle):

% cd /usr/local/share/symon/client
% sudo ./getsymonitem.pl 127.0.0.1 2100 127.0.0.1 'cpu(0)' user
3.10

Теперь переходим к установке syweb:

% cd ~/devel
% ftp http://www.xs4all.nl/~wpd/symon/philes/syweb-0.58.tar.gz
% tar zxvf syweb-0.58.tar.gz
% cd syweb
% sudo cp -R htdocs/syweb /var/www
% sudo cp -R symon /var/www/symon/layout
% sudo mkdir /var/www/symon/cache
% sudo chown www:www /var/www/symon/cache

Изменяем параметры setup.inc под нашу конфигурацию (секцию "running FreeBSD, apache not chrooted" полностью комментируем):

% sudo vi /var/www/syweb/setup.inc
/* running OpenBSD, apache not chrooted: */
$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/layout';

Конфигурируем Apache:

% sudo vi /var/www/conf/httpd.conf
Alias /syweb "/var/www/syweb/"

<Directory "/var/www/syweb">
	Options None
	AllowOverride None
	DirectoryIndex index.php
	Order allow,deny
	Allow from all

# При желании можно ограничить доступ к этому каталогу
#	AuthType Basic
#	AuthName "syweb zone"
#	AuthUserFile /var/www/conf/.htpasswd
#	AuthGroupFile /dev/null
#	require valid-user

# А также разрешать вход только по протоколу https
#	SSLRequireSSL
#	SSLVerifyClient none
</Directory>

В том случае, если требуется авторизация, следует создать пароль при помощи утилиты htpasswd(1):

% sudo htpasswd -c /var/www/conf/.htpasswd admin

После внесения изменений в /var/www/conf/httpd.conf останавливаем и повторно запускаем httpd(8):

# apachectl stop
# apachectl start

Выполняем проверку (подразумевается, что IP-адрес сервера, на котором запущены httpd, symux и symon, - 192.168.1.1): http://192.168.1.1/syweb/configtest.php

После проверки из соображений безопасности configtest.php можно удалить, либо запретить к нему доступ:

% sudo chmod 000 configtest.php

Настройка завершена, смотрим на красивые графики: http://192.168.1.1/syweb/

Можно изменить расположение графиков и подписи к ним, для этого нужно создать свой layout-файл в каталоге /var/www/symon/layout:

% sudo vi /var/www/symon/layout/evo.layout
group name="Cpu, memory and memory buffers";
graph rrdfile=/var/www/symon/rrds/localhost/cpu0.rrd, title="cpu(0)";
graph rrdfile=/var/www/symon/rrds/localhost/mem.rrd, title="memory";
graph rrdfile=/var/www/symon/rrds/localhost/mbuf.rrd, title="mbuf";

#group name="Sensors";
#graph rrdfile=/var/www/symon/rrds/localhost/sensor_lm0.temp0.rrd, title="Chipset temperature (degC)";
#graph rrdfile=/var/www/symon/rrds/localhost/sensor_lm0.temp1.rrd, title="CPU temperature (degC)";
#graph rrdfile=/var/www/symon/rrds/localhost/sensor_lm0.fan1.rrd, title="CPU fan (RPM)";

group name="Disks";
graph rrdfile=/var/www/symon/rrds/localhost/io_wd0.rrd, title="wd0: system disk";
graph rrdfile=/var/www/symon/rrds/localhost/df_wd0e.rrd, title="wd0e: /var/log";

group name="Interfaces";
graph rrdfile=/var/www/symon/rrds/localhost/if_bge0.rrd, title="lan interface";
graph rrdfile=/var/www/symon/rrds/localhost/if_rl0.rrd, title="wan interface";
graph rrdfile=/var/www/symon/rrds/localhost/if_enc0.rrd, title="vpn interface";

group name="Packet filter";
graph rrdfile=/var/www/symon/rrds/localhost/pf.rrd, title="pf: stats on wan interface";

group name="Procs";
graph rrdfile=/var/www/symon/rrds/localhost/proc_squid.rrd, title="Squid";
graph rrdfile=/var/www/symon/rrds/localhost/proc_httpd.rrd, title="Apache";
graph rrdfile=/var/www/symon/rrds/localhost/proc_sshd.rrd, title="Sshd";

Чтобы сделать свой layout-файл активным по умолчанию, вносим соответствующее изменение в /var/www/syweb/setup.inc:

% sudo vi +105 /var/www/syweb/setup.inc
    'layout' => array(
        'type'        => 'named',
        'default'     => 'evo',
        'namedvalues' => array(
            'default' => ''
            )
        ),

TODO:

  • работа в Apache chroot

Данное пошаговое руководство основано на статье "Передовой наблюдательный пункт", опубликованной в мартовском номере журнала " Хакер" за 2009 год. Авторы оригинальной статьи: Сергей Яремчук и Андрей Матвеев.


OpenBSD.ru www@openbsd.ru
$RuOBSD: symon.html,v 1.8 2010/11/01 10:57:49 dinar Exp $