서버 모니터링 · 5 min read · Oct 16, 2025

Debian Wheezy에서 munin 및 monit로 서버 모니터링 - 페이지 2

4 monit 설치 및 구성

monit을 설치하려면, 다음과 같이 합니다:

apt-get install monit

이제 /etc/monit/monitrc를 편집해야 합니다. 기본 /etc/monit/monitrc에는 많은 예제가 있으며, http://mmonit.com/monit/documentation/ 에서 더 많은 구성 예제를 찾을 수 있습니다. 그러나 제 경우에는 proftpd, sshd, mysql, apache 및 postfix를 모니터링하고 싶고, 포트 2812에서 monit 웹 인터페이스를 활성화하고 싶으며, https 웹 인터페이스를 원하고, 사용자 이름 admin과 비밀번호 test로 웹 인터페이스에 로그인하고 싶으며, monit이 root@localhost로 이메일 알림을 보내도록 하고 싶습니다. 그래서 제 파일은 다음과 같습니다(다른 데몬에 대한 예제를 구성에 추가하여 파일을 필요에 맞게 조정할 수 있습니다):

cp /etc/monit/monitrc /etc/monit/monitrc_orig  
cat /dev/null > /etc/monit/monitrc  
vi /etc/monit/monitrc

| set 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: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 |

구성 파일은 상당히 자명합니다. 옵션에 대해 확실하지 않은 경우 monit 문서를 참조하십시오: http://mmonit.com/monit/documentation/monit.html

monit 구성의 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/monit/token입니다. 웹 사이트의 문서 루트가 /var/www/www.example.com/web이기 때문입니다. monit가 성공하지 못하면 Apache가 실행되고 있지 않다는 의미이며, monit는 이를 재시작할 것입니다. 이제 /var/www/www.example.com/web/monit/token 파일을 생성하고 그 안에 무작위 문자열을 작성해야 합니다:

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

다음으로 SSL 암호화된 monit 웹 인터페이스에 필요한 pem 인증서(/var/certs/monit.pem)를 생성합니다:

mkdir /var/certs  
cd /var/certs

인증서를 생성하기 위해 OpenSSL 구성 파일이 필요합니다. 다음과 같이 작성할 수 있습니다:

vi /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 = 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.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

마지막으로 monit를 시작할 수 있습니다:

/etc/init.d/monit start

이제 브라우저를 https://www.example.com:2812/로 이동시키십시오(포트 2812가 방화벽에 의해 차단되지 않았는지 확인하십시오), admin과 test로 로그인하면 monit 웹 인터페이스를 볼 수 있습니다. 다음과 같아야 합니다:

(메인 화면)

(Apache 상태 페이지)

/etc/monit/monitrc의 구성에 따라 monit는 서비스가 실패할 경우 이를 재시작하고 서비스의 프로세스 ID가 변경될 경우 알림 이메일을 보냅니다.

즐기세요!

5 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.