Мониторинг серверов · 11 min read · Oct 15, 2025
Мониторинг сервера с помощью Munin и Monit на Debian 10

В этой статье я описываю, как вы можете мониторить свой сервер Debian 10 (Buster) с помощью Munin и Monit. Munin генерирует симпатичные графики почти по каждому аспекту вашего сервера (средняя нагрузка, использование памяти, использование CPU, пропускная способность MySQL, сетевой трафик и т.д.) без особой настройки, в то время как Monit проверяет доступность таких сервисов, как Apache, MySQL, Postfix и принимает соответствующие меры, такие как перезапуск, если обнаруживает, что сервис работает не так, как ожидалось. Сочетание двух дает вам полный мониторинг: графики, которые позволяют вам видеть текущие или надвигающиеся проблемы (например, “Нам скоро нужен более мощный сервер, наша средняя нагрузка быстро растет.”), и сторожевой таймер, который обеспечивает доступность контролируемых сервисов.
Хотя вы можете мониторить более одного сервера с помощью Munin, здесь мы обсудим только мониторинг системы, на которой он установлен.
Этот гид был написан для Debian 10 (Buster), но конфигурация также должна применяться к другим дистрибутивам, таким как Ubuntu, с незначительными изменениями.
1 Предварительная заметка
Все команды в этом руководстве выполняются от имени пользователя root. Войдите на свой сервер как root по SSH или откройте терминал. Если вы вошли как другой пользователь, отличающийся от root, используйте команду
su -чтобы стать пользователем root, прежде чем продолжить.
Имя хоста нашей системы - server1.example.com, и у нас есть веб-сайт www.example.com с корнем документа /var/www/www.example.com/web.
Убедитесь, что система обновлена, прежде чем начинать установку Munin, выполните:
apt update
apt upgradeApache используется для отображения страниц Munin, модуль apache fcgid необходим для функции увеличения графиков Munin. Установите apache и модуль fcgid с помощью apt.
apt install apache2 libcgi-fast-perl libapache2-mod-fcgidВключите модуль fcgid в apache.
a2enmod fcgid2 Установка и настройка Munin
Чтобы установить Munin на Debian, делаем следующее:
apt install munin munin-node munin-plugins-extraКогда сервер работает с MySQL или MariaDB, то включите несколько дополнительных плагинов Munin для мониторинга MySQL:
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/mysql_ mysql_
ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes
ln -s /usr/share/munin/plugins/mysql_innodb mysql_innodb
ln -s /usr/share/munin/plugins/mysql_isam_space_ mysql_isam_space_
ln -s /usr/share/munin/plugins/mysql_queries mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads mysql_threadsДалее, мы должны отредактировать файл конфигурации Munin /etc/munin/munin.conf. Раскомментируйте строки dbdir, htmldir, logdir, rundir и tmpldir (значения по умолчанию подходят). Мы хотим, чтобы Munin использовал имя server1.example.com вместо localhost.localdomain в HTML-выводе, поэтому мы заменяем localhost.localdomain на server1.example.com в разделе простого дерева хостов. Без комментариев измененный файл выглядит так:
nano /etc/munin/munin.conf# Пример файла конфигурации для Munin, сгенерированный с помощью 'make build'
# Следующие три переменные указывают, где находятся RRD
# базы данных, HTML-вывод, логи и файлы блокировок/pid. Все они
# должны быть записываемыми пользователем, запускающим munin-cron. Все они
# по умолчанию имеют значения, которые вы видите здесь.
#
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin
# Где искать HTML-шаблоны
#
tmpldir /etc/munin/templates
# Где искать статические www файлы
#
#staticdir /etc/munin/static
# временные cgi файлы находятся здесь. обратите внимание, что они должны быть записываемыми
# пользователем cgi (обычно nobody или httpd).
#
# cgitmpdir /var/lib/munin/cgi-tmp
# (Точно один) каталог для включения всех файлов.
includedir /etc/munin/munin-conf.d
[...]
# простое дерево хостов
[server1.example.com]
address 127.0.0.1
use_node_name yes
[...] Мы должны найти файл конфигурации Apache 2.4 для Munin /etc/munin/apache24.conf - он определяет псевдоним, называемый munin, для HTML-выходного каталога Munin /var/cache/munin/www, что означает, что мы можем получить доступ к munin со всех веб-сайтов на этом сервере, используя относительный путь /munin (например, http://www.example.com/munin).
Конфигурация apache Munin по умолчанию не включена, это было изменено с DebianWheezy на Jessie. Новый каталог конфигурации - /etc/apache2/conf-enabled вместо /etc/apache2/conf.d, который использовался в более старых версиях, таких как Wheezy и Squeeze.
Выполните эти команды, чтобы включить и загрузить конфигурацию в apache.
cd /etc/apache2/conf-enabled/
ln -s /etc/munin/apache24.conf munin.conf
service apache2 restartУбедитесь, что вы закомментировали строку Require local и добавили вместо этого Require all granted и Options FollowSymLinks SymLinksIfOwnerMatch (в противном случае вы сможете получить доступ к выходным данным Munin только с localhost):
nano /etc/munin/apache24.confAlias /munin /var/cache/munin/www
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
SetHandler fcgid-script
SetHandler cgi-script
Перезапустите Apache:
systemctl restart apache2.serviceЗатем перезапустите Munin:
systemctl restart munin-node.serviceТеперь подождите несколько минут, чтобы Munin мог произвести свой первый вывод, а затем перейдите по адресу http://www.example.com/munin/ в вашем браузере, и вы увидите первые статистические данные:

(Это всего лишь небольшой фрагмент множества графиков, которые генерирует munin…)
3 Защита выходного каталога Munin паролем (необязательно, но настоятельно рекомендуется)
Теперь хорошей идеей будет защитить выходной каталог munin паролем, если вы не хотите, чтобы каждый мог видеть каждую мелкую статистику о вашем сервере.
Для этого мы должны создать файл паролей /etc/munin/munin-htpasswd. Мы хотим войти с именем пользователя admin, поэтому делаем это:
htpasswd -c /etc/munin/munin-htpasswd adminВведите пароль для admin. Затем снова откройте /etc/munin/apache24.conf…
nano /etc/munin/apache24.conf… закомментируйте “Require all granted” и добавьте строки, которые я отметил красным:
Alias /munin /var/cache/munin/www
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
Options None
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
SetHandler fcgid-script
SetHandler cgi-script
Затем перезапустите Apache:
systemctl restart apache2.service4 Включение дополнительных модулей в Munin
Команда Munin “munin-node-configure –suggest” может быть использована для получения рекомендаций по дополнительным модулям Munin, которые могут быть включены на сервере. Выполните:
munin-node-configure --suggestВывод должен быть похож на это:

Столбец “used” показывает, включен ли модуль, столбец “Suggestions” показывает, работает ли на сервере сервис, который может быть мониторирован этим модулем. Создайте символическую ссылку для модуля в /etc/munin/plugins, чтобы включить его.
Здесь я, например, включу модули apache_*:
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volumeПерезапустите Munin, чтобы загрузить новую конфигурацию.
systemctl restart munin-node.service5 Установка и настройка Monit
Monit доступен из репозитория backports Debian Buster. Этот репозиторий не включен по умолчанию, поэтому сначала мы должны добавить его. Выполните эту команду:
echo 'deb http://ftp.de.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.listи затем обновите списки пакетов с:
apt updateЧтобы установить Monit, делаем следующее:
apt install monitТеперь мы должны отредактировать /etc/monit/monitrc. По умолчанию /etc/monit/monitrc имеет много примеров, и вы можете найти больше примеров конфигурации на http://mmonit.com/monit/documentation/. Однако в моем случае я хочу мониторить proftpd, sshd, mysql, apache и postfix, я хочу включить веб-интерфейс Monit на порту 2812, я хочу https веб-интерфейс, я хочу войти в веб-интерфейс с именем пользователя admin и паролем howtoforge, и я хочу, чтобы Monit отправлял уведомления по электронной почте на root@localhost, так что мой файл выглядит так (я добавил примеры для других демонов в конфигурацию, чтобы вы могли настроить файл под свои нужды):
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
nano /etc/monit/monitrcset daemon 60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert root@localhost
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:howtoforge
check process sshd with pidfile /var/run/sshd.pid
start program "/usr/sbin/service ssh start"
stop program "/usr/sbin/service ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
check process apache with pidfile /var/run/apache2/apache2.pid
group www
start program = "/usr/sbin/service apache2 start"
stop program = "/usr/sbin/service apache2 stop"
if failed host localhost 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
# ---------------------------------------------------------------------------------------------
# ЗАМЕТКА: Замените example.pid на имя pid вашего сервера, имя зависит от имени хоста
# ---------------------------------------------------------------------------------------------
#check process mysql with pidfile /var/lib/mysql/example.pid
# group database
# start program = "/usr/sbin/service mysql start"
# stop program = "/usr/sbin/service mysql stop"
# if failed host 127.0.0.1 port 3306 then restart
# if 5 restarts within 5 cycles then timeout
#check process proftpd with pidfile /var/run/proftpd.pid
# start program = "/usr/sbin/service proftpd start"
# stop program = "/usr/sbin/service proftpd stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process postfix with pidfile /var/spool/postfix/pid/master.pid
# group mail
# start program = "/usr/sbin/service postfix start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service nginx start"
# stop program = "/usr/sbin/service nginx stop"
# if failed host 127.0.0.1 port 80 then restart
#
#check process memcached with pidfile /var/run/memcached.pid
# start program = "/usr/sbin/service memcached start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service pure-ftpd-mysql start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service bind9 start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service ntp start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service mailman start"
# stop program = "/usr/sbin/service mailman stop"
#
#check process amavisd with pidfile /var/run/amavis/amavisd.pid
# group mail
# start program = "/usr/sbin/service amavis start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service courier-imap start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service courier-imap-ssl start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service courier-pop start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service courier-pop-ssl start"
# stop program = "/usr/sbin/service 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 = "/usr/sbin/service dovecot start"
# stop program = "/usr/sbin/service dovecot stop"
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
# if 5 restarts within 5 cycles then timeoutКонфигурационный файл довольно самодостаточен; если вы не уверены в каком-либо параметре, посмотрите документацию Monit: http://mmonit.com/monit/documentation/monit.html
В части конфигурации apache Monit вы найдете это:
if failed host localhost port 80 protocol http
and request "/monit/token" then restartчто означает, что Monit пытается подключиться к localhost на порту 80 и пытается получить доступ к файлу /monit/token, который является /var/www/html/monit/token, потому что корень документа нашего веб-сайта - /var/www/html. Если Monit не удается, это означает, что Apache не работает, и Monit собирается его перезапустить. Теперь мы должны создать файл /var/www/html/monit/token и записать в него какую-то случайную строку:
mkdir /var/www/html/monit
echo "hello" > /var/www/html/monit/tokenЗатем мы создаем pem сертификат (/var/certs/monit.pem), который нам нужен для SSL-зашифрованного веб-интерфейса Monit:
mkdir /var/certs
cd /var/certsНам нужен файл конфигурации OpenSSL для создания нашего сертификата. Он может выглядеть так:
nano /var/certs/monit.cnf# создать RSA сертификаты - Сервер
[ 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 = Monitoria
localityName = Locality Name (eg, city)
localityName_default = Monittown
organizationName = Organization Name (eg, company)
organizationName_default = Monit Inc.
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Dept. of Monitoring Technologies
commonName = Common Name (FQDN of your server)
commonName_default = server.monit.mo
emailAddress = Email Address
emailAddress_default = [email protected]
[ cert_type ]
nsCertType = serverТеперь мы создаем сертификат следующим образом:
openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pemopenssl dhparam 2048 >> /var/certs/monit.pemopenssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pemchmod 600 /var/certs/monit.pemНаконец, мы можем запустить Monit:
service monit restartТеперь укажите браузер на https://www.example.com:2812/ (убедитесь, что порт 2812 не заблокирован вашим файрволом), войдите с именем admin и паролем howtoforge, и вы должны увидеть веб-интерфейс Monit. Он должен выглядеть так:

(Главный экран)


(Страница состояния SSHd)
В зависимости от вашей конфигурации в /etc/monit/monitrc monit будет перезапускать ваши сервисы, если они выйдут из строя, и отправлять уведомления по электронной почте, если идентификаторы процессов сервисов изменятся и т.д.
Чтобы получить статус Monit в оболочке, выполните команду “monit status”:
monit statusКоманда покажет статус всех контролируемых сервисов.

6 Ссылки
- munin: http://munin-monitoring.org/
- monit: http://mmonit.com/monit/
Get new posts in your inbox
No spam. Unsubscribe anytime.