Hold dæmonerne i live …

Hvis du selv hoster fusker med din egen server eller har ansvaret for en server eller tre, så kender du det sikkert godt. Du har vendt ryggen til serveren bare et øjeblik eller en uge og pludselig opdager du at webserveren, DBMS’et eller måske en tredje dæmon er blevet lagt ned – AAARRRGGHH

Den eneste måde at holde et vågent øje med ens tjenenede ånder er simpelthen ved at overvågninge dem. Overvågning er regelmæssig observation og registrering af aktiviteter. I dette tilfælde i forbindelse med de processer der udbyder de tjenester, som man ønsker at udbyde fra serveren.

Netop til dette, findes der flere mulige løsninger, der kræver en varierende grad af opsætning og dermed indgreb i serveren. Den løsning, der kræver det mindste indgreb i den eksisterende konfiguration er monit, som jeg her dvæler ved i et et kort sekund.

Monit er en overvågningsdæmon, der kan holde øje med processer, programmer, filers tidsstempler, tjeksum størrelse, biblioteker, enheder og ikke mindst andre servere. Her kan kan udføre TCP/IP og protokol tjeks, endda via SSL.

Hvis der pludselig er en dæmon der er væk på en springtur, sørger monit for at sende en advarsel og/eller udføre en predefineret handling. Det kunne for eksempel være at starte en ny instans af dæmonen, hvis det er muligt.

For at gøre det. hele en tand mere festligt er en HTTP(S) grænseflade tilgængeligt, der ikke bare gør det nemmere og hurtigt at overskue et større antal overvågede processer. Det gør det muligt at udføre et par basale administrative opgaver.

Herunder ses hovedsiden på grænsefladen. Øverst er hovedstatistikkerne på serveren selv og, derunder de tjenester/dæmoner, som Monit er sat til at holde øje med. I dette tilfælde er det postserver, webserver, DNS server, DBMS, Samba og Monit selv.
Monit Service Manager, Hovedside

Monit hovedside
Monit hovedside

Næste levende billede af en død gris, er process status for Apache2.
Monit Service Manager, process status for Apache2

Monit Apache2 underside
Monit Apache2 underside

For at kunne benytte Monits webbaserede brugergrænseflade, hvilket absolut er anbefalelsværdigt. Er det et krav at der allerede er installeret en webserver. For at installere Apache2 webserveren :

sudo zypper in apache2

For at starte Apache webserveren :

sudo /etc/init.d/apache2 start

For at installere Monit i egen høje person :

sudo zypper in monit monit-doc

Konfigurationen er meget enkelt bygget op :

IF THEN ACTION

Hvis er sandt, vin del efterfølgende handling blive udført.

● alert : Send en alarm besked til brugeren.
● restart : Genstart tjenesten (stop og start) og send en alarmbesked.
● start : Start tjenesten og send en alarmbesked.
● stop : Stop tjenesten, send en alarmbesked og afbryd fremtidig overvågning. Overvågningen kan kun genaktiveres manuelt, enten via kommandolinien eller webgrænsefladen.
● exec : Kør et arbitrært program og send en alarmbesked.
● unmonitor : Afslut overvågning af tjeneste og send en alarmbesked. Overvågningen kan kun genaktiveres manuelt, enten via kommandolinien eller webgrænsefladen.

Udfra disse simple byggesten, er det muligt at sætte et rimeligt fyldestgørende overvågningssystem op.

Den primære kontrolfil findes som standard i “/etc/monitrc”. Da monit understøtter brugen af flere kontrolfiler, kan de anbefales at dele det ud således at den primære kontrolfil indeholder de globale indstillinger og hver opsætningen af til hver enkelte tjeneste der ønskes overvåget, placeres i hver deres egen lille fil.

Dette gøres via en include sætning i den primære kontrolfil, og ses i sidste linie i nedenstående. I mit eget tilfælde har jeg oprettet et underbibliotek til “etc”, ved navn “monit.d”, hvor alle kontrolfilerne til tjenesterne er smidt.

#################################################
## Monit main control file
#################################################
set daemon 120                             #Polling interval 120s
set logfile syslog facility log_daemon     #Slå logging til.
set alert postmaster@domain.geek           #Send alarmbeskeder hertil
set idfile /var/run/monit/.monit.id
set statefile /var/run/monit/monit.state
set mailserver smtp.domain.geek            #Brug denne SMTP
set httpd port 2812                        #Brug denne port til webgrænsefladen
use address 192.168.1.30                   #Brug denne eksterne adresse på LAN
allow 192.168.1.40                         #Tillad for denne adresse at tilgå webbrugergrænsefladen
allow admin:                               #Login og kodeord til webbrugergrænsefladen
set eventqueue
basedir /srv/monit/events                  #Hvis alarmbeskeder ikke kan afsendes, brug denne lokale folder
slots 100
set mail-format {                          #Definer formatet på alarmbeskeden der postes elektronisk
from: monit@domain.geek
subject: monit alert -- $EVENT $SERVICE
message: $EVENT Service $SERVICE
Dato: $DATE
Handling: $ACTION
Vært: $HOST
Beskrivelse: $DESCRIPTION
}
include /etc/monit.d/*                     #Inkluder konfig filer i denne folder
######################################################

Nogle gange går apache amok og spawner en masse tråde, om det er på eget initativ eller den bare reagerer på en ekstern indblanding, giver samme resultat. Derfor tjekkes antal tråde der sættes i vandet af apache. Er der mere end 50 genstartes webtjenesten. Hvis tjenesten yderligere er blevet genstartet tre gange i løbet af de sidste fem tjeks, tager vi en lille pause i overvågningen.

######################################################
# Monit control file for Apache2
######################################################
check process Apache
with pidfile /var/run/httpd2.pid            #Tjek Apache, der benytter denne
#process ID fil.
start program "/etc/init.d/apache2 start"   #Sådan startes Apache.
stop program = "/etc/init.d/apache2 stop"   #Sådan stoppes Apache.
if children > 100 then restart              #Hvis Apache opretter mere end 100
#børn så genstart.
if 3 restarts within 5 cycles then timeout  #Er Apache er blevet genstartet tre
#gange indenfor fem Monit cyklusser
#så tag en slapper
######################################################

Jeg har tidligere, flere gange, været udsat for at MySQL er gået i udu, uden dog processen er blevet afsluttet. Efter skiftet til MariaDB sidste år, har det dog ikke været det store problem. Frygten for det skal ske igen er dog blivende og derfor bliver der også tjekket om der er liv i port 3306. Ligeledes hvis tjenesten er blevet genstartet hver gang, i forbindelse med de sidste fem tjeks tager vi lige en timeout med denne tjeneste, før næste gang.


######################################################
# Monit control file for MariaDB (MySQL)
######################################################
check process MariaDB
with pidfile /var/run/mysql/mysqld.pid
group mysql
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 #Er port 3306 inaktiv genstart
if 5 restarts within 5 cycles then timeout
######################################################

Når man så har fumlet sig frem til en konfiguration, kan det være smart lige at teste den af :

$ sudo monit -t
Usage: /etc/init.d/monit {start|stop|status|restart|try-restart|reload|force-reload|poll}

Det sparer en for at lade en eventuelt produktions instans af monit indlæse en defekt konfiguration.

Hvis output ligner ovenstående er Monit nu klar til at blive startet op:

sudo /etc/init.d/monit start

Web brugergrænsefladen kan tilgås via : http://<server>:2812

Henvisninger:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *