segunda-feira, 21 de junho de 2010

mais monitoramento

O Leandro Malaquias (fug-br), sabendo do nosso sofrimento com o nagios/zabix, sugeriu o jffnms, cuja página "home" está aqui; algo para se ver :)

Olha só o comentário do Leandro:
"Cara, o nagios e assim mesmo se nao der problemas nao e o nagios, mas se estiver interessado em mexer com um nms mas facil use o "JFFNMS" facil de instalar e de tempo real permitindo analisar o SLA com maior precisao."

mas existem ainda várias outras páginas a respeito de nagios, cacti e monitoramento:

Aqui, um tutorial de nosso colega Diego:
:==

Ola, boa tarde lista! Montei ( com ajuda do amigo Wendel) um pequeno howto da configuracao do Nagios. Gostaria de opniao de voces e da verificacao de possiveis erros, obrigado ! abracos !!



Nagios (R) é um sistema de monitoramento de rede e de aplicação. Ele vigia hosts e serviços que você especificar, alertando você quando as coisas correm mal. Algumas coisas que o Nagios pode fazer por voce:


* Acompanhamento dos serviços de rede (SMTP, POP3, HTTP, NNTP, PING, etc);
* Acompanhamento de recursos (processador carga, uso do disco, etc);
* Design com simples plugins que permite aos usuários facilmente desenvolver seu próprio serviço de controle;
* Contato com notificações quando ocorrerem problemas de serviço ou parada de hosts (por e-mail, pager, ou definido pelo metodo pelo usuário);
* Log file rotation;
* Interface web para visualização do atual estado de rede, notificação e problema histórico, arquivo de registro, etc.

Ai vai um pequeno tutorial pra por o servico funcionando, para mais detalhes acesse http://www.nagios.org



Bom, let`s go ! Com o usuario root, baixe e instale o apache:

#cd /usr/ports/www/apache13; make install clean


Edite o httpd.conf e insira as seguintes linhas:

#vi /usr/local/etc/apache/httpd.conf

ScriptAlias /nagios/cgi-bin /usr/local/www/nagios/cgi-bin/

Options ExecCGI
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/etc/nagios/htpasswd.users
Require valid-user


Alias /nagios /usr/local/www/nagios


Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/etc/nagios/htpasswd.users
Require valid-user



Voce precisa definir o arquivo onde vai ficar o passwd dos usuarios autorizados:

#touch /usr/local/etc/nagios/htpasswd.users


#htpasswd -c /usr/local/etc/nagios/htpasswd.users ## caso queira mudar a senha, basta nao incluir o flag -c.




Baixe e instale o nagios:

#cd /usr/ports/net-mgmt/nagios; make install clean

Os arquivos de configuracao do nagios ficam em /usr/local/etc/nagios.
Os principais arquivos sao:

cgi.cfg = Esse arquivos diz onde o CGI vai encontrar os arquivos de configuracao.
commands.cfg = Os comandos que o nagios oferece e suas sintaxes. Aconselhavel da uma olhada.
nagios.cfg = Arquivo principal do nagios, aqui voce vai fazer o seguinte:

# cd /usr/local/etc/nagios; vi nagios.cfg


## Aqui voce ira procurar pelos cfg_file, nele voce setara onde estarao os arquivos de configuracao (objects):

cfg_file=/usr/local/etc/nagios/teste.cfg - Fica a seu criterio definir o nome do arquivo.
# vi teste.cfg ## Aqui esta tudo para localhost, cabe a voce fazer as alteracoes!!
## ## timeperiod voce define `grupos com horarios`. Voce pode especificar diversos horarios. Aqui eu criei 3: 24x7 (24 horas, ## 7 dias),
Hora de trabalho (de 9 ## as 17) e nonworkhours (no qual nao estamaremos trabalhando).

define timeperiod{
timeperiod_name 24x7 alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00 }

define timeperiod{
timeperiod_name workhours alias "Normal" Working Hours
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00 }

define timeperiod{
timeperiod_name nonworkhours alias Non-Work Hours
sunday 00:00-24:00
monday 00:00-09:00,17:00-24:00
tuesday 00:00-09:00,17:00-24:00
wednesday 00:00-09:00,17:00-24:00
thursday 00:00-09:00,17:00-24:00
friday 00:00-09:00,17:00-24:00
saturday 00:00-24:00 }

define timeperiod{
timeperiod_name none alias No Time Is A Good Time }

## Contatos, a quem avisar caso algo ocorra:

define contact{ contact_name MY_NAME alias Administrador da Rede
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands
notify-by-email ## MTA tem que ta configurado !
host_notification_commands host-notify-by-email ## MTA tem que ta configurado !
email email@email # email para qual o nagios vai mandar as notificacoes. }

## Voce pode definir quantos for preciso, por exemplo, um grupo para a equipe tecnica da empresa:

define contact{
contact_name local alias Equipe Tecnica da Empresa
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email email email@email }

## Aqui voce define o grupo de contatos; quais vao ser os membros, etc.

define contactgroup{
contactgroup_name equipe-de-suporte alias EQUIPE DE SUPORTE
members ponha-os-nomes-aqui }

## Definicao do host a ser monitorado
define host{
name servidor
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
register 0 }

# localhost

define host{
use servidor
host_name localhost \\ mude para o nome da sua maquina alias localhost \\ como a maquina pode ser chamada pelo nagios.
address 127.0.0.1 \\ IP da maquina a ser monitorada
check_command check-host-alive
max_check_attempts 10
notification_interval 120 \\ Tempo de notificacao, em segundos.
notification_period 24x7 \\ Quando vai ser notificado?
notification_options d,u,r contact_groups equipe-de-suporte \\ Quem vai ser notificado? }

## Voce tambem pode montar um grupo de hosts a ser monitorado:

define hostgroup{
hostgroup_name servidores alias servidores members localhost }

### Servicos, aqui eh a parte legal !
define service{
name generic-service
active_checks_enabled 1
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
register 0 }

define service{
name gw
active_checks_enabled 1
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
register 0 } # roteador

define service{
use gw
host_name z
service_description PING is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 240
notification_period 24x7
notification_options c,r
check_command check_ping!100.0,20%!500.0,60% } # este servidor

define service{
use generic-service
host_name localhost
service_description SMTP
is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options c,r
check_command check_smtp
}
define service{
use generic-service
host_name localhost
service_description IMAP
is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options c,r
check_command check_imap
}
define service{
use generic-service
host_name localhost
service_description PING
is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options c,r
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use generic-service
host_name localhost
service_description POP3
is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_pop
}
define service{
use generic-service
host_name localhost
service_description HTTP
is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_http
}
define service{
use generic-service
host_name localhost
service_description / free space
is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_local_disk!50%!30%!/dev/ad0s1a
# !!! }
define service{
use generic-service
host_name localhost
service_description /tmp
free space is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_local_disk!20%!10%!/dev/ad0s1e # !!! }

define service{
use generic-service
host_name localhost
service_description /usr
free space is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command check_local_disk!50%!30%!/dev/ad2s1f # !!! }

define service{
use generic-service
host_name localhost
service_description /var
free space is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 3
contact_groups equipe-de-suporte
notification_interval 120
notification_period 24x7
notification_options w,u,c,r
check_command
check_local_disk!20%!10%!/dev/ad0s1d # !!! }

define service{
use generic-service
host_name localhost
service_description Total Processes
is_volatile 0
check_period 24x7
max_check_attempts 2
normal_check_interval 5
retry_check_interval 2
contact_groups equipe-de-suporte
notification_interval 240
notification_period 24x7
notification_options w,u,c,r
check_command check_local_procs!150!200!RSZDT }

O post original dêle está aqui monitoramento por snmp e PF

Acelerando o Cacti: ao invés de usar o poller original (em php), usa-se um compilado em C, conforme êste post do Marcello no fug-br

O colega rogério moura (sempre no fug) fez um script para coletar dados para o MRTG; vale analisar, de repente pode-se usa-lo para gerar dados para o nagios.


Fully Automated Nagios


O FAN, ou “Fully Automated Nagios“ (Nagios completamente automatizado), é uma distribuição em CD voltada para a simplificação da instalação do Nagios em conjunto com diversas ferramentas num servidor de monitoramento de rede. Sua versão atual é a 1.0.

URL para a notícia completa

a página de download está aqui

Controle de Banda com PF

Na lista FUG-BR o colega Renato Frederick deu uma receitinha bem
interessante para controle de banda com o pf, a qual reproduzo aqui:

Faz-se as filas na interface, neste exemplo o link é de 100Mb e está
conectado á xl0 e temos 2 clientes(e o "resto" que vai pro que não tem tráfego explicitamente detalhado):

altq on $ext_if bandwidth 100Mb queue { cliente1 cliente2 default_dmz }

define-se dos 100Mb quanto que cliente1 e cliente2 vai ter e o resto pra default_dmz:

queue cliente1 bandwidth 2Mb priority 4 qlimit 1000 cbq(red)
queue cliente2 bandwidth 8Mb priority 4 qlimit 1000 cbq(red)
queue default_dmz bandwidth 80Mb priority 4 qlimit 1000 cbq(default,borrow)

lembrando que a some dos queue nao pode passar o bandwitdh declarado acima.

note que estou usando o algorítimo RED para fazer o ALTQ, no link[1] você vê mais detalhes dos algorítimos disponíveis.

Também na DMZ eu joguei o borrow, ou seja, os 80Mb da DMZ pode "tomar" banda do cliente2 e cliente2, caso precise, seria como as prioridades que o IPFW tem.


Agora basta colocar uma linha no final de cada regra de pass out pra indicar que esta regra vai ser associada a uma destas queue:


Ex, uma regra que era assim, liberando o cliente1 a conectar a qq local:

pass out quick on $ext_if proto { tcp udp } from { $cliente1 } port > 1023 to any keep state

fica assim:

pass out quick on $ext_if proto { tcp udp } from { $cliente1 } port > 1023 to any queue cliente1 keep state

as regras que eu quero que compartilhem os 80Mb eu não declaro nenhum queue, ele vai pegar o que está como default acima:

pass out quick on $ext_if proto tcp from port $ftp_ports to any port > 1023 keep state



Observe que isto faz o tráfego de output.

para fazer de input, repete-se a mesma coisa, só que a ext_if vai ser substituida pela int_if(ou o nome que você dá pra interface interna) no altq e o queue nao vai ser no pass out, vai ser no pass in e você não vai poder
usar o keep state, vai ter que declarar uma regra de pass out e outra de pass in, senão o keep state cria o retorno sem queue.

a referência: [1]http://openbsd.org/faq/pf/queueing.html

o post original está aqui