суббота, 2 августа 2014 г.

Установка и настройка Munin

Цель: установить и настроить мониторинг для четырёх серверов: monitor (localhost), главный сервер (main-server) и 2 DNS сервера (DNS1, DNS2).
На всех четырёх машинах Debian 7.
До этого я устанавливал Nagios, теперь данные с серверов решил разбавить графиками.


Обратите внимание на hostname, чтобы не запутаться.
monitor - сервер мониторинга, на котором будет производиться большинство настроек;
main-server - сервер, который будет подключать к мониторингу;
dns1, dns2 - DNS сервера, которые будем подключать к мониторингу.

Обновляем пакетную базу:
monitor ~ # apt-get update && apt-get upgrade
monitor ~ # apt-get install munin munin-node

Приводим основной конфиг munin к виду:
monitor ~ # vim /etc/munin/munin.conf
# абсолютные пути к файлам
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir  /var/run/munin
# отправлять письма с уведомлениями
contact.someuser.command mail -s "Munin notification" [email protected]
# подключаемые хосты
[localhost.localdomain] # localhost
   address 127.0.0.1
   use_node_name yes
[main-server.example.ru] # главный сервер
   address 1.1.1.1
   use_node_name yes
[dns1.dns1] # DNS1
   address 2.2.2.2
   use_node_name yes
[dns2.dns2] # DNS2
   address 3.3.3.3
   use_node_name yes

Настраиваем apache2 для работы с munin:
monitor ~ # vim /etc/apache2/sites-available/munin
<VirtualHost *:443>
   ServerAdmin [email protected]
   ServerName example.ru
   DocumentRoot /var/cache/munin/www
   <Directory />
      Options FollowSymLinks
      AllowOverride None
   </Directory>
   <Directory /var/cache/munin/www>
      Options -Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      allow from all
   </Directory>
   SSLEngine On
   SSLCertificateFile /etc/apache2/ssl/nagios.pem
   SSLCertificateKeyFile /etc/apache2/ssl/nagios.key
</VirtualHost>

Сертификат для ssl у меня уже был (самоподписанный), для Nagios, поэтому я его использовал. Как создать самоподписанный сертификат написано тут.

Если используется nginx, то:
monitor ~ # vim /etc/nginx/conf.d/munin.conf
server {
listen 8080;
server_name localhost;
auth_basic "Private access";
auth_basic_user_file /etc/munin/munin-htpasswd;
location /munin/ {
alias /var/cache/munin/www/;
}
location /munin/static/ {
alias /etc/munin/static/;
}
}

Я его повесил на порт 8080, без ssl.

Сейчас доступ к munin у нас имеют все пользователи. Настроим его так, чтобы работала авторизация (например для пользователей muninadmin, amet13, user1):
monitor ~ # htpasswd -c /etc/munin/munin-htpasswd muninadmin
monitor ~ # htpasswd -n amet13 >> /etc/munin/munin-htpasswd
monitor ~ # htpasswd -n user1 >> /etc/munin/munin-htpasswd

Теперь нужно указать в конфиге, что при заходе на сайт нужно требовать авторизацию (если nginx, то пропускаем этот пункт):
monitor ~ # vim /etc/munin/apache.conf
<Directory /var/cache/munin/www>
   ...
   AuthUserFile /etc/munin/munin-htpasswd
   AuthName "Munin"
   AuthType Basic
   require valid-user
   ...
</Directory>

По умолчанию munin запускается по крону каждые 5 минут. Я хочу изменить это, к примеру на 1 минуту:
monitor ~ # vim /etc/cron.d/munin
*/1 * * * *     munin if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi

Для применения настроек добавляем виртуальный хост и перезагружаем apache2 и munin-node:
monitor ~ # a2ensite munin
monitor ~ # service apache2 restart
monitor ~ # service munin-node start

После этого можно проверить работоспособность munin.
Для apache2:
https://ваш_адрес/munin/
логин: muninadmin или amet13 или user1
пароль: пароль_который_вводили

