GNU/Linux >> Linux Esercitazione >  >> Debian

Monitoraggio del server con Munin e Monit su Debian 8 (Jessie)

In questo articolo, descriverò come monitorare il tuo server Debian 8 (Jessie) 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 problemi attuali o imminenti (come "Abbiamo bisogno presto di un server più grande, 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 Debian 8 (Jessie), ma la configurazione dovrebbe essere applicata anche ad altre distribuzioni come Ubuntu 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.

Assicurati che il sistema sia aggiornato prima di iniziare a installare Munin, esegui:

apt-get update
apt-get upgrade

Apache viene utilizzato per mostrare le pagine Munin, il modulo apache fcgid è richiesto per la funzione di zoom del grafico Munin. Installa apache e il modulo fcgid con apt.

apt-get install apache2 libcgi-fast-perl libapache2-mod-fcgid

Abilita il modulo fcgid in apache.

a2enmod fcgid

2 Installa e configura Munin

Per installare Munin su Debian Jessie, facciamo questo:

apt-get install munin munin-node munin-plugins-extra 

Quando il server esegue MySQL o MariaDB, abilita alcuni plugin aggiuntivi Munin per monitorare MySQL:

cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/mysql_ mysql_
ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes
ln -s /usr/share/munin/plugins/mysql_innodb mysql_innodb
ln -s /usr/share/munin/plugins/mysql_isam_space_ mysql_isam_space_
ln -s /usr/share/munin/plugins/mysql_queries mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads mysql_threads

Successivamente, dobbiamo modificare il file di configurazione di Munin /etc/munin/munin.conf. Decommenta le righe dbdir, htmldir, logdir, rundir e tmpldir (i valori predefiniti vanno bene). Vogliamo che Munin utilizzi il nome server1.example.com invece di localhost.localdomain nell'output HTML, quindi sostituiamo localhost.localdomain con server1.example.com nella sezione dell'albero host semplice. Senza i commenti, il file modificato si presenta così:

nano /etc/munin/munin.conf
# Example configuration file for Munin, generated by 'make build'

# The next three variables specifies where the location of the RRD
# databases, the HTML output, logs and the lock/pid files. They all
# must be writable by the user running munin-cron. They are all
# defaulted to the values you see here.
#
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin

# Where to look for the HTML templates
#
tmpldir /etc/munin/templates

# Where to look for the static www files
#
#staticdir /etc/munin/static

# temporary cgi files are here. note that it has to be writable by
# the cgi user (usually nobody or httpd).
#
# cgitmpdir /var/lib/munin/cgi-tmp # (Exactly one) directory to include all files from. includedir /etc/munin/munin-conf.d [...] # a simple host tree
[server1.example.com]
address 127.0.0.1
use_node_name yes [...]

Dovremmo trovare il file di configurazione di Apache 2.4 per Munin /etc/munin/apache24.conf - definisce un alias chiamato munin nella directory di output HTML di munin /var/cache/munin/www, il che significa che possiamo accedere a munin da tutti i siti Web su questo server utilizzando il relativo percorso /munin (es. http://www.example.com/munin).

La configurazione di Apache Munin non è abilitata per impostazione predefinita, questa è stata modificata da DebianWheezy a Jessie. La nuova directory di configurazione è /etc/apache2/conf-enabled invece di /etc/apache2/conf.d che era usata nelle versioni precedenti come Wheezy e Squeeze.

Esegui questi comandi per abilitare e caricare la configurazione in apache.

cd /etc/apache2/conf-enabled/
ln -s /etc/munin/apache24.conf munin.conf
service apache2 restart

Assicurati di commentare la riga Richiedi locale e aggiungi Richiedi tutto concesso e Opzioni FollowSymLinks SymLinksIfOwnerMatch (altrimenti sarai in grado di accedere all'output Munin solo da localhost):

nano /etc/munin/apache24.conf
Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
Options None
</Directory>

ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>

Riavvia Apache:

service apache2 restart

Quindi riavvia Munin:

service munin-node restart

Ora attendi qualche minuto in modo che Munin possa produrre il suo primo output, quindi vai su http://www.example.com/munin/ nel tuo browser e vedrai le prime statistiche:

(Questo è solo un piccolo estratto delle tante grafiche che munin produce...)

Ora è una buona idea proteggere con password la directory di output di munin a meno che tu non voglia che tutti possano vedere ogni piccola statistica sul tuo server.

Per fare ciò, dobbiamo creare il file della password /etc/munin/munin-htpasswd. Vogliamo accedere con il nome utente admin, quindi facciamo questo:

htpasswd -c /etc/munin/munin-htpasswd admin

Inserisci una password per l'amministratore. Quindi apri di nuovo /etc/munin/apache24.conf...

nano /etc/munin/apache24.conf

... commenta "Richiedi tutto concesso e aggiungi le righe che ho segnato in rosso:

Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
Options None
</Directory>

ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>

Quindi riavvia Apache:

service apache2 restart

4 Abilita moduli aggiuntivi in ​​Munin

Il comando Munin "munin-node-configure --suggest" può essere utilizzato per ottenere consigli per moduli Munin aggiuntivi che possono essere abilitati sul server. Corri:

munin-node-configure --suggest

L'output dovrebbe essere simile a questo:

La colonna "usato" mostra se un modulo è abilitato, la colonna "Suggerimenti" mostra se il server esegue un servizio che può essere monitorato da questo modulo. Crea un collegamento simbolico per il modulo in /etc/munin/plugins per abilitarlo.

Qui abiliterò ad esempio i moduli apache_*:

cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volume

Riavvia Munin per caricare la nuova configurazione.

service munin-node restart

5 Installa e configura Monit

Per installare Monit, facciamo questo:

apt-get install monit

Ora dobbiamo modificare /etc/monit/monitrc. L'impostazione predefinita /etc/monit/monitrc ha molti esempi e puoi trovare altri esempi di configurazione su http://mmonit.com/monit/documentation/. Tuttavia, 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 accedere all'interfaccia web con il nome utente admin e la password howtoforge e voglio che Monit invii avvisi e-mail a [email protected], quindi il mio file ha questo aspetto (ho aggiunto esempi per altri demoni alla configurazione in modo che tu possa adattare il file alle tue esigenze):

cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
nano /etc/monit/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:howtoforge

check process sshd with pidfile /var/run/sshd.pid
start program "/usr/sbin/service ssh start"
stop program "/usr/sbin/service ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

check process apache with pidfile /var/run/apache2/apache2.pid
group www
start program = "/usr/sbin/service apache2 start"
stop program = "/usr/sbin/service apache2 stop"
if failed host localhost 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

# ---------------------------------------------------------------------------------------------
# NOTE: Replace example.pid with the pid name of your server, the name depends on the hostname
# ---------------------------------------------------------------------------------------------
#check process mysql with pidfile /var/lib/mysql/example.pid
# group database
# start program = "/usr/sbin/service mysql start"
# stop program = "/usr/sbin/service mysql stop"
# if failed host 127.0.0.1 port 3306 then restart
# if 5 restarts within 5 cycles then timeout

#check process proftpd with pidfile /var/run/proftpd.pid
# start program = "/usr/sbin/service proftpd start"
# stop program = "/usr/sbin/service proftpd stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process postfix with pidfile /var/spool/postfix/pid/master.pid
# group mail
# start program = "/usr/sbin/service postfix start"
# stop program = "/usr/sbin/service postfix stop"
# if failed port 25 protocol smtp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process nginx with pidfile /var/run/nginx.pid
# start program = "/usr/sbin/service nginx start"
# stop program = "/usr/sbin/service nginx stop"
# if failed host 127.0.0.1 port 80 then restart
#
#check process memcached with pidfile /var/run/memcached.pid
# start program = "/usr/sbin/service memcached start"
# stop program = "/usr/sbin/service memcached stop"
# if failed host 127.0.0.1 port 11211 then restart
#
#check process pureftpd with pidfile /var/run/pure-ftpd/pure-ftpd.pid
# start program = "/usr/sbin/service pure-ftpd-mysql start"
# stop program = "/usr/sbin/service pure-ftpd-mysql stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process named with pidfile /var/run/named/named.pid
# start program = "/usr/sbin/service bind9 start"
# stop program = "/usr/sbin/service bind9 stop"
# if failed host 127.0.0.1 port 53 type tcp protocol dns then restart
# if failed host 127.0.0.1 port 53 type udp protocol dns then restart
# if 5 restarts within 5 cycles then timeout
#
#check process ntpd with pidfile /var/run/ntpd.pid
# start program = "/usr/sbin/service ntp start"
# stop program = "/usr/sbin/service ntp stop"
# if failed host 127.0.0.1 port 123 type udp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process mailman with pidfile /var/run/mailman/mailman.pid
# group mail
# start program = "/usr/sbin/service mailman start"
# stop program = "/usr/sbin/service mailman stop"
#
#check process amavisd with pidfile /var/run/amavis/amavisd.pid
# group mail
# start program = "/usr/sbin/service amavis start"
# stop program = "/usr/sbin/service amavis stop"
# if failed port 10024 protocol smtp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-imap with pidfile /var/run/courier/imapd.pid
# group mail
# start program = "/usr/sbin/service courier-imap start"
# stop program = "/usr/sbin/service courier-imap stop"
# if failed host localhost port 143 type tcp protocol imap then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-imap-ssl with pidfile /var/run/courier/imapd-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-imap-ssl start"
# stop program = "/usr/sbin/service courier-imap-ssl stop"
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3 with pidfile /var/run/courier/pop3d.pid
# group mail
# start program = "/usr/sbin/service courier-pop start"
# stop program = "/usr/sbin/service courier-pop stop"
# if failed host localhost port 110 type tcp protocol pop then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3-ssl with pidfile /var/run/courier/pop3d-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-pop-ssl start"
# stop program = "/usr/sbin/service courier-pop-ssl stop"
# if failed host localhost port 995 type tcpssl sslauto protocol pop then restart
# if 5 restarts within 5 cycles then timeout
#
#check process dovecot with pidfile /var/run/dovecot/master.pid
# group mail
# start program = "/usr/sbin/service dovecot start"
# stop program = "/usr/sbin/service dovecot stop"
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
# if 5 restarts within 5 cycles then timeout

Il file di configurazione è abbastanza autoesplicativo; se non sei sicuro di un'opzione, dai un'occhiata alla documentazione di Monit:http://mmonit.com/monit/documentation/monit.html

Nella parte apache della configurazione di Monit trovi questo:

   if failed host localhost port 80 protocol http
      and request "/monit/token" then restart

il che significa che Monit tenta di connettersi a localhost sulla porta 80 e tenta di accedere al file /monit/token che è /var/www/html/monit/token perché la radice del documento del nostro sito Web è /var/www/html. Se Monit non riesce, significa che Apache non è in esecuzione e Monit lo riavvierà. Ora dobbiamo creare il file /var/www/html/monit/token e scriverci dentro una stringa casuale:

mkdir /var/www/html/monit
echo "hello" > /var/www/html/monit/token

Quindi creiamo il pem cert (/var/certs/monit.pem) di cui abbiamo bisogno per l'interfaccia web Monit con crittografia SSL:

mkdir /var/certs
cd /var/certs

Abbiamo bisogno di un file di configurazione OpenSSL per creare il nostro certificato. Può assomigliare a questo:

nano /var/certs/monit.cnf
# create RSA certs - Server

RANDFILE = ./openssl.rnd

[ req ]
default_bits = 2048
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 1024 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 600 /var/certs/monit.pem

Infine, possiamo avviare Monit:

service 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 howtoforge e dovresti vedere l'interfaccia web di Monit. Dovrebbe assomigliare a questo:

(Schermata principale)

(Pagina di stato SSHd)

A seconda della tua configurazione in /etc/monit/monitrc, monit riavvierà i tuoi servizi se falliscono e invierà e-mail di notifica se gli ID di processo dei servizi cambiano, ecc.

Per ottenere lo stato di Monit sulla shell, esegui il comando "monit status":

monit status

Il comando mostrerà lo stato di tutti i servizi monitorati.

  • munin:http://munin-monitoring.org/
  • monito:http://mmonit.com/monit/

Debian
  1. Aumenta la tua sicurezza IPv4 con Fail2Ban e Tinyhoneypot su Debian Jessie

  2. Monitoraggio del server con Icinga 2 e Icingaweb 2 su CentOS 7

  3. Installa Zabbix Monitoring Server e Agent su Debian 9

  4. Come installare Monit (monitoraggio di processi e servizi) su Ubuntu / Debian

  5. Easy vsFTPD – Server FTP con utenti virtuali su Debian 8 Jessie

Come installare TYPO3 7 con Nginx e MariaDB su Debian 8 (Jessie)

Monitoraggio del server con munin e monit su CentOS 5.2

Monitoraggio del server con Munin e Monit su CentOS 7

Monitoraggio del server con Munin e Monit su CentOS 7.2

Monitoraggio del server con munin e monit su Fedora 7

Come abilitare il protocollo HTTP2 con Nginx su Debian 8 Jessie Server