Munin, nginx и fcgi
Решил освежить в памяти настройку munin'а, а заодно попробовать его не с апачем.
Теоретическое отступление
Для тех кто не знает, что такое munin - это легковесная система мониторинга, основанная бдительности админа и графиках rrd.
Отличается от cacti:
- ориентацией на мониторинг хостов, а не сети
- более продуманной архитектурой (плагины писать полегче будет)
- perl вместо php
- необязательность snmp, нода - самостоятельный демон
Ближайшие аналоги - ganglia, mmonit
Собственно "сервер" состоит из скрипта, опрашивающий ноды и складывающий информацию в rrd, и пары скриптов выдающую эту информацию в виде html и картинок.
"Нода" состоит из самостоятельного демона, отдающего информацию на определённом порту. Авторизация - как обычно - по srcip, или network/mask, причём первое задаётся регэкспом.
На мой взгляд, недостатком можно назвать только величину "простыни" графиков. Даже при пяти хостах она внушает страх и уныние своей величиной.
Установка
...тривиальна.
На нодах:
# apt-get install munin-node
# vim /etc/munin/munin-node.conf
# service munin-node restart
На сервере с вебмордой (опционально - поставить ноду):
# apt-get install munin runit nginx-lite
# vim /etc/nginx/sites-enabled/munin.conf (пример - ниже)
# mkdir /etc/services/fcgi-munin
# vim /etc/service/fcgi-munin/run
# chmod +x /etc/service/fcgi-munin/run
# sv stop fcgi-munin
# sv start fcgi-munin
# service nginx restart
Конфиги
#!/bin/bash
# place this file to /etc/service/fcgi-munin/run
# and make executable
SPAWNFCGI="/usr/bin/spawn-fcgi"
FCGI_SOCKET=/var/run/fcgi-munin.sock
FCGI_PROGRAM=/usr/sbin/fcgiwrap
FCGI_USER=www-data
FCGI_GROUP=www-data
FCGI_EXTRA_OPTIONS="-M 0700"
ALLOWED_ENV="PATH"
E=
for i in $ALLOWED_ENV; do
E="$E $i=${!i}"
done
exec env - $E $SPAWNFCGI -n -s $FCGI_SOCKET -u $FCGI_USER -g $FCGI_GROUP $FCGI_EXTRA_OPTIONS -- $FCGI_PROGRAM
Комбинация мана fcgiwrap, spawn-fcgi и примера runit-generic.
server {
listen 80;
server_name munin.home.lan;
access_log off;
location / {
root /var/cache/munin/www;
}
location ~* /munin-cgi/munin-cgi-(graph|html) {
fastcgi_param DOCUMENT_ROOT /usr/lib/munin/cgi;
fastcgi_param SCRIPT_NAME munin-cgi-$1;
fastcgi_pass unix:/var/run/fastcgi-munin.sock;
}
}
Конфиг nginx'а втупую портирован с предлагаемого примера для апача. Заработало с первой попытки, явных глюков не замечено.
На нодах правилось только host_name
и allow_from
.