Monitoramento de Servidores · 6 min read · Oct 08, 2025
O Cluster Web Perfeito com Balanceamento de Carga e Alta Disponibilidade com 2 Servidores Executando Xen no Ubuntu 8.04 Hardy Heron - Página 7
13. Monitoramento de Servidores Com munin E monit (web1, web2)
Neste capítulo, descreverei como você pode monitorar seus nós de servidores web com munin e monit. Munin produz gráficos interessantes sobre quase todos os aspectos do seu servidor (média de carga, uso de memória, uso da CPU, throughput do MySQL, tráfego do eth0, etc.) sem muita configuração, enquanto o monit verifica a disponibilidade de serviços como Apache, MySQL, Postfix e toma as ações apropriadas, como um reinício, se encontrar um serviço que não está se comportando como esperado. A combinação dos dois oferece monitoramento completo: gráficos que permitem reconhecer problemas atuais ou futuros (como “Precisamos de um servidor maior em breve, nossa média de carga está aumentando rapidamente.”), e um watchdog que garante a disponibilidade dos serviços monitorados.
Embora o munin permita monitorar mais de um servidor, discutiremos apenas o monitoramento do sistema onde ele está instalado aqui.
13.1 Instalar E Configurar munin
apt-get install munin munin-node
Em seguida, devemos editar o arquivo de configuração do munin /etc/munin/munin.conf.
mv /etc/munin/munin.conf /etc/munin/munin.conf.bak
vi /etc/munin/munin.conf
Em web1.example.com
dbdir /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir /var/log/munin
rundir /var/run/munin
tmpldir /etc/munin/templates
[web1.example.com]
address 127.0.0.1
use_node_name yesEm web2.example.com
dbdir /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir /var/log/munin
rundir /var/run/munin
tmpldir /etc/munin/templates
[web2.example.com]
address 127.0.0.1
use_node_name yesEm web1 E web2
Em seguida, criamos o diretório /var/www/example/web/monitoring e mudamos sua propriedade para o usuário e grupo munin, caso contrário, o munin não poderá colocar sua saída nesse diretório. Então reiniciamos o munin:
mkdir -p /var/www/example/web/monitoring
chown munin:munin /var/www/example/web/monitoring
/etc/init.d/munin-node restart
Agora é uma boa ideia proteger por senha o diretório /var/www/example/web/monitoring, a menos que você queira que todos possam ver cada pequena estatística sobre seu servidor.
Para fazer isso, criamos um arquivo .htaccess em /var/www/example/web/monitoring:
vi /var/www/example/web/monitoring/.htaccess
AuthType Basic
AuthName "Apenas Membros"
AuthUserFile /var/www/example/monitoring/.htpasswd
require valid-user
Em seguida, devemos criar o arquivo de senha /var/www/example/.htpasswd. Queremos fazer login com o nome de usuário admin, então fazemos isso:
htpasswd -c /var/www/example/web/monitoring/.htpasswd admin
Digite uma senha para admin, e você está feito!
Agora você pode acessar relatórios (levará alguns minutos para coletar dados) nesses endereços:
http://www.example.com:10001/monitoring para web1.example.com
e
http://www.example.com:20001/monitoring para web2.example.com.
13.2 Instalar E Configurar monit
Para instalar o monit, fazemos isso:
apt-get install monit
Agora devemos editar /etc/monit/monitrc. O padrão /etc/monit/monitrc tem muitos exemplos, e você pode encontrar mais exemplos de configuração em http://www.tildeslash.com/monit/doc/examples.php. No entanto, no meu caso, quero monitorar proftpd, mysql, apache e postfix, quero habilitar a interface web do monit na porta 2812, quero uma interface web https, quero fazer login na interface web com o nome de usuário admin e a senha test, e quero que o monit envie alertas por e-mail para root@localhost, então meu arquivo fica assim:
Em web1.example.com
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /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:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
# start program = "/etc/init.d/vsftpd start"
# stop program = "/etc/init.d/vsftpd stop"
# if failed host 192.168.1.104 port 21 protocol ftp 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/mysql start"
stop program = "/etc/init.d/mysql 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/apache2.pid
group www
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed host 192.168.1.104 port 80 protocol http
and request "/example/web/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% 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
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
group bind
start program = "/etc/init.d/bind9 start"
stop program = "/etc/init.d/bind9 stop"
if failed port 53 then restart
if 5 restarts within 5 cycles then timeoutEm web2.example.com
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /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:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
# start program = "/etc/init.d/vsftpd start"
# stop program = "/etc/init.d/vsftpd stop"
# if failed host 192.168.1.105 port 21 protocol ftp 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/mysql start"
stop program = "/etc/init.d/mysql 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/apache2.pid
group www
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed host 192.168.1.105 port 80 protocol http
and request "/example/web/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% 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
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
group bind
start program = "/etc/init.d/bind9 start"
stop program = "/etc/init.d/bind9 stop"
if failed port 53 then restart
if 5 restarts within 5 cycles then timeoutO arquivo de configuração é bastante autoexplicativo; se você não tiver certeza sobre uma opção, dê uma olhada na documentação do monit: http://www.tildeslash.com/monit/doc/manual.php
Na parte do apache da configuração do monit, você encontra isso:
if failed host www.example.com port 80 protocol http
and request "/example/web/monit/token" then restartque significa que o monit tenta se conectar a www.example.com na porta 80 e tenta acessar o arquivo /monit/token que é /var/www/example/web/monit/token porque a raiz do documento do nosso site é /var/www/example/web. Se o monit não tiver sucesso, significa que o Apache não está em execução, e o monit vai reiniciá-lo.
Em web1 E web2
Agora devemos criar o arquivo /var/www/example/web/monit/token e escrever alguma string aleatória nele:
mkdir /var/www/example/web/monit
echo “hello” > /var/www/example/web/monit/token
Em seguida, criamos o certificado pem (/var/certs/monit.pem) que precisamos para a interface web do monit criptografada em SSL:
mkdir /var/certs
cd /var/certs
Precisamos de um arquivo de configuração OpenSSL para criar nosso certificado. Ele pode ser assim:
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 = serverAgora criamos o certificado assim:
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
Depois, editamos /etc/default/monit para habilitar o daemon do monit. Mude startup para 1 e defina CHECK_INTERVALS para o intervalo em segundos que você gostaria que o monit verificasse seu sistema. Eu escolhi 60 (segundos), então meu arquivo fica assim:
vi /etc/default/monit
# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Fredrik Steen
# Você deve definir esta variável para que o monit inicie
startup=1
# Para mudar os intervalos que o monit deve executar, descomente
# e mude esta variável.
CHECK_INTERVALS=60Finalmente, podemos iniciar o monit:
/etc/init.d/monit start
Agora aponte seu navegador para https://192.168.1.104:2812/ ou https://192.168.1.105:2812/, faça login com admin e test, e você deve ver a interface web do monit.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.