Mòdul 4
Serveis de xarxa amb GNU/Linux
Exercici 123

 
Monitorització i manteniment
 

Introducció 

En aquest apartat descriurem les eines o recursos que utilitzarem per poder 'prendre el pols' a l'aplicació Apache.

En aquest cas, quan ens referim a manteniment, parlarem del procés servidor Web, no de l'estructura de pàgines que pot emmagatzemar per publicar-les.

L'estructura del Web es va formant afegint 'Alies' i nous continguts dins l'arrel. Mantenir aquesta actualitzada només demana eliminar les pàgines que ja no siguin útils i amb elles els 'Mapejats' que no es facin servir.

Anem a veure doncs com monitoritzar els processos principals del servidor web Apache:

- Monitorització via línia de comandes
- Monitorització via Web amb apache-status
- Generació d'estadístiques de peticions amb la utilitat Analog

Monitorització general via línia de comandes

Per accedir a aquest nivell de monitorització cal tenir accés al teclat i pantalla del servidor o poder obrir una sessió telnet o ssh (secure shell, substitut encriptat del Telnet) contra ell.

És la més senzilla i la més potent alhora doncs en cas de tenir problemes greus permet actuar directament sobre el fitxer de la configuració de l'Apache, reiniciar-lo, eliminant els fitxers problemàtics, etc.

Proposem una pauta de control:

1.- Verificació de l'estat dels processos de l'Apache

Amb les ordres ps i top comprovarem l'estat dels processos httpd, si s'estan executant i quants recursos del sistema utilitzen.

Així amb l'ordre,

# ps -ef | grep httpd

podrem veure si els processos estan en marxa i el seus identificadors

en aquest cas, el procés principal de l'Apache està en marxa amb l'identificador 1339 i la resta de processos es troben ja esperant peticions. Per defecte s'obren vuit 'dimonis' i el mateix Apache anirà afegint-ne més d'actius si la càrrega així ho demana.

Amb la mateixa ordre ps podem arribar a mesurar de forma puntual moltes més dades per saber fins a quin punt el procés squid està utilitzant els recursos del nostre equip

# ps -aux | grep squid

ens mostraria

tenint com a principals mesures la tercera columna amb %CPU utilitzada, la quarta amb %MEM física (pot ser més del 100 % si el sistema està paginant) i el flag d'estat del procés que aquí apareix com S indicant que els processos estan adormits des de fa menys de 20 segons.

Recordem que els altres flags que poden aparèixer son:
R - El procés s'està executant
T - El procés ha rebut un senyal i està aturat
P - El procés està esperant per entrar a paginar
D - El procés està esperant una resposta I/O de disc
I - El procés està adormit des de fa més de 20 segons 
Z - El procés s'ha aturat però ha quedat en la llista d'actius. S'anomenen també zombie o defunct process

Per fer una monitorització a intervals regulars podem utilitzar l'ordre top.

Així executant:

# top

Apareixen en pantalla els processos més actius i la informació del sistema. Sense cap paràmetre addicional la mesura es va actualitzant cada cinc segons.

Per observar els processos del servidor web, que treballen amb l'usuari nodoby, amb la tecla 'u' indicarem aquest usuari a l'aplicació top, veient el següent:

Podeu aturar el monitor amb CRTL+C.

En el moment de fer la mesura, teníem un usuari descarregant un fitxer de 32Mb... i això manté un dels processos del servidor web força enfeinat.

Tenint en compte que el treball dels processos web és molt a ràfegues, és difícil poder mesurar la utilització dels recursos de tots ells. 

Per això ens ajudarà molt l'indicador de mitjanes de càrrega (load average), doncs hi reflexa una estadística acumulada del consum de tot els recursos del servidor. Els processos del servidor web a ple rendiment no haurien de sotmetre a l'equip a mitjanes de càrrega superiors a 4. Hem de tenir en compte que aquest equip ha de poder realitzar altres tasques.

La càrrega la podeu consultar amb l'ordre top o amb uptime i sempre apareix en tres mesures, la primera és la mitjana de càrrega registrada en l'últim minut, la segona en els últims cinc minuts i la tercera en els quinze últims.

Podeu reduir la càrrega eliminant processos innecessaris que estiguin executant-se en el sistema, deixant només els mínims, tenint en compte les prestacions de l'equip utilitzat.
 

2.- Inspecció fitxer de registre access_log

Podem saber si el servidor web està servint peticions consultant el fitxer de registre access_log que podem trobar al directori /var/log/httpd/.

