Folosesc deja de multă vreme Nagios. Nagios este foarte util pentru notificări despre servicii pe diverse servere ce nu funcționează. Poate trimite notificări prin e-mail, SMS(având un SMS gateway conectat), poate vorbi în boxe(prin intermediul festival) sau poate destul de multe notificări.
Însă nagios face doar notificări. Rulează sub un user simplu, pentru anumite comenzi(ce nu pot fi rulat de sub un simplu user) face sudo (cu supraveghere atentă).
Până nu demult aveam întipărită bine în minte ideea că dacă vreau ceva care să verifice starea unui program și să ia măsuri în anumite situații trebuie să fac un script, aveam în cap chiar și un exemplu (de la eggdrop, remember IRC?) care să îl pun să ruleze în cron.
Ieri m-a întrebat despre așa ceva, pe messenger, unul dintre cititorii acestui blog. I-am dat aceleași răspunsuri pe care le-am scris mai sus dar se pare că pe el nu l-a mulțumit. A tot căutat și el pe net până a dat de un tutorial pe care mi l-a pasat.
Software-ul pare a fi unul destul de matur, a ajuns la versiunea a 5-a(În repozitoarele Debian stable sau Ubuntu LTS e la versiunea 4.8.x). Are chiar și o interfață web pe care totuși nu v-aș recomanda să o porniți, iar dacă o porniți să nu o lăsați liberă publicului larg(în primul rând daemonul rulează sub userul root).
Monit este capabil ca în funcție de diverși parametrii ai aplicatiei, cum ar fi memoria RAM utilizată, nivelul de încărcare al procesorului, dispariția activității pe portul TCP sau UDP să ia anumite măsuri, adică să lanseze anumite comenzi de oprire/pornire/repornire a serviciilor sau chiar modificarea permisiunilor asupra fișierelor.
Dar gata cu vorba lungă, care contrar reclamelor de la TV, este sărăcia omului și să ne apucăm de treabă. Începem cu instalarea pachetului. Nu avem de făcut decât să rulăm ca root următoarea comandă:
apt-get install monit
Ce se îtâmplă?:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
monit
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 254kB of archives.
After this operation, 680kB of additional disk space will be used.
Get:1 http://ftp.nb.lug.ro hardy/universe monit 1:4.8.1-2.1 [254kB]
Fetched 254kB in 0s (1966kB/s)
Selecting previously deselected package monit.
(Reading database ... 79286 files and directories currently installed.)
Unpacking monit (from .../monit_1%3a4.8.1-2.1_i386.deb) ...
Setting up monit (1:4.8.1-2.1) ...
Starting daemon monitor: -e monit won't be started/stopped
unless it it's configured
please configure monit and then edit /etc/default/monit
and set the "startup" variable to 1 in order to allow
monit to startEdităm ulterior fișierul /etc/default/monit
startup=1 CHECK_INTERVALS=180
Edităm /etc/monit/monitrc
set alert email@domeniu.ro #adresa de e-mail validă unde se vor trimite notificările include /etc/monit.d/*
Creem directorul /etc/monit.d și creem câte un fișier de configurare pentru diversele servicii ce urmează să le monitorizăm.
mkdir /etc/monit.d cd /etc/monit.d/
Iată câtvea exemple:
apache2:
check process apache2 with pidfile /var/run/apache2.pid
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 1.5 GB for 5 cycles then restart
if children > 50 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
group lampbind9:
check process named with pidfile /var/run/bind/run/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 alert if failed host 127.0.0.1 port 53 type udp protocol dns then alert if 5 restarts within 5 cycles then timeout group dns
dovecot:
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 5 restarts within 5 cycles then timeout if failed port 110 type TCP protocol POP then restart if failed port 143 type TCP protocol IMAP then restart
mysql:
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 1.0 GB for 5 cycles then restart
if children > 50 then restart
if failed host 127.0.0.1 port 3306 protocol mysql then restart
if 5 restarts within 5 cycles then timeout
if loadavg(5min) greater than 10 for 8 cycles then stop
group lamppostfix:
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
proftpd:
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 group lamp
ssh:
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
group sshwebmin:
check process webmin with pidfile /var/webmin/miniserv.pid group webmin start program = "/etc/init.d/webmin start" stop program = "/etc/init.d/webmin stop" if failed host 127.0.0.1 port 8080 then restart if 5 restarts within 5 cycles then timeout check file webmin_rc with path /etc/init.d/webmin group webmin if failed checksum then unmonitor if failed permission 755 then unmonitor if failed uid root then unmonitor if failed gid root then unmonitor
În final pornim serviciul de monitorizare
/etc/init.d/monit start Starting daemon monitor: monit.
E bun. Il folosesc de ceva vreme pe serverele de hosting. Sistemul de monitorizare din cPanel nu prea ma multumeste. E bun, dar monit il completeaza destul de bine prin posibilitatea de a monitoriza diferiti parametri, cum ar fi incarcarea generala. De vreo jumatate de an am pus pe un server monit care schimba cu renice prioritatea tuturor proceselor apache cand incarcarea serverului e mai mare de 5. Functioneaza impecabil
.-= Agkelos a scris pe blog ultima dată Conexiune securizata pentru orice aplicatie cu SSH =-.
Vad cum acest program ar fi foarte util in cazul homeuserilor sau serverelor cu putini useri dar nu cred ca ar fi indicat sa se foloseasca pe un server web ce gazduieste de exemplu mii de siteuri. Un restart de apache desi nu ar dura asa mult ar putea cauza multe complainturi. Da, chiar si pentru cateva secunde de down time. In orice caz, m-am uitat si eu sa vad mai multe despre monit si pare foarte util in rest.
@mutari Tocmai din cauză că e foarte flexibil poți să scoți acele opțiuni în care să închidă serverul web sau să mărești timpul, adică dacă e supra-solicitat mai mult de o jumătate de oră de exemplu. Tocmai pe serverele cu trafic mare e indicat să detecezi că serverul web nu rulează și să-l pornești.
@Agkelos Eu folosesc virtualmin, și acesta are opțiune de repornire automată a serviciilor însă serviciul de colectare a informațiilor consumă foarte multe resurse(verifică prea multe informații, inclusiv că vhost-urile sunt corecte) și atunci nu e fiabil. Monit a venit ca o soluție foarte bună.
E foarte bun,il folosesc si eu de ceva timp,insa ma nemultumeste sistemul de monitorizare,e slab.
O sa incerc si eu programul, nu te lasa indus in eroare de nickname.
Vad ca folosesti Debian. Ubuntu cumva?!
Și în Debian Lenny și în Ubuntu Hardy(adică 8.04 LTS) sunt exact aceleași căi, adică monit se configurează exact la fel.
am facut exact cum zice in tutorial.. In /etc/default/monit zice sa configurez CHECK_INTERVALS=180 in /etc/monit/monitrc si acolo nu gasesc asa ceva. cand dau sa pornesc zice : Starting daemon monitor: empty config, please edit /etc/monit/monitrc. .. deci ma poate ajuta si pe mine cineva ?
:~# grep interval /etc/monit/monitrc
# set daemon 120 # check services at 2-minute intervals