1. Pure-Ftpd-Mysql
На одном из серверов хостинга у меня возникла проблема падения pure-ftpd-mysql. Причина по которой он не работал отловить было сложно, т.к. по не понятным причинам лог /var/log/messages был отключен. Хотя параметр логирования был включен в настройках командой:
echo 'yes' > /etc/pure-ftpd/conf/VerboseLog
Поэтому было принято решение установить Monit, для мониторинга pure-ftpd-mysql на 21 порту, потому-что более быстрого решения мониторинга через Cacti я не нашел.
2. Установка monit на ubuntu, debian
В Debian для установки Monit выполняем:
apt-get install monit
В дефолтном конфиге /etc/monit/monitrc есть много примеров, а также можно обратиться к странице с документацией mmonit.com/monit/documentation/. Тем не менее, ниже показана настройка для ProFTPD, sshd, MySQL, Apache и Postfix. Веб-интерфейс будет работать на 2812 порту по HTTPS и отправлять сообщения на root@localhost:
3. Конфигурация Monit
Сделаем бекап стандартного конфига и отредактируем конфиг
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 > 2000 MB for 5 cycles then restart if children > 2000 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
4. SSL веб-интерфейс Monit
Внимание! В своей конфигурации я не использую SSL, но вы можете ее включить, убрав комментарий у опций:
SSL ENABLE PEMFILE /var/certs/monit.pem
Далее создадим 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
5. Автозапуск Monit
Далее отредактируем /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.
6. Запуск Monit
Запускаем monit:
/etc/init.d/monit start
7. Веб-интерфейс Monit
Теперь можно зайти на веб-интерфейс по адресу:
https://www.example.com:2812/
Если не заходит нужно проверить не блокируется ли 2812 порт фаерволлом или читать логи. Логин для входа admin, а пароль test (данные указаны в /etc/monit/monitrc).
После установки и настройки, я смог увидеть довольно информативную информацию на странице мониторинга pure-ftpd-mysql
При написании использовался сайт: via
Просмотров: 2613