main

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.