Appearance
Использование Monit
Monit — это мощная утилита для мониторинга и управления процессами, программами, файлами, директориями и файловыми системами в Unix-системах. Monit автоматически выполняет техническое обслуживание и восстановление, а также может выполнять осмысленные действия в случае ошибок.
Основные возможности
1. Мониторинг процессов
- Автоматический запуск остановленных процессов
- Перезапуск неотвечающих процессов
- Остановка процессов, использующих слишком много ресурсов
- Мониторинг характеристик процессов (память, CPU)
2. Мониторинг файлов и директорий
- Отслеживание изменений файлов (время, контрольные суммы, размер)
- Мониторинг файловых систем
- Проверка прав доступа и владельцев файлов
3. Сетевой мониторинг
- Проверка TCP, UDP и Unix Domain Socket соединений
- Встроенные тесты для основных интернет-протоколов
- SSL/TLS поддержка для безопасных соединений
4. Системный мониторинг
- Общее использование CPU, памяти и загрузки системы
- Мониторинг дискового пространства
- Проверка сетевых интерфейсов
Установка Monit
Ubuntu/Debian
bash
# Установка из официального репозитория
sudo apt update
sudo apt install monit
# Проверка установки
monit -VCentOS/RHEL/Fedora
bash
# Установка EPEL репозитория
sudo yum install epel-release
# Установка Monit
sudo yum install monit
# Или для Fedora
sudo dnf install monitКомпиляция из исходного кода
bash
# Установка зависимостей
sudo apt install build-essential libssl-dev libpam0g-dev
# Скачивание и компиляция
wget https://mmonit.com/monit/dist/monit-5.35.2.tar.gz
tar -xzf monit-5.35.2.tar.gz
cd monit-5.35.2
# Конфигурация и компиляция
./configure --prefix=/usr/local
make
sudo make installПроверка установки
bash
# Проверка версии
monit -V
# Проверка синтаксиса конфигурации
monit -t
# Запуск в режиме отладки
monit -IvБазовая конфигурация
Создание основного файла конфигурации
bash
# Создание директории для конфигурации
sudo mkdir -p /etc/monit/conf.d
# Создание основного файла конфигурации
sudo nano /etc/monit/monitrcБазовая структура конфигурации
bash
# /etc/monit/monitrc
# Глобальные настройки
set daemon 30 # Проверка каждые 30 секунд
set logfile /var/log/monit.log # Лог файл
set idfile /var/lib/monit/id # ID файл
set statefile /var/lib/monit/state # Файл состояния
# Настройки HTTP интерфейса
set httpd port 2812 and
use address localhost # Только локальные подключения
allow localhost # Разрешить только localhost
allow admin:monit # Пользователь:пароль
# Настройки уведомлений
set mailserver localhost
set mail-format {
from: monit@$HOST
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}
# Получатель уведомлений
set alert admin@example.com
# Включение дополнительных конфигураций
include /etc/monit/conf.d/*Мониторинг процессов
Базовый мониторинг процесса
bash
# /etc/monit/conf.d/nginx.conf
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 port 80 then restart
if 3 restarts within 5 cycles then timeoutМониторинг с проверкой ресурсов
bash
# /etc/monit/conf.d/apache.conf
check process apache with pidfile /var/run/apache2/apache2.pid
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed host localhost port 80 protocol http
and request "/server-status" with timeout 10 seconds
then restart
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if memory > 500 MB for 5 cycles then restart
if 3 restarts within 5 cycles then timeoutМониторинг MySQL
bash
# /etc/monit/conf.d/mysql.conf
check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host localhost port 3306 protocol mysql
with timeout 15 seconds
then restart
if failed unixsocket /var/run/mysqld/mysqld.sock
then restart
if cpu > 80% for 2 cycles then alert
if memory > 1024 MB for 5 cycles then restart
if 3 restarts within 5 cycles then timeoutМониторинг файлов и директорий
Мониторинг файлов конфигурации
bash
# /etc/monit/conf.d/config-files.conf
check file nginx_config with path /etc/nginx/nginx.conf
if changed checksum then alert
if changed timestamp then alert
if failed permission 644 then alert
if failed uid root then alert
if failed gid root then alertМониторинг лог файлов
bash
# /etc/monit/conf.d/log-files.conf
check file apache_error_log with path /var/log/apache2/error.log
if size > 100 MB then exec "/usr/bin/truncate -s 0 /var/log/apache2/error.log"
if changed timestamp then alertМониторинг директорий
bash
# /etc/monit/conf.d/directories.conf
check directory web_root with path /var/www/html
if failed permission 755 then alert
if failed uid www-data then alert
if failed gid www-data then alertМониторинг файловых систем
Мониторинг дискового пространства
bash
# /etc/monit/conf.d/filesystem.conf
check filesystem rootfs with path /
if space usage > 80% for 5 cycles then alert
if space usage > 90% for 2 cycles then alert
if inode usage > 80% for 5 cycles then alert
if inode usage > 90% for 2 cycles then alert
check filesystem var with path /var
if space usage > 80% for 5 cycles then alert
if space usage > 90% for 2 cycles then alertМониторинг с действиями
bash
# /etc/monit/conf.d/disk-cleanup.conf
check filesystem tmp with path /tmp
if space usage > 80% for 2 cycles then exec "/usr/bin/find /tmp -type f -mtime +7 -delete"
if space usage > 90% for 1 cycle then exec "/usr/bin/find /tmp -type f -delete"Сетевой мониторинг
Мониторинг HTTP сервисов
bash
# /etc/monit/conf.d/http-services.conf
check host website with address example.com
if failed port 80 protocol http
and request "/" with timeout 10 seconds
then alert
check host secure_website with address secure.example.com
if failed port 443 protocol https
and request "/" with timeout 10 seconds
then alertМониторинг с аутентификацией
bash
# /etc/monit/conf.d/authenticated-service.conf
check host api_server with address api.example.com
if failed port 443 protocol https
and request "/health" with timeout 10 seconds
and header "Authorization: Bearer your-token-here"
then alertМониторинг SMTP
bash
# /etc/monit/conf.d/smtp.conf
check host mail_server with address mail.example.com
if failed port 25 protocol smtp
with timeout 15 seconds
then alertСистемный мониторинг
Мониторинг системных ресурсов
bash
# /etc/monit/conf.d/system.conf
check system $HOST
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 80% for 4 cycles then alert
if swap usage > 20% for 4 cycles then alert
if cpu usage (user) > 80% for 2 cycles then alert
if cpu usage (system) > 80% for 2 cycles then alertМониторинг сетевых интерфейсов
bash
# /etc/monit/conf.d/network.conf
check network eth0 with interface eth0
if failed link then alert
if changed link then alert
if saturation > 90% then alert
if download > 10 MB/s for 5 cycles then alert
if upload > 10 MB/s for 5 cycles then alertПродвинутые настройки
Группировка сервисов
bash
# /etc/monit/conf.d/web-services.conf
check process nginx with pidfile /var/run/nginx.pid
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
group web
check process apache with pidfile /var/run/apache2/apache2.pid
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
group web
check process php-fpm with pidfile /var/run/php/php8.1-fpm.pid
start program = "/etc/init.d/php8.1-fpm start"
stop program = "/etc/init.d/php8.1-fpm stop"
group webЗависимости между сервисами
bash
# /etc/monit/conf.d/dependencies.conf
check process database with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed port 3306 then restart
check process webapp with pidfile /var/run/webapp.pid
start program = "/etc/init.d/webapp start"
stop program = "/etc/init.d/webapp stop"
depends on database
if failed port 8080 then restartНастройка уведомлений
bash
# /etc/monit/conf.d/notifications.conf
# Настройка почтового сервера
set mailserver smtp.gmail.com port 587
username "monit@example.com"
password "your-password"
using tlsv12
# Настройка формата уведомлений
set mail-format {
from: monit@$HOST
subject: [$SERVICE] $EVENT - $HOST
message:
Service: $SERVICE
Event: $EVENT
Action: $ACTION
Description: $DESCRIPTION
Date: $DATE
Host: $HOST
}
# Получатели уведомлений
set alert admin@example.com
set alert ops@example.comМониторинг программ и скриптов
Мониторинг пользовательских скриптов
bash
# /etc/monit/conf.d/scripts.conf
check program backup_script with path "/usr/local/bin/backup.sh"
if status != 0 then alert
if 3 restarts within 5 cycles then timeout
check program log_cleanup with path "/usr/local/bin/cleanup.sh"
if status != 0 then alert
every 24 cycles # Запуск каждые 24 цикла (12 часов при 30-секундном интервале)Мониторинг с проверкой вывода
bash
# /etc/monit/conf.d/output-check.conf
check program health_check with path "/usr/local/bin/health_check.sh"
if status != 0 then alert
if output match "ERROR" then alert
if output match "CRITICAL" then alertБезопасность и аутентификация
Настройка HTTP аутентификации
bash
# /etc/monit/monitrc
set httpd port 2812 and
use address 0.0.0.0
allow admin:monit
allow readonly:readonly
allow 192.168.1.0/24
allow 10.0.0.0/8SSL настройки
bash
# /etc/monit/monitrc
set httpd port 2812 and
ssl enable
pemfile /etc/ssl/certs/monit.pem
allow admin:monitАвтоматизация и скрипты
Скрипт управления Monit
bash
#!/bin/bash
# monit_manager.sh
case "$1" in
start)
echo "Запуск Monit..."
monit
;;
stop)
echo "Остановка Monit..."
monit quit
;;
restart)
echo "Перезапуск Monit..."
monit quit
sleep 2
monit
;;
reload)
echo "Перезагрузка конфигурации..."
monit reload
;;
status)
echo "Статус сервисов:"
monit status
;;
summary)
echo "Сводка сервисов:"
monit summary
;;
*)
echo "Использование: $0 {start|stop|restart|reload|status|summary}"
exit 1
;;
esacСкрипт мониторинга состояния
bash
#!/bin/bash
# monit_health_check.sh
# Проверка статуса Monit
if ! pgrep -x "monit" > /dev/null; then
echo "Monit не запущен!"
exit 1
fi
# Проверка конфигурации
if ! monit -t; then
echo "Ошибка в конфигурации Monit!"
exit 1
fi
# Получение статуса сервисов
monit status | grep -E "(Process|File|Directory|Filesystem)" | while read line; do
if echo "$line" | grep -q "Not monitored\|Failing"; then
echo "Проблема с сервисом: $line"
fi
doneМониторинг и логирование
Настройка детального логирования
bash
# /etc/monit/monitrc
set logfile /var/log/monit.log
set logfile /var/log/monit.log size 1MB count 5
set daemon 30
set log syslog facility log_daemonРотация логов
bash
# /etc/logrotate.d/monit
/var/log/monit.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644 root root
postrotate
/bin/kill -USR1 `cat /var/run/monit.pid 2> /dev/null` 2> /dev/null || true
endscript
}Troubleshooting
Диагностика проблем
bash
# Проверка конфигурации
monit -t
# Запуск в режиме отладки
monit -Iv
# Проверка статуса сервисов
monit status
# Проверка логов
tail -f /var/log/monit.log
# Проверка процессов
ps aux | grep monitЧастые проблемы и решения
Проблема: Monit не запускается
bash
# Проверка прав доступа к файлам
sudo chown root:root /etc/monit/monitrc
sudo chmod 600 /etc/monit/monitrc
# Проверка синтаксиса
monit -t
# Проверка логов
journalctl -u monitПроблема: Сервисы не перезапускаются
bash
# Проверка прав на выполнение скриптов
sudo chmod +x /etc/init.d/nginx
sudo chmod +x /etc/init.d/apache2
# Проверка PID файлов
ls -la /var/run/nginx.pid
ls -la /var/run/apache2/apache2.pidЛучшие практики
1. Организация конфигурации
bash
# Структура конфигурации
/etc/monit/
├── monitrc # Основной файл
├── conf.d/ # Дополнительные конфигурации
│ ├── system.conf # Системные сервисы
│ ├── web.conf # Веб-сервисы
│ ├── database.conf # Базы данных
│ └── custom.conf # Пользовательские сервисы
└── scripts/ # Скрипты для действий2. Мониторинг критических сервисов
bash
# Приоритетные сервисы
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 then restart
if 3 restarts within 5 cycles then timeout3. Регулярное обслуживание
bash
# Еженедельная проверка конфигурации
#!/bin/bash
monit -t > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Ошибка в конфигурации Monit" | mail -s "Monit Config Error" admin@example.com
fiЗаключение
Monit предоставляет мощные возможности для мониторинга и автоматического восстановления сервисов в Linux системах. Правильная настройка и регулярное обслуживание обеспечивают высокую доступность и стабильность системы.
Ключевые преимущества:
- Автоматическое восстановление сервисов
- Гибкая конфигурация через простой синтаксис
- Веб-интерфейс для мониторинга
- Мощные уведомления и алерты
- Минимальное потребление ресурсов
Для получения дополнительной информации обратитесь к официальной документации Monit.