Cum sa monitorizezi un site (pe care-l administrezi)

Scriu acest articol mai mult pentru mine, pentru ca sa nu uit ce am facut.

Sa zicem ca administram site-ul http://www.exemplu.com . Si ne trebuie sa fim alertati prin email atunci cand acest site nu functioneaza cum trebuie, sau nu se incarca, ori se incarca cu erori.

Ce solutii avem? Una ar fi Nagios, o platforma de monitorizare foarte buna. Nagios are incluse pluginuri cum ar fi check_http, sau check_mysql, e un instrument foarte bun pentru cineva care trebuie sa monitorizeze unul sau mai multe servere. Dar are si anumite dezavantaje, unul ar fi acela ca se instaleaza si configureaza relativ greu pentru cineva care nu cunoaste macar un limbaj de programare (cazul meu). Avantajul este ca necesita foarte buna organizare din partea persoanei care configureaza (te obliga sa fii organizat). Dar Nagios nu ofera pluginuri care sa-ti arate daca o pagina se incarca normal, fara erori, ci doar iti arata ca serverul http functioneaza bine.

E drept ca cine se pricepe poate scrie un plugin pentru aceasta misiune, asa un plugin ar avea succes pe Nagios Exchange http://www.nagiosexchange.org/ .

Eu am ales o solutie mai simpla, care isi face treaba la moment. Am incercat si merge.

Eu am pornit de la ideea ca daca o pagina nu se incarca, apache-ul genereaza erori. Prin urmare trebuie de configurat o programa care sa verifice ultimele schimbari din logul cu errori de la apache, si sa le trimita pe email.

Din fericire, este asa o programa, se cheama Logcheck. Eu o folosesc pentru ca sa scaneze logurile de sistem, si sa-mi trimita un rezumat odata la jumate de ora pe email. Vreau sa spun ca-s foarte multumit de acest program, pentru ca nu trebuie sa deschid manual logurile, sa vad de unde m-am oprit data trecuta, si sa trec cu privirea prin o gramada de mesaje nesemnificative ca sa vad ceva ce prezinta pericol (un eventual atac). Logcheck vine impreuna cu alt program, Logtail, care verifica modificarile de la ultima verificare. In functie de anumite cuvinte cheie (fisierele cu cuvinte cheie pot fi modificate, dar eu le-am lasat asa, caci sunt satisfacut), logcheck iti trimite pe email intrarile neobisnuite sau care prezinta pericol (asta daca este configurat serverul de posta, eu folosesc exim4, care-i usor de configurat).

1. Instalarea Logcheck-ului:

Pe server, executam urmatoarele comenzi:

# cd /usr/local/src

# mkdir logcheck

#cd logcheck

# wget http://heanet.dl.sourceforge.net/sourceforge/logcheck/logcheck-1.1.1.tar.gz

# tar xvzf logcheck-1.1.1.tar.gz

# cd logcheck-1.1.1

Cititi bine fisierele README si INSTALL, ca sa intelegeti despre ce merge vorba. In functie de sistemul vostru, tastati:

# make Linux

(nu mai tin minte daca cu L mare sau mic), se poate de facut doar make, si apoi manual de editat scripturile.

Daca va intreaba unde vreti sa instalati (/usr/local/etc), spuneti ca acolo vreti, adica in /usr/local/etc.

Acum trebuie de editat scriptul sa verifice logurile care trebuie. Pentru asta folositi comanda:

# vim /usr/local/etc/logcheck.sh

(sau daca nu cunoasteti vim):

# nano /usr/local/etc/logcheck.sh

(apropo, ca sa iesiti din vim trebuie sa tastati Esc, dupa care „:q!” si Enter)

cautati sectia care suna in felul urmator:

# Linux Red Hat Version 3.x, 4.x
$LOGTAIL /var/log/syslog > $TMPDIR/check.$$
$LOGTAIL /var/log/auth.log >> $TMPDIR/check.$$
$LOGTAIL /var/log/fail2ban.log >> $TMPDIR/check.$$

Decomentati ce va trebuie, comentati ce nu va trebuie, editati calea spre logurile importante (in Debian precis trebuie editare, ceea ce vedeti mai sus este calea spre /var/log/syslog, in default era altceva). Eu am adaugat si logul de la fail2ban, imi place sa vad cine este banat atunci cand incearca sa-mi sparga computerul prin forta bruta.

Daca vreti ca logurile de sistem sa fie verificate impreuna cu acelea de la apache, adaugati o linie care arata cam asa:

$LOGTAIL /var/log/apache2/error.log >> $TMPDIR/check.$$

Daca vreti sa fie verificate la un interval mai scurt, cititi mai departe.

Pentru a verifica doar un singur site, adaugati in configurare la apache (la virtualhost-ul respectiv), o linie:

ErrorLog /var/log/apache2/site-ul-meu-error.log

Dupa care reporniti apache-ul.

Si specificati in logcheck.sh calea spre acest log.

Inca ceva, tot in logcheck.sh gasiti campul

# Person to send log activity to.
SYSADMIN=

puneti dupa semnul egal emailul vostru.

Ca sa verificati daca functioneaza bine, executati:

# /bin/sh /usr/local/etc/logcheck.sh

daca ati primit vreun email (verificat in spam la fel), atunci adaugati un cronjob:

# vim /etc/crontab

(sau nano, daca e greu vim-ul)

adaugati o linie dupa exemplul urmator:

*/30 * * * *  root  /bin/sh /usr/local/etc/logcheck.sh

(asta ca programul sa se execute la fiecare 30 minute)

Acum sa trecem la partea mai interesanta.

Eu am vrut ca logurile de la apache sa se verifice la fiecare 5 minute, spre deosebire de cele de sistem. Tot ce a trebuit sa fac a fost sa copii /usr/local/etc/logcheck.sh in /usr/local/etc/logcheck-apache.sh, sa editez acest ultim fisier (sa scot toate logurile de sistem, si sa adaug logurile de la apache), si sa adaug in crontab inca o linie:

*/5 * * * * root  /bin/sh /usr/local/etc/logcheck-apache.sh

Asta a fost de ajuns.

Acum, eu am observat ca atunci cand sunt erori mysql, apache-ul nu inregistreaza erori in loguri. Aici a trebuit sa hackeresc oleaca. M-am gandit sa fac un script care sa scaneze o pagina anume (care ar genera erori mysql in caz ca s-ar opri serverul mysql), si daca gaseste cuvinte de genul „mysql”, sa ataseze aceste linii in /var/log/apache2/site-ul-meu-error.log.

Iata codul:

wget -nv -O – „http://www.site-ul-meu.com/validate.php” 2>&1 | grep mysql | cat >> /var/log/apache2/site-ul-meu-error.log &&

validate.php este o pagina care face apel la mysql (iar cand mysql-ul nu lucreaza, apar niste mesaje neplacute pe el).

Aceasta linie am introdus-o in /usr/local/etc/logcheck-apache.sh , taman inainte de liniile:

umask 077
rm -f $TMPDIR/check.$$ $TMPDIR/checkoutput.$$ $TMPDIR/checkreport.$$

Iata in principiu, pe scurt, tot ce am avut de spus.

2 Comments

  1. justin
    Posted 29 noiembrie, 2010 at 6:40 pm | Permalink | Răspunde

    m-ai putea invata si p mine sa administrez un site….astept rasp p mail..ms anitcipat..!

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare /  Schimbă )

Fotografie Google

Comentezi folosind contul tău Google. Dezautentificare /  Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare /  Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare /  Schimbă )

Conectare la %s

%d blogeri au apreciat asta: