Unix-way → Установка и настройка Munin с Monit на Debian Linux

В этой статье описано как настроить мониторинг сервера под управлением Debian при помощи Munin и Monit.

Munin отрисовывает отличные графики о многих ресурсах сервера, например средняя загрузка, использование памяти, загрузка CPU, пропускную способность MySQL, сеть и так далее. Также можно установить monit для контроля Apache, MySQL, Postfix и так далее. Сочетание этих двух инструментов позволяет диагностировать текущие или будущие проблемы.

Несмотря на то, что Munin позволяет отслеживать более одного сервера, в статье будет затронут мониторинг только одной системы.

Также данная статья подойдет и для других дистрибутивов Linux!

Как пример используется хостнэйм server.example.com, и виртуальный хост www.example.com с корневой директорией /var/www/www.example.com/web.

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

В Debian устанавливаем munin следующим образом:

apt-get install munin munin-node munin-plugins-extra


Далее нужно отредактировать конфиг /etc/munin/munin.conf. Раскомментируйте строки dbdir, htmldir, logdir, rundir, и tmpldir. Теперь меняем хостнэйм для munin, по умолчанию стоит localhost.localdomain, а нам нужен server.example.com:

# Example configuration file for Munin, generated by 'make build'

# The next three variables specifies where the location of the RRD
# databases, the HTML output, logs and the lock/pid files.  They all
# must be writable by the user running munin-cron.  They are all
# defaulted to the values you see here.
#
dbdir   /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir  /var/run/munin
#
# Where to look for the HTML templates
tmpldir /etc/munin/templates

# (Exactly one) directory to include all files from.
#
includedir /etc/munin/munin-conf.d
[...]
# a simple host tree
[server.example.com]
    address 127.0.0.1
    use_node_name yes
[...]


Конфиг Apache для Munin находится в /etc/apache2/conf.d/munin (на самом деле это символическая ссылка на /etc/munin/apache.conf). Он определяет алиес Munin для данных мониторинга (HTML), которые сохраняются в /var/cache/munin/www. Таким образом сможем получить доступ к мониторингу со всех виртуальных хостов на сервере используя относительный путь /munin, например example.com/munin.

Закомментируйте строку Allow from localhost 127.0.0.0/8 ::1 и Allow from all:

nano /etc/apache2/conf.d/munin


Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
        Order allow,deny
        Allow from all
        #Allow from localhost 127.0.0.0/8 ::1
        Options None

        # This file can be used as a .htaccess file, or a part of your apache
        # config file.
        #
        # For the .htaccess file option to work the munin www directory
        # (/var/cache/munin/www) must have "AllowOverride all" or something
        # close to that set.
        #

        # AuthUserFile /etc/munin/munin-htpasswd
        # AuthName "Munin"
        # AuthType Basic
        # require valid-user

        # This next part requires mod_expires to be enabled.
        #

        # Set the default expiration time for files to 5 minutes 10 seconds from
        # their creation (modification) time.  There are probably new files by
        # that time.
        #

    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault M310
    </IfModule>

</Directory>


После изменений обязательно нужно перезагрузить Apache и Munin:

/etc/init.d/apache2 restart
/etc/init.d/munin-node restart


Теперь подождите несколько минут чтобы Munin успел собрать первую статистику, доступ к которой можно получить по адресу:

http://www.example.com/munin/


Защита каталога Munin паролем

Будет не очень хорошо, если данный каталог смогут читать все кому хочется, поэтому можно поставить пароль. Для этого создадим файл с паролями /etc/munin/munin-htpasswd:

htpasswd -c /etc/munin/munin-htpasswd admin


admin это имя пользователя, а пароль назначается после выполнения команды. Теперь откроем /etc/apache2/conf.d/munin:

nano /etc/apache2/conf.d/munin


B раскомментируем секцию:

AuthUserFile /etc/munin/munin-htpasswd
        AuthName "Munin"
        AuthType Basic
        require valid-user


После изменений перезагружаем Apache:

/etc/init.d/apache2 restart


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

В Debian для установки Monit выполняем:

apt-get install monit


В дефолтном конфиге /etc/monit/monitrc есть много примеров, а также можно обратиться к странице с документацией mmonit.com/monit/documentation/. Тем не менее, ниже показана настройка для ProFTPD, sshd, MySQL, Apache и Postfix. Веб-интерфейс будет работать на 2812 порту по HTTPS и отправлять сообщения на root@localhost:

mv /etc/monit/monitrc /etc/monit/monitrc_orig
nano /etc/monit/monitrc


set daemon  60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: monit@server.example.com }
set alert root@localhost
set httpd port 2812 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow admin:test

