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

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

П.С.

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

5 1 голос
Оцените статью
Подписаться
Уведомить о
14 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Evgen

Вы забыли указать, что можно очень легко и просто написать свой плагин для munin, если вдруг не хватает плагинов «из коробки».
Большое спасибо за «ловлю глюков»! )))

ASerp

Munin не создает в каталоге файлы для www .

Повелся на описание — простая система мониторинга — поставил — блин, уже 2 дня не могу заставить эту простую работать.

Прошу, помощи, не знаю что ей еще надо.

При обращении у http://192.168.1.1/munin/ Выдает страничку

Index of /munin — Parent Directory и все

FreeBSD 10.2
apache2.4

munin.log — пустой

munin-node.log

2015/10/13-15:29:38 CONNECT TCP Peer: «[127.0.0.1]:35993» Local: «[127.0.0.1]:4949»

2015/10/13-15:29:45 CONNECT TCP Peer: «[127.0.0.1]:55428» Local: «[127.0.0.1]:4949»

2015/10/13-15:29:55 CONNECT TCP Peer: «[127.0.0.1]:28436» Local: «[127.0.0.1]:4949»

2015/10/13-15:30:01 CONNECT TCP Peer: «[127.0.0.1]:64506» Local: «[127.0.0.1]:4949»

2015/10/13-15:30:27 CONNECT TCP Peer: «[127.0.0.1]:28893» Local: «[127.0.0.1]:4949»

2015/10/13-15:30:55 CONNECT TCP Peer: «[127.0.0.1]:17562» Local: «[127.0.0.1]:4949»

2015/10/13-15:31:20 CONNECT TCP Peer: «[127.0.0.1]:64673» Local: «[127.0.0.1]:4949»

2015/10/13-15:31:40 CONNECT TCP Peer: «[127.0.0.1]:27204» Local: «[127.0.0.1]:4949»

2015/10/13-15:31:46 CONNECT TCP Peer: «[127.0.0.1]:65381» Local: «[127.0.0.1]:4949»

2015/10/13-15:32:29 CONNECT TCP Peer: «[127.0.0.1]:63483» Local: «[127.0.0.1]:4949»

2015/10/13-15:32:40 CONNECT TCP Peer: «[127.0.0.1]:63709» Local: «[127.0.0.1]:4949»

2015/10/13-15:33:04 CONNECT TCP Peer: «[127.0.0.1]:35629» Local: «[127.0.0.1]:4949»

2015/10/13-15:33:16 CONNECT TCP Peer: «[127.0.0.1]:54344» Local: «[127.0.0.1]:4949»

2015/10/13-15:33:38 CONNECT TCP Peer: «[127.0.0.1]:23987» Local: «[127.0.0.1]:4949»

2015/10/13-15:33:58 CONNECT TCP Peer: «[127.0.0.1]:59651» Local: «[127.0.0.1]:4949»

2015/10/13-15:34:34 CONNECT TCP Peer: «[127.0.0.1]:26701» Local: «[127.0.0.1]:4949»

2015/10/13-15:35:19 CONNECT TCP Peer: «[127.0.0.1]:37860» Local: «[127.0.0.1]:4949»

2015/10/13-15:35:36 CONNECT TCP Peer: «[127.0.0.1]:10214» Local: «[127.0.0.1]:4949»

2015/10/13-15:35:48 CONNECT TCP Peer: «[127.0.0.1]:53195» Local: «[127.0.0.1]:4949»

2015/10/13-15:36:11 CONNECT TCP Peer: «[127.0.0.1]:65122» Local: «[127.0.0.1]:4949»

2015/10/13-15:36:30 CONNECT TCP Peer: «[127.0.0.1]:27026» Local: «[127.0.0.1]:4949»

munin.conf

dbdir /var/munin

htmldir /usr/local/www/munin

logdir /var/log/munin

rundir /var/run/munin

[MuninMonitor]

address 127.0.0.1

address 192.168.1.1

use_node_name yes

munin-node.conf

log_level 4

log_file /var/log/munin/munin-node.log

pid_file /var/run/munin/munin-node.pid

background 1

setsid 1

user root

group wheel

ignore_file [

ignore_file DEADJOE$

ignore_file .bak$

ignore_file %$

ignore_file .dpkg-(tmp|new|old|dist)$

ignore_file .rpm(save|new)$

ignore_file .pod$

ignore_file .sample$

allow ^127.0.0.1$

allow ^::1$

host *

port 4949

./munin-check

check /usr/local/www/munin

ls: /usr/local/www/munin/*: No such file or directory

# /usr/local/www/munin/* : Wrong owner ( != munin)

check /var/munin/cgi-tmp

ls: /var/munin/cgi-tmp/*: No such file or directory

# /var/munin/cgi-tmp/* : Wrong owner ( != munin)

check /var/munin/dead.letter

check miscellaneous

ls: /var/munin/datafile: No such file or directory

# /var/munin/datafile : Wrong owner ( != munin)

# /var/munin/datafile : Wrong permissions (0 != 644)

ls: /var/munin/limits: No such file or directory

# /var/munin/limits : Wrong owner ( != munin)

# /var/munin/limits : Wrong permissions (0 != 644)

ls: /var/munin/*.stats: No such file or directory

# /var/munin/*.stats : Wrong owner ( != munin)

# /var/munin/*.stats : Wrong permissions (0 != 644)

# /var/munin/plugin-state : Wrong owner (munin != nobody)

Последняя строка — вообще нечто: Wrong owner (munin != nobody) при этом если я делаю вручную запрос, то владелец = munin

root@gw2:/usr/local/bin # ls -ld /var/munin/*

drwxrwxr-x 2 munin www 512 Oct 4 23:52 /var/munin/cgi-tmp

-rw-r—r— 1 munin munin 210392 Oct 13 15:50 /var/munin/dead.letter

drwxrwxr-x 4 munin munin 512 Oct 12 20:13 /var/munin/plugin-state

ASerp

Спасибо, за подсказку, строчки добавил, IPv6 действительно не использую, закомментил, права на папку были, кронтаб тоже.

Вчера мне помогли добраться до одной ошибки при запуске munin-cron, сейчас ищу решение:

root@gw2:/var/cron/tabs # /usr/local/bin/munin-cron

Can’t load ‘/usr/local/lib/perl5/site_perl/mach/5.20/auto/RRDs/RRDs.so’ for module RRDs: /usr/local/lib/libpng16.so.16: version PNG16_0 required by /usr/local/lib/librrd.so.4 not defined at /usr/local/lib/perl5/5.20/mach/DynaLoader.pm line 193.

at /usr/local/lib/perl5/site_perl/Munin/Master/UpdateWorker.pm line 19.

Compilation failed in require at /usr/local/lib/perl5/site_perl/Munin/Master/UpdateWorker.pm line 19.

BEGIN failed—compilation aborted at /usr/local/lib/perl5/site_perl/Munin/Master/UpdateWorker.pm line 19.

Compilation failed in require at /usr/local/lib/perl5/site_perl/Munin/Master/Update.pm line 17.

BEGIN failed—compilation aborted at /usr/local/lib/perl5/site_perl/Munin/Master/Update.pm line 17.

Compilation failed in require at /usr/local/share/munin/munin-update line 14.

BEGIN failed—compilation aborted at /usr/local/share/munin/munin-update line 14.

ASerp

Да, конечно:

pkg info | grep rrd

rrdtool-1.4.8_9 Round Robin Database Tools

ASerp
pkg info | grep p5-libwww

p5-libwww-6.13 Perl5 library for WWW access

ASerp
pkg info | grep p5-LWP-MediaTypes

p5-LWP-MediaTypes-6.02_1 Guess media type for a file or a URL

я сразу все pkg info выложил:
https://drive.google.com/open?id=0B6CvRq9MmuJVOVRXZU9hWEhsTzg

ASerp

ок, спасибо огромное, похоже в этом проблема и была.

увидеть оказалось можно было:

pkg version -v

помогло :

portupgrade -ay

странно, я в bsd не гуру, и может чего-то не понимаю, до этого я делал:

portsnap fetch extract update
freebsd-update fetch install
pkg audit

и думал что у меня все в порядке с обновлениями, а оказалось, что нет — нужно еще что-то обновлять и пересобирать.

А в связи с тем что я пересобирал ядро с поддержкой ALTQ может после обновления еще нужно что-то сделать?

ASerp

После обновления системы munin cron выдало:

[FATAL] There is nothing to do here, since there are no nodes with any plugins. Please refer to http://munin-monitoring.org/wiki/FAQ_no_graphs at /usr/local/share/munin/munin-html line 40.

сделал:

munin-node-configure --shell | sh -x

И в munin.conf у меня был лишний адрес в серции ноды

address 192.168.1.1 — его я удалил, оставил только

address 127.0.0.1

УФ, Все, Заработало.