Munin. Собираем статистику

Стало быть появилась нужда в статистике. Я особо не выбирал, взял munin и начал установку. Понравилось:

  • клиент-серверное ПО
  • 194 диагностических плагина в стандартной поставке, которые подключаем по мере потребности
  • отчёты в виде графиков на одной странице
  • при обилии серверов-удобная навигация в отчётах

Всё ниже написаное я делал на серверах под FreeBSD 8.2, munin 1.4.6

Установка и настройка munin-node

portinstall munin-node

Ждём пока установятся перловые зависимости, и собственно сам munin. Кстати их будет много. На серваке, где я установил munin-node и munin-master у меня добавилось 97 новых пакетов. Настрока node предельно проста

cd /usr/local/etc/munin

В munin-node.conf указываем адрес сервера, который будет брать данные

allow ^xx\.xx\.xx\.xx$

Можно указать host если нужно, чтоб munin висел на определённом интерфейсе. Переходим в в папку plugins, где и подключаем нужные плагины. Я здесь укажу лишь те, которые у меня подключены на разных серверах, но суть-то не меняется

ln -s /usr/local/share/munin/plugins/cpu cpu
ln -s /usr/local/share/munin/plugins/if_ if_net0
ln -s /usr/local/share/munin/plugins/iostat iostat
ln -s /usr/local/share/munin/plugins/load load
ln -s /usr/local/share/munin/plugins/memcached_ memcached_bytes
ln -s /usr/local/share/munin/plugins/memcached_ memcached_rates
ln -s /usr/local/share/munin/plugins/memory memory
ln -s /usr/local/share/munin/plugins/mysql_bytes mysql_bytes
ln -s /usr/local/share/munin/plugins/mysql_queries mysql_queries
ln -s /usr/local/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ln -s /usr/local/share/munin/plugins/mysql_threads mysql_threads
ln -s /usr/local/share/munin/plugins/mysql_3307_bytes mysql_3307_bytes
ln -s /usr/local/share/munin/plugins/mysql_3307_queries mysql_3307_queries
ln -s /usr/local/share/munin/plugins/mysql_3307_slowqueries mysql_3307_slowqueries
ln -s /usr/local/share/munin/plugins/mysql_3307_threads mysql_3307_threads
ln -s /usr/local/share/munin/plugins/mysql_3308_bytes mysql_3308_bytes
ln -s /usr/local/share/munin/plugins/mysql_3308_queries mysql_3308_queries
ln -s /usr/local/share/munin/plugins/mysql_3308_slowqueries mysql_3308_slowqueries
ln -s /usr/local/share/munin/plugins/mysql_3308_threads mysql_3308_threads
ln -s /usr/local/share/munin/plugins/nginx_request nginx_request
ln -s /usr/local/share/munin/plugins/nginx_status nginx_status
ln -s /usr/local/share/munin/plugins/swap swap
ln -s /usr/local/share/munin/plugins/systat systat
ln -s /usr/local/share/munin/plugins/uptime uptime
ln -s /usr/local/share/munin/plugins/vmstat vmstat

Внимание! Если имя подключаемого плагина заканчивается на «_», то это означает, что в имени линка после «_» должен быть параметр, как в случае с if_, memcached_ и т.д. Далее в rc.conf.local добавляем munin_node_enable=»YES» и стартуем. Список подключённых/отключённых модулей можно посмотреть командой

munin-node-configure

Установка и настройка munin-master

Ставим на том же сервере где и установили клиент или на другом. Перед установкой нужно разрешить cron для пользователя munin, иначе ругнется

crontab: you (munin) are not allowed to use this program*** Error code 1
Stop in /usr/ports/sysutils/munin-master.*** Error code 1
Stop in /usr/ports/sysutils/munin-master.** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20111207-7314-1v9hqdn-0 env UPGRADE_TOOL=portupgrade UPGRADE_PORT=munin-master-1.4.6 UPGRADE_PORT_VER=1.4.6 make -DFORCE_PKG_REGISTER reinstall

vi /var/cron/allow

Добавили, записали

portinstall munin-master

Настройка опций в munin.conf предельно ясно

dbdir   /var/db/munin
htmldir /usr/home/stat/www
logdir /var/log/munin
rundir  /var/run/munin
tmpldir /usr/local/etc/munin/templates
includedir /usr/local/etc/munin/munin-conf.d

dbdir, htmldir,logdir,rundir — должны быть доступны для записи пользователю munin.

[server1]
use_node_name yes
address yy.yy.yy.yy

Указываем с какого сервера брать статистику. Записываем, и ждем когда в htmldir появятся отчёты. Настройку конфига apache/nginx’а для отображения графиков я опускаю, там по сути делать нечего

Теперь самое интересное 🙂  Ловля глюков

memcached

Мастер не смог получить инфу от ноды о мемкеше, в логах ошибка

Error output from memcached_conns:
Can’t use an undefined value as a HASH reference at /usr/local/etc/munin/plugins/memcached_conns line 202.
Service ‘memcached_conns’ exited with status 2/0.

Error output from memcached_rates:Can’t exec «/usr/local/etc/munin/plugins/memcached_conns»: No such file or directory at /usr/local/lib/perl5/site_perl/5.12.4/Munin/Node/Service.pm line 215, <STDIN> line 13.Service ‘memcached_rates’ exited with status 42/0

Лечится установкой p5-Cache-Memcached на мастере

mysql

Это отдельная песня. Если у вас один сервер mysql и висит он на стандартном 3306 порту или работает через стандартный сокет, то проблем быть не должно. Но это не мой случай. Мне пришлось развесить его на 3306, 3307, 3308 порты. Соответственно как снимать статистику? Выход следующий

cd /usr/local/share/munin/plugins
ln -s mysql_bytes mysql_3307_bytes
ln -s mysql_queries mysql_3307_queries
ln -s mysql_slowqueries mysql_3307_slowqueries
ln -s mysql_threades mysql_3307_threades
ln -s mysql_bytes mysql_3308_bytes
ln -s mysql_queries mysql_3308_queries
ln -s mysql_slowqueries mysql_3308_slowqueries
ln -s mysql_threades mysql_3308_threades

Теперь понятно, что это были за линки с номерами портов для mysql в папке plugins. Да, получается линк на линк. Теперь в plugins.conf пишем

[mysql_*]
user root
env.mysqladmin /usr/local/bin/mysqladmin
env.mysqlshow /usr/local/bin/mysqlshow
env.mysqlopts --defaults-extra-file=/usr/local/etc/munin/plugin-conf.d/mysql3306.conf

[mysql3307*]
user root
env.mysqladmin /usr/local/bin/mysqladmin
env.mysqlshow /usr/local/bin/mysqlshow
env.mysqlopts --defaults-extra-file=/usr/local/etc/munin/plugin-conf.d/mysql3307.conf

[mysql3308*]
user root
env.mysqladmin /usr/local/bin/mysqladmin
env.mysqlshow /usr/local/bin/mysqlshow
env.mysqlopts --defaults-extra-file=/usr/local/etc/munin/plugin-conf.d/mysql3308.conf

В mysql3306.conf указываем

[client]
env.socket = /tmp/mysql3306.sock
env.user = statuser
env.password = ********

Аналогично делаем для mysql3307.conf и mysql3308.conf незабывая указывать сокеты через которые работают mysql’и. Ясно, что конфиги приведены для случая, когда mysql и munin-noda установлены на одном сервере. Это первый вариант решения вопроса. Второй вариант описан в этой статье. Не знаю-не пробовал, если вы попробуете, напишите ваши впечатления

nginx

Для получения графиков о работе nginx’а необходимо в nginx.conf в секции http добавить

server {
 listen 127.0.0.1:80;
 server_name localhost;
 location /nginx_status { 
 stub_status on;
 access_log off;
 allow 127.0.0.1;
 deny all;
 }
}
nginx -s reload

Однако графики были пусты. Смотрим в логи и видим ошибку

Error output from nginx_request:Can’t locate object method «new» via package «LWP::UserAgent» at /usr/local/etc/munin/plugins/nginx_request line 106.Service ‘nginx_request’ exited with status 255/0.Error output from nginx_status:Can’t locate object method «new» via package «LWP::UserAgent» at /usr/local/etc/munin/plugins/nginx_status line 109.Service ‘nginx_status’ exited with status 2/0.

Лечится установкой p5-libwww на мастере.

Далее, если мы рассмотрим скрипты nginx_request и nginx_status то увидим, что в строки

my $URL = exists $ENV{'url'} ? $ENV{'url'} :

разные. Я в nginx_request заменил $fqdn на localhost и график в риквестами появился. Досадный глюк, при апдейте нужно будет не забыть поменять

php-fpm

По умочанию модулей для диагностики php-fpm в munin нет. Но их можно скачать с гита. Пример с подключением там же. Основное, на что следует обратить внимание:

  • должна быть доступна /status
  • для FreeBSD процесс php-fpm, а не php5-fpm

тоесть заглянуть в каждый скрипт и поправить значения на нужные

П.С.

Статья получилась немного кучерявой, однако думаю основное я указал. Буду пополнять по мере того, какие плагины буду подключать и какие глюки при этом будут вылазить. Если кто-либо имеет что добавить к выше  написаному, присылайте, вставлю для полноты картины с копирайтом естественно и ссылкой на ваш сайт. Рекомендую также заглянуть в середину каждого плагина, что может навести на мысль и значительно облегчить настройку

Александр Черных
системный администратор

Статьи по теме