Для nginx:
http://ваш_адрес:8080/munin/
логин и пароль те же

Сейчас у нас будут показываться данные только по локальной машине, ведь остальные мы ещё не подключили. Сейчас мы их подключим (обратите внимание на hostname):
main-server ~ # apt-get install munin-node

Добавляем в конфиг адрес нашего сервера мониторинга:
main-server ~ # vim /etc/munin/munin-node.conf 
allow ^1\.1\.1\.1$

main-server ~ # service munin-node restart

Аналогично нужно поступить с остальными серверами, в моём случае это 2 DNS сервера.

Теперь можно проверить опять munin. Сейчас уже должны отображаться данные обо всех подключенных серверах.

По сути это всё.
Однако, меня не устраивает то, что отображается информация о exim, ntp и т.д. на DNS серверах, оно мне не нужно. Поэтому лишние плагины я удаляю (они являются символическими ссылка, так что без проблем можно их заново создать). На main-server мне не нужен мониторинг интерфейса eth1, а на localhost не нужен мониторинг ntp и postfix.

Удаление лишних плагинов:
DNS1
dns1 ~ # cd /etc/munin/plugins/
dns1 /etc/munin/plugins # rm exim_mailqueue exim_mailstats nfs4_client nfs_client nfsd nfsd4 ntp_kernel_err ntp_kernel_pll_freq ntp_kernel_pll_off ntp_offset ntp_states swap

DNS2
dns2 ~ # cd /etc/munin/plugins/
dns2 /etc/munin/plugins # rm exim_mailqueue exim_mailstats nfs4_client nfs_client nfsd nfsd4 ntp_kernel_err ntp_kernel_pll_freq ntp_kernel_pll_off ntp_offset ntp_states swap

main-server
main-server ~ # cd /etc/munin/plugins/
main-server /etc/munin/plugins # rm if_err_eth1 if_eth1

localhost
monitor ~ # cd /etc/munin/plugins/
monitor /etc/munin/plugins # rm postfix_mailqueue postfix_mailvolume ntp_kernel_err ntp_kernel_pll_freq ntp_kernel_pll_off ntp_offset

Дополнительные настройки.

Настройка MySQL:
main-server ~ # apt-get install libcache-perl libcache-cache-perl

main-server ~ # vim /etc/munin/plugin-conf.d/munin-node
[mysql*]
   user root
   env.mysqluser root
   env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306
   env.mysqlpassword пароль_базы

main-server ~ # service munin-node restart

Настройка bind9 для DNS1, DNS2:
dns1 ~ # mkdir /var/log/bind9
dns1 ~ # chown bind:bind /var/log/bind9
dns1 ~ # vim /etc/bind/named.conf.options
...
logging {
   channel b_log {
      file "/var/log/bind9/bind.log" versions 30 size 1m;
      print-time yes;
      print-category yes;
      print-severity yes;
      severity info;
   };
   channel b_debug {
      file "/var/log/bind9/debug.log" versions 2 size 1m;
      print-time yes;
      print-category yes;
      print-severity yes;
      severity dynamic;
   };
   channel b_query {
      file "/var/log/bind9/query.log" versions 2 size 1m;
      print-time yes;
      severity info;
   };
   category default { b_log; b_debug; };
   category config { b_log; b_debug; };
   category queries { b_query; };
};

dns1 ~ # service bind9 restart

dns1 ~ # ln -s /usr/share/munin/plugins/bind9 /etc/munin/plugins/bind9

dns1 ~ # vim /etc/munin/plugin-conf.d/munin-node
[bind9]
user root
env.logfile   /var/log/bind9/query.log

dns1 ~ # service munin-node restart

Проверка:
dns1 ~ # munin-run bind9
query_MX.value 6
query_A.value 1889
query_A6.value 4
query_NS.value 27
query_AAAA.value 846
query_ANY.value 5
query_other.value 0

Аналогичные настройки для DNS2.

И окончательно можно зайти проверить:
https://ip-addr/munin/


Комментариев нет: