In questo articolo descriverò come monitorare il tuo server Fedora 7 con munin e monit. munin produce graziosi grafici su quasi ogni aspetto del tuo server (media del carico, utilizzo della memoria, utilizzo della CPU, throughput MySQL, traffico eth0, ecc.) senza molta configurazione, mentre monit controlla la disponibilità di servizi come Apache, MySQL, Postfix e prende l'azione appropriata come un riavvio se rileva che un servizio non si comporta come previsto. La combinazione dei due ti offre un monitoraggio completo:grafica che ti consente di riconoscere i problemi attuali o imminenti (come "Abbiamo bisogno di un server più grande presto, la nostra media di carico sta aumentando rapidamente.") e un watchdog che garantisce la disponibilità dei servizi monitorati .
Sebbene munin ti consenta di monitorare più di un server, qui discuteremo solo del monitoraggio del sistema in cui è installato.
Questo tutorial è stato scritto per Fedora 7, ma la configurazione dovrebbe applicarsi anche ad altre distribuzioni con piccole modifiche.
Voglio dire in primo luogo che questo non è l'unico modo per impostare un tale sistema. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo in cui prendo. Non garantisco che questo funzionerà per te!
1 Nota preliminare
Il nome host del nostro sistema è server1.example.com e abbiamo un sito Web www.example.com con la radice del documento /var/www/www.example.com/web.
2 Installa e configura munin
Per installare munin su Fedora 7, facciamo questo:
yum install munin munin-node
Quindi creiamo i collegamenti di avvio del sistema per munin e lo avviamo:
chkconfig --levels 235 munin-node on
/etc/init.d/munin-node start
Successivamente, dobbiamo modificare il file di configurazione di munin /etc/munin/munin.conf. Vogliamo che munin metta il suo output nella directory /var/www/www.example.com/web/monitoring, quindi cambiamo il valore di htmldir e vogliamo che usi il nome server1.example.com invece di localhost. localdomain nell'output HTML, quindi sostituiamo localhost.localdomain con server1.example.com. Senza i commenti, il file modificato si presenta così:
vi /etc/munin/munin.conf
[...] dbdir /var/lib/munin htmldir /var/www/www.example.com/web/monitoring logdir /var/log/munin rundir /var/run/munin # Where to look for the HTML templates tmpldir /etc/munin/templates [...] # a simple host tree [server1.example.com] address 127.0.0.1 use_node_name yes [...] |
Quindi creiamo la directory /var/www/www.example.com/web/monitoring e cambiamo la sua proprietà nell'utente e nel gruppo munin, altrimenti munin non può posizionare il suo output in quella directory. Quindi riavviamo munin:
mkdir -p /var/www/www.example.com/web/monitoring
chown munin:munin /var/www/www.example.com/web/monitoring
/etc/init.d/munin-node restart
Ora attendi qualche minuto in modo che munin possa produrre il suo primo output, quindi vai su http://www.example.com/monitoring/ nel tuo browser e vedrai le prime statistiche. Dopo qualche giorno potrebbe apparire così:
(Questo è solo un piccolo estratto delle tante grafiche che munin produce...)
3 Protezione con password Directory di output munin (opzionale)
Ora è una buona idea proteggere con password la directory /var/www/www.example.com/web/monitoring a meno che tu non voglia che tutti possano vedere ogni piccola statistica sul tuo server.
Per fare ciò, creiamo un file .htaccess in /var/www/www.example.com/web/monitoring:
vi /var/www/www.example.com/web/monitoring/.htaccess
AuthType Basic AuthName "Members Only" AuthUserFile /var/www/www.example.com/.htpasswd <limit GET PUT POST> require valid-user </limit> |
Quindi dobbiamo creare il file della password /var/www/www.example.com/.htpasswd. Vogliamo accedere con il nome utente admin, quindi facciamo questo:
htpasswd -c /var/www/www.example.com/.htpasswd admin
Inserisci una password per l'amministratore e il gioco è fatto!
4 Installa e configura monit
monit non è disponibile dai repository ufficiali di Fedora 7, ma dai repository RPMforge (vedi http://dag.wieers.com/rpm/FAQ.php#B2 per istruzioni). Installiamo il pacchetto RPMforge per RHEL 5 che funziona anche per Fedora 7:
rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
Successivamente installiamo monit:
yum install monit
Quindi creiamo i collegamenti di avvio del sistema per monit:
chkconfig --levels 235 monit on
il file di configurazione predefinito di monit è /etc/monit.conf dove puoi trovare alcuni esempi di configurazione (puoi trovare altri esempi di configurazione su http://www.tildeslash.com/monit/doc/examples.php) che sono tutti commentati, ma dice a monit di cercare anche nella directory /etc/monit.d i file di configurazione, quindi invece di modificare /etc/monit.conf, creiamo un nuovo file di configurazione /etc/monit.d/monitrc. Nel mio caso voglio monitorare proftpd, sshd, mysql, apache e postfix, voglio abilitare l'interfaccia web monit sulla porta 2812, voglio un'interfaccia web https, voglio registrare
vi /etc/monit.d/monitrc
set daemon 60 set logfile syslog facility log_daemon set mailserver localhost set mail-format { from: [email protected] } set alert [email protected] 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/sshd start" stop program "/etc/init.d/sshd 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/mysqld start" stop program = "/etc/init.d/mysqld 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/httpd.pid group www start program = "/etc/init.d/httpd start" stop program = "/etc/init.d/httpd 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 |
(Assicurati di controllare solo i processi realmente esistenti sul tuo server, altrimenti monit non si avvierà. Ad esempio, se dici a monit di controllare Postfix, ma Postfix non è installato sul sistema, monit non si avvierà.)
Il file di configurazione è abbastanza autoesplicativo; se non sei sicuro di un'opzione, dai un'occhiata alla documentazione di monit:http://www.tildeslash.com/monit/doc/manual.php
Nella parte apache della configurazione di monit trovi questo:
if failed host www.example.com port 80 protocol http and request "/monit/token" then restart |
il che significa che monit tenta di connettersi a www.example.com sulla porta 80 e tenta di accedere al file /monit/token che è /var/www/www.example.com/web/monit/token perché la radice del documento del nostro sito Web è /var/www/www.example.com/web. Se monit non riesce, significa che Apache non è in esecuzione e monit lo riavvierà. Ora dobbiamo creare il file /var/www/www.example.com/web/monit/token e scriverci una stringa casuale:
mkdir /var/www/www.example.com/web/monit
echo "hello" > /var/www/www.example.com/web/monit/token
Quindi creiamo il pem cert (/var/certs/monit.pem) di cui abbiamo bisogno per l'interfaccia web monit crittografata con SSL:
mkdir /var/certs
cd /var/certs
Abbiamo bisogno di un file di configurazione OpenSSL per creare il nostro certificato. Può assomigliare a questo:
vi /var/certs/monit.cnf
# create RSA certs - Server RANDFILE = ./openssl.rnd [ req ] default_bits = 1024 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 |
Ora creiamo il certificato in questo modo:
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
Infine, possiamo iniziare a monitorare:
/etc/init.d/monit start
Ora punta il tuo browser su https://www.example.com:2812/ (assicurati che la porta 2812 non sia bloccata dal firewall), accedi con admin e prova, e dovresti vedere l'interfaccia web di monitoraggio. Dovrebbe assomigliare a questo:
(Schermata principale)
(Pagina di stato di Apache)
A seconda della tua configurazione in /etc/monit.d/monitrc, monit riavvierà i tuoi servizi se falliscono e invierà e-mail di notifica se gli ID di processo dei servizi cambiano, ecc.
Buon divertimento!
5 link
- munin:http://munin.projects.linpro.no
- monito:http://www.tildeslash.com/monit/index.php