Per exemple amb l'ordre següent:

# tail -f access_log

ens deixarà el fitxer 'obert' contra la finestra de terminal i veurem com es van anotant totes les peticions que el servidor va contestant.

Si no veiem cap entrada nova és possible que el servidor estigui aturat o que en aquell moment no hi hagi ningú demanant pàgines...

Aquest fitxer l'utilitzarem per generar una estadística dels accessos a les pàgines, utilitzant una eina de processat de fitxers de registre.

3.- Inspecció fitxer de registre error_log

Si tenim queixes dels usuaris, o el servidor ens dóna uns missatges d'error via web que no acabem d'entendre, podem consultar el fitxer error_log

Dins d'aquest registre hi ha més dades dels errors que el servei va detectant. Podem trobar desde l'error d'un enllaç a una pàgina inexistent fins als missatges d'accés denegat per les ordres del control d'accés.

Seguint aquesta pauta podrem assegurar que el servei està funcionant, ara bé, la qualitat amb què dóna el servei i el nombre de peticions a les pàgines que conté ho veurem en els propers apartats.

<-

Monitorització via web amb apache-status

El mateix apache incorpora un 'Alias' especial que ens dóna un recull estadístic de l'estat dels processos del servidor Web.

Aquest 'Alias' cal activar-lo, tal com s'ha comentat en l'apartat de 'Personalització', de manera que quedarà disponible amb una URL del tipus:

http://www.intracentre/stat-web

segons el nom indicat a la configuració.

Aquesta pàgina la podeu protegir, utilitzant el control d'accés, com qualsevol altre 'mapejat', restringint el seu visionat, per evitar sobrecàrregues si hi ha molts usuaris consultant de forma insistent aquestes estadístiques.

Aquest recull estadístic, el podem 'partir' amb dos trossos, el primer:

ens mostra un resum de les dades més estadístiques, temps total que el servidor ha estat actiu, tant percent de CPU utilitzada, peticions per segon i una 'barra' en la qual veiem l'estat dels processos actius.

L'Apache, per defecte, arrenca vuit processos que esperen peticions (representats per _ ), a mesura que aquests processos es troben treballant ( W ) va obrint nous processos, que veiem com a disponibles ( . ).

Si el nostre servidor apareix sempre molt saturat, fregant el límit de processos disponibles, podem augmentar-ne el nombre, dins la configuració de l'Apache.

Cal tenir en compte que un equip bàsic, com el que recomanem per al curs, no aguantarà tots els processos que hi ha per defecte, uns 150, essent desitjable actualitzar el servidor per un amb més prestacions si ha de servir més de 15 processos concurrents.

La segona part:

ens mostra els processos i el seu estat, amb un detall extens del que fa cadascú.

En el gràfic de l'exemple, hi ha un equip amb la IP 192.168.0.10, descarregant tres fitxers, atesos pels processos 1, 2 i 3.
 

Amb aquestes mesures ja podem començar a mesurar el rendiment que dóna el nostre servidor web, i si realment l'equip dóna 'la talla' per mantenir el servei en òptimes condicions.

< -

Generació d'estadístiques de peticions amb la utilitat Analog

Per completar aquest apartat de manteniment, tot i que no ens dóna dades sobre el funcionament directe, afegirem una eina per generar les estadístiques de l'accés al contingut del nostre servidor Web.

Així, els usuaris que hi tinguin les seves pàgines, podran veure el nombre de peticions que s'hi han fet i utilitzar-les per valorar el nivell d'acceptació dels continguts (o no...).

Per fer-ho utilitzarem l'aplicació Analog que ens processarà el fitxer d'accessos ( access_log ) i ens generarà una pàgina html amb el contingut de l'estadística acumulada.

Un mirall proper de les pàgines de l'esmentada eina és:

http://sunsite.cnlab-switch.ch/www/mirror/analog/
 

Seguim la pauta següent per implementar la generació d'estadístiques acumulades de peticions de forma setmanal:

1.- Instal·lació aplicació Analog

Aprofitarem la distribució en format RPM de l'aplicació Analog per instal·lar fàcilment l'script al sistema.

# rpm -ivh http://www.xtec.es/~mcguri/analog-4.13-1.i386.rpm

Els components principals queden instal·lats a:
 
Script principal /usr/bin/analog
Configuració /etc/analog.cfg
Documentació /usr/doc/analog-4.13
Imatges /home/httpd/html/images/
Extres web /home/httpd/html/anlgform.html
/home/httpd/cgi-bin/anlgform.pl

Dins el directori de la documentació hi ha uns manuals en format html, pot fer-se un 'Alias' al web per poder-los consultar més còmodament si ens cal.
 

2.- Rotació de logs diaris i generació del fitxer html amb l'estadística d'accessos 

Per generar una estadística diària dels accessos, activarem una rotació al dia, emmagatzemarem i comprimirem els fitxers access_log i finalment els processarem amb l'aplicació Analog.

Si es té suficient espai de disc per emmagatzemar els registres d'accessos de tot el curs, podem tenir una estadística incremental, on anirem veient com augmenten les peticions a les pàgines més visitades.

En els equips que no tenen molt de disc, podem generar una estadística setmanal, per tenir algunes dades de les peticions en conjunt i a les pàgines que es vulgui tenir un registre de visites 'acumulatiu' fix hi podem posar un comptador tipus 'cgi'.

En l'exemple, suposarem que volem emmagatzemar i processar tots els registres d'accés de manera diària.
 

2.1.- Preparem un directori on emmagatzemar els fitxers access_log comprimits.

Per exemple:

# mkdir /home/wwwlogs

Dins aquest directori anirem acumulant tots els fitxers d'accessos a la web per poder-los processar i obtenir les estadístiques desitjades.
 

2.2.- Preparem una URL per publicar la pàgina d'estadístiques que generarà l'Analog.

Per exemple:

# mkdir /home/httpd/html/webaccess

Dins aquest directori hi desarem el fitxer amb les estadístiques generades, amb el nom d'index.html de manera que siguin accessibles a través de la URL:

http://www.intracentre/webaccess
 

2.2.- Configurem l'aplicació Analog per capturar correctament els fitxers d'accessos i crear la pàgina html amb el resultat.

La instal·lació del 'paquet' Analog ens fa un fitxer de configuració ( /etc/analog.cfg ) que modificarem, afegint al principi, les línies següents:

# Localització dels fitxers access_log
LOGFILE /home/wwwlogs/access*.gz
#
# Pàgina destinació de les estadístiques
OUTFILE /home/httpd/html/webaccess/index.html
#
# Localització fitxers imatges Analog respecte
# el directori de publicació de les estadístiques
IMAGEDIR ../images/
#
# Dades per a la capçalera de la pàgina i d'identitat
HOSTNAME www.intracentre
LANGUAGE CATALAN
WEEKBEGINSON MONDAY
#
# Opcions recomanbles pels logs http standard
OSREP off
SEARCHWORD off

deixant la resta tal i com ve per defecte.

Consultant  la documentació i els exemples que inclou, es pot personalitzar moltíssim la recollida de dades, fins aconseguir el 'format' que sembli el més adient.
 

2.2.- La rotació de logs, o sigui la salvaguarda dels registres del sistema, per defecte, es fa de forma centralitzada per a totes les aplicacions, amb l'eina logrotate.

Modifiquem la seva configuració inicial perquè comprimeixi tots els fitxers del registre 'rotats', estalviant força espai de disc, descomentant l'entrada del paràmetre:

compress

del fitxer /etc/logrotate.conf

Aquesta rotació s'executa via cron a les quatre i dos minuts de la matinada, cada dia.

Aprofitem aquesta tasca ja programada i editem el fitxer apache ( /etc/logrotate.d/apache ) en el que hi ha definida la rotació dels registres d'accessos i errors, de manera que es faci un sola rotació diària, es moguin els fitxers a /home/wwwlogs i s'executi l'aplicació analog que genera l'estadística.

A l'apartat de l'access_log només modifiquem i afegim:

/var/log/httpd/access_log {
  rotate 1
  missingok
   postrotate
    /usr/bin/killall -HUP httpd 2> /dev/null || true
    /bin/mv /var/log/httpd/access_log.1.gz \
    /home/wwwlogs/access`date+%d-%m-%Y`.gz
    /usr/bin/analog
  endscript
}
 

Si tot va bé, a les 4:02 de la matinada, mentre l'equip descansa, quedarà emmagatzemant un fitxer del tipus "access12-12-2000.gz", personalitzat amb la data, dins el directori /home/wwwlogs.

L'Analog generarà el fitxer index.html dins el directori /home/httpd/html/webaccess i es podrà consultar el resultat de l'estadística actualitzada diàriament a la URL:

http://www.intracentre/webaccess

Caldrà anar 'vigilant' l'espai que ocupen els fitxers de log emmagatzemats, hem d'evitar omplir l'espai total del disc del servidor...

< -