check process proftpd with pidfile /var/run/proftpd.pid
   start program = "/etc/init.d/proftpd start"
   stop program  = "/etc/init.d/proftpd stop"
   if failed port 21 protocol ftp then restart
   if 5 restarts within 5 cycles then timeout

check process sshd with pidfile /var/run/sshd.pid
   start program  "/etc/init.d/ssh start"
   stop program  "/etc/init.d/ssh stop"
   if failed port 22 protocol ssh then restart
   if 5 restarts within 5 cycles then timeout

check process mysql with pidfile /var/run/mysqld/mysqld.pid
   group database
   start program = "/etc/init.d/mysql start"
   stop program = "/etc/init.d/mysql stop"
   if failed host 127.0.0.1 port 3306 then restart
   if 5 restarts within 5 cycles then timeout

check process apache with pidfile /var/run/apache2.pid
   group www
   start program = "/etc/init.d/apache2 start"
   stop program  = "/etc/init.d/apache2 stop"
   if failed host www.example.com port 80 protocol http
      and request "/monit/token" then restart
   if cpu is greater than 60% for 2 cycles then alert
   if cpu > 80% for 5 cycles then restart
   if totalmem > 500 MB for 5 cycles then restart
   if children > 250 then restart
   if loadavg(5min) greater than 10 for 8 cycles then stop
   if 3 restarts within 5 cycles then timeout

check process postfix with pidfile /var/spool/postfix/pid/master.pid
   group mail
   start program = "/etc/init.d/postfix start"
   stop  program = "/etc/init.d/postfix stop"
   if failed port 25 protocol smtp then restart
   if 5 restarts within 5 cycles then timeout

#check process nginx with pidfile /var/run/nginx.pid
#   start program = "/etc/init.d/nginx start"
#   stop  program = "/etc/init.d/nginx stop"
#   if failed host 127.0.0.1 port 80 then restart
#
#check process memcached with pidfile /var/run/memcached.pid
#   start program = "/etc/init.d/memcached start"
#   stop  program = "/etc/init.d/memcached stop"
#   if failed host 127.0.0.1 port 11211  then restart
#
#check process pureftpd with pidfile /var/run/pure-ftpd/pure-ftpd.pid
#   start program = "/etc/init.d/pure-ftpd-mysql start"
#   stop program  = "/etc/init.d/pure-ftpd-mysql stop"
#   if failed port 21 protocol ftp then restart
#   if 5 restarts within 5 cycles then timeout
#
#check process named with pidfile /var/run/named/named.pid
#   start program = "/etc/init.d/bind9 start"
#   stop program = "/etc/init.d/bind9 stop"
#   if failed host 127.0.0.1 port 53 type tcp protocol dns then restart
#   if failed host 127.0.0.1 port 53 type udp protocol dns then restart
#   if 5 restarts within 5 cycles then timeout
#
#check process ntpd with pidfile /var/run/ntpd.pid
#   start program = "/etc/init.d/ntp start"
#   stop  program = "/etc/init.d/ntp stop"
#   if failed host 127.0.0.1 port 123 type udp then restart
#   if 5 restarts within 5 cycles then timeout
#
#check process mailman with pidfile /var/run/mailman/mailman.pid
#   group mail
#   start program = "/etc/init.d/mailman start"
#   stop  program = "/etc/init.d/mailman stop"
#
#check process amavisd with pidfile /var/run/amavis/amavisd.pid
#   group mail
#   start program = "/etc/init.d/amavis start"
#   stop  program = "/etc/init.d/amavis stop"
#   if failed port 10024 protocol smtp then restart
#   if 5 restarts within 5 cycles then timeout
#
#check process courier-imap with pidfile /var/run/courier/imapd.pid
#   group mail
#   start program = "/etc/init.d/courier-imap start"
#   stop program = "/etc/init.d/courier-imap stop"
#   if failed host localhost port 143 type tcp protocol imap then restart
#   if 5 restarts within 5 cycles then timeout
#
#check process courier-imap-ssl with pidfile /var/run/courier/imapd-ssl.pid
#   group mail
#   start program = "/etc/init.d/courier-imap-ssl start"
#   stop program = "/etc/init.d/courier-imap-ssl stop"
#   if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
#   if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3 with pidfile /var/run/courier/pop3d.pid
#   group mail
#   start program = "/etc/init.d/courier-pop start"
#   stop program = "/etc/init.d/courier-pop stop"
#   if failed host localhost port 110 type tcp protocol pop then restart
#   if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3-ssl with pidfile /var/run/courier/pop3d-ssl.pid
#   group mail
#   start program = "/etc/init.d/courier-pop-ssl start"
#   stop program = "/etc/init.d/courier-pop-ssl stop"
#   if failed host localhost port 995 type tcpssl sslauto protocol pop then restart
#   if 5 restarts within 5 cycles then timeout
#
#check process dovecot with pidfile /var/run/dovecot/master.pid
#   group mail
#   start program = "/etc/init.d/dovecot start"
#   stop program = "/etc/init.d/dovecot stop"
#   if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
#   if 5 restarts within 5 cycles then timeout


Как видно из конфига, в него добавлены еще некоторые примеры настройки, которые в случае необходимости можно раскомментировать. Конфиг не очень простой, поэтому лучше обратиться к официальной документации mmonit.com/monit/documentation/monit.html.

В части для Apache есть следующие строки:

if failed host www.example.com port 80 protocol http
      and request "/monit/token" then restart


Monit будет пытается подключиться к www.example.com на 80 порту смотря файл /monit/token, который у нас находится в /var/www/www.example.com/web. Если это не происходит значит Apache не работает, и Monit его перезапустит. Теперь создадим файл /var/www/www.example.com/web/monit/token, в котором можно написать пару рандомных строк:

mkdir /var/www/www.example.com/web/monit
echo "hello world" > /var/www/www.example.com/web/monit/token


Далее создадим PEM сертификат /var/certs/monit.pem потому что хотим использовать SSL-зашифрованные для веб-интерфейса Monit:

mkdir /var/certs
cd /var/certs


Теперь настроим конфиг monit.cnf:

nano /var/certs/monit.cnf


# create RSA certs - Server

RANDFILE = ./openssl.rnd

[ req ]
default_bits = 2048
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type

[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default = MO

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Monitoring

localityName                    = Locality Name (city)
localityName_default            = Monittown

organizationName                = Organization Name (company)
organizationName_default        = Monit Inc.

organizationalUnitName          = Organizational Unit Name (section)
organizationalUnitName_default  = Dept. of Monitoring Technologies

commonName                      = Common Name (FQDN of your server)
commonName_default              = server.monit.mo

emailAddress                    = Email Address
emailAddress_default            = root@monit.mo

[ cert_type ]
nsCertType = server


Создаем сертификат:

openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem

openssl gendh 512 >> /var/certs/monit.pem

openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem

chmod 700 /var/certs/monit.pem


Далее отредактируем /etc/default/monit поменяв значение startup на 1:

nano /etc/default/monit


# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Stefan Alfredsson <alfs@debian.org>

# You must set this variable to for monit to start
startup=1

# You can change the location of the state file here
# It can also be set in monitrc
# STATEFILE="/var/lib/monit/monit.state"

# To change the intervals which monit should run,
# edit the configuration file /etc/monit/monitrc
# It can no longer be configured here.


Запускаем monit:

/etc/init.d/monit start


Теперь можно зайти на веб-интерфейс по адресу:

https://www.example.com:2812/


Если не заходит нужно проверить не блокируется ли 2812 порт фаерволлом или читать логи. Логин для входа admin, а пароль test (данные указаны в /etc/monit/monitrc).
  • avatar
  • pashtuun
  • 8920
  • +12
  • 19 марта 2012, 14:52

Комментариум (5)

RSS свернуть / развернуть
+
+3
avatar

Sfate

  • 19 марта 2012, 20:16

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
В принципе, довольно сносно.

Но:
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
nano /etc/monit/monitrc

может лучше сразу
mv /etc/monit/monitrc /etc/monit/monitrc_orig
nano /etc/monit/monitrc


+
если, что то редактировать на сервере, то имеет смысл поставить vim =)
+
0
avatar

pashtuun

  • 21 марта 2012, 04:21

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Спасибо заменено

если, что то редактировать на сервере, то имеет смысл поставить vim

Чем nano плох?
+
+3
avatar

Sfate

  • 21 марта 2012, 12:02

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
В принципе для быстрых правок сойдет и nano.
Но vim более гибок и имеет подсветку синтаксиса.
+
+1
avatar

makenskiy

  • 21 марта 2012, 18:29

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
vim хорошая штука, но мне как обычному хаутушнику быстрее nano т.к. конфиги с нуля никогда не писал, подправил там, добавил там. Разве что всякие conky, но это из другой истории.
+
+2
avatar

makenskiy

  • 21 марта 2012, 18:27

  • Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/m/makenskiy/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Как-то поимел небольшой секс с Munin — Munin не пишет статистику с Apache, собственно классный инструмент, а главное простой и мало ест.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.