Tech Force / Linux blog / MON Debian remoto controlar serviços locais



Right menu

Linux blog recente

Tutorial Cyrus IMAP aggregator (murder) 2.3.16 sobre Debian GNU Linux 5.x Lenny

Este tutorial completo mostrará como montar um LABORATÓRIO de infra-estrutura de e-mail bastante escalável, para centenas de milhares de contas.

Não conectado

Notificação


Como configurar MON para monitorar remotamente em sistemas Debian e controlar serviços locais

O objetivo é configurar em sistemas Debian o programa "mon" para monitorar REMOTAMENTE serviços e disparar ações conforme os eventos, inclusive controlar serviços locais.

Mon possui vários scripts monitores e de ações em sua seção contrib do repositório em do projeto MON

Os scripts podem ser complexos a ponto de executarem queries pré-definidas em bancos de dados remotos ou também enviar emails de alerta ao sysadmin.

Escopo

Utilizaremos como exemplo, monitorar a disponibilidade de conexão de rede TCP/IP com outra máquina remota. Se perder a conexão de rede, o mon disparará um script que irá PARAR o serviço heartbeat na máquina local SECUNDÁRIA do cluster de Alta Disponibilidade de serviço.

Isso para evitar uma situação de split brain no cluster, na falta de um cabo cross over entre as máquinas ou uma conexão serial direta.

Foi decidido não reiniciar o serviço heartbeat em caso de reconexão, recurso possível com o mon, para exigir verificação da situação pelo sysadmin.

Com base nesses objetivos, alguns parâmetros foram configurados, como a freqüência de execução e número de incidentes necessários para emitir alerta.

Procedimentos

Instalar mon e suas dependências

debianpgcluster2:~# apt-get update
debianpgcluster2:~# apt-get upgrade
debianpgcluster2:~# apt-get install mon

Criar diretório onde guardaremos os logs e conceder propriedade

debianpgcluster2:~# mkdir -p /var/log/mon
debianpgcluster2:~# chown -R mon.mon /var/log/mon

Conceder direitos de execução alheia

Para que o mon possa disparar um script que pare serviços na máquina local, terá de receber poderes de root SEM NECESSIDADE DE SENHA, concedidos pelo sudo.

Edite o arquivo /etc/sudoers para restringir o acesso de mon apenas a um comando específico:

# User alias specification
User_Alias SERVICE_ADMINS = mon

# Cmnd alias specification
Cmnd_Alias HEARTBEAT_STOP_ALERT     = /usr/lib/mon/alert.d/heartbeat_stop.alert

Cmnd_Alias INVOKE_HEARTBEAT_STOP = /usr/sbin/invoke-rc.d heartbeat stop



# User privilege specification
root    ALL=(ALL) ALL
SERVICE_ADMINS  ALL=(root) NOPASSWD: HEARTBEAT_STOP_ALERT,  INVOKE_HEARTBEAT_STOP

Edite o arquivo /etc/mon/mon.cf

Muita atenção que linhas separadoras de seções em branco são importantes.

Usaremos um serviço ping, implementado por fping, executado com NO MÍNIMO O DOBRO da freqüência de execução do heartbeat para o serviço de interesse, para garantir que sempre será possível detetar a queda de rede antes que o heartbeat identifique a falta de contato com o nó secundário E vice-versa, e assim entre em situação de split brain.

Não é recomendável ping sobre o gateway, pois pode ficar saturado e não responder a tempo.

Haverá um registro de downtime em /var/log/mon/downtime.log mantido pelo próprio mon.

O período de verificação do monitor é nos dias da semana de Domingo à Sábado, i.e., todos os dias. Week days; semana inicia domingo.

Versões recentes de mon não precisam ter tal especificação para esse uso, bastando deixar o período em branco, mas você precisa testar.

Mon disparará 1 alerta após 1 ocorrência, pois o sistema precisa detetar dentro do período definido pela freqüência e basta a primeira vez, pois não reiniciará automaticamente.

# /etc/mon/mon.cf, configuration file for mon
#
# Run `/etc/init.d/mon reload' after editing this file in order for your
# changes to take effect.

# There is no default configuration for mon.  The docs most useful for
# setting up your /etc/mon/mon.cf file are the mon(1) man page,
# /usr/share/doc/mon/README.hints*, /usr/share/doc/mon/README.monitors*
# and /usr/share/doc/mon/examples/mon.cf*.

# When you do configure your server, it's a good idea to include these
# settings (to restrict access to the server to the local machine):
#
#    serverbind = localhost
#    trapbind   = localhost

# global options
serverbind = localhost
trapbind = localhost
alertdir = /usr/lib/mon/alert.d
mondir = /usr/lib/mon/mon.d
logdir = /var/log/mon
histlength = 100
#authfile = /etc/mon/auth.cf

dtlogging = yes
dtlogfile = downtime.log

#blank lines section separators are important!
hostgroup pingableservers
    10.987.789.987

#blank lines section separators are important!
watch pingableservers
    service ping
    description verificar rede externa
    interval 10s
    monitor fping.monitor
    period wd {Sun-Sat}
        numalerts 1
        alertafter 1
        alert heartbeat_stop.alert
        alert mail.alert -S "Network is down" admin@example.com
        upalert mail.alert -S "Network is up" admin@example.com 
#       alert file.alert -d /var/log/mon network.log

Crie o arquivo de log /var/log/mon/heartbeat_stop.alert.log para o usuário mon

debianpgcluster2:~# touch /var/log/mon/heartbeat_stop.alert.log
debianpgcluster2:~# chown mon.mon /var/log/mon/heartbeat_stop.alert.log

Crie o arquivo /usr/lib/mon/alert.d/heartbeat_stop.alert

Mon, tal como cron, não executa scripts que gerem saída no console.

No script, redirecione toda saída de comandos para algum arquivo, em nosso caso usando sintaxe válida para bash.

No script que não precisa parâmetros, optamos por gerar logs separados, para o comando invocado e para o próprio script.

#!/bin/sh
#
echo "`date` $*" >> /var/log/mon/heartbeat_stop.alert.log
sudo invoke-rc.d heartbeat stop &>/var/log/mon/heartbeat_invoke.log

Depois conceda permissão de execução ao arquivo /usr/lib/mon/alert.d/heartbeat_stop.alert

debianpgcluster2:~# chmod a+x  /usr/lib/mon/alert.d/heartbeat_stop.alert 

Reinicie mon

debianpgcluster2:~# invoke-rc.d mon restart

Verifique o funcionamento do mon

debianpgcluster2:~# monshow --detail pingableservers,ping |less

Bibliografia

[0] http://www.kernel.org/software/mon/

[1] http://sourceforge.net/projects/mon/

[2] http://mon.cvs.sourceforge.net/viewvc/mon/mon-contrib/monitors/postgres/postgresql/postgresql.monitor?view=log

[3] http://www.debianhelp.co.uk/mon.htm

[4] http://www.is.depaul.edu/_downloads/SampleMONConfigFile.txt

[5] https://mon.wiki.kernel.org/index.php/Mon_Manual

[6] http://foswiki.sigsegv.cx/bin/view/Net/MONStuff

Debian Project and SERPRO partnership preliminary report 1

SERPRO, the Brazilian IT government agency, has been advancing in its collaboration with Debian Project.

This is a first preliminary informal report about these advancements. This is not an official statement from Debian Project nor SERPRO, yet.

Comentários

Usuários registrados têm permissão para criar comentários.


Translate this page.  

AddThis Social Bookmark Button    AddThis Feed Button    Share/Save/Bookmark Add to Free Software Daily   Adicionar esta notícia no Rec6   Adicionar esta notícia no Linkk   Adicionar esta notícia no diHITT   Adicionar esta notícia no Uêba   Adicionar esta notícia no LinkLoko       enviar para DoMelhor