Configurando o Nágios – Básico

Vamos neste post mostrar a configuração de um servidor Nágios.

Nagios é uma popular aplicação de monitoração de rede de código aberto distribuída sob a licença GPL. Ele pode monitorar tanto hosts quanto serviços, alertando-o quando ocorrerem problemas e também quando os problemas forem resolvidos.

O Nagios foi originalmente criado sob o nome de Netsaint, foi escrito e é atualmente mantido por Ethan Galstad, junto com um exército de desenvolvedores que ativamente mantém plugins oficiais e não-oficiais.

Nagios primeiramente foi escrito para o sistema operacional Linux, mas pode rodar em outros Unixes também. (fonte Wikipedia).

Partindo direto para as configurações:

Foi criado uma pasta para conter os nossos arquivos cfg´s e definido em /etc/nagios/nagios.cfg.

cfg_dir=/etc/nagios/meus/

Arquivos contidos na pasta:

  1. commands.cfg – comandos que serão usados para controlar os serviços.
  2. contacts.cfg – usuários que serão avisados dos problemas.
  3. contactgroup.cfg – grupos de contatos, facilita ao comunicar falhas.
  4. hosts.cfg – servidores, impressoras, switchs que serão monitorados.
  5. hostgroup.cfg – agrupamento de hosts, assim como o contactgroup.
  6. services.cfg – serviços que serão monitorados, exemplo: PING.
  7. hostextinfo.cfg – informações adicionais como coordenadas para serem mostradas no mapa, imagem para definição do serviço/servidor monitorado.

Sempre que alterar algum arquivo
primeiro teste as novas configurações:

# nagios -v /etc/nagios/nagios.cfg

Depois(se estiver tudo certo) atualize as regras:

# service nagios reload

Vamos agora conferir o que cada arquivo contém.

  1. commands.cfg
  2. define command {
            command_name    check_oracle ;nome do comando, quando for usá-lo será usado este nome
            command_line    $USER1$/check_oracle --tns $HOSTADDRESS$ $ARG1$ ;caminho do plugin e o parámetros que serão aceitos
    }
  3. contacts.cfg
  4. define contact {
            use                     generic-contact ;template que já possui algumas características
    
            contact_name            luiz
            alias                   Luiz Taborda Bukowski
            service_notification_period     24x7 ; esses períodos são configurados em /etc/nagios/objects/timeperiods.cfg
            host_notification_period        24x7
            service_notification_commands   notify-service-by-email ;notificações em /etc/nagios/objects/commands.cfg
            service_notification_options    w,u,c,r
            host_notification_commands      notify-host-by-email
            host_notification_options       d,u,r
            email                   email@meudominio.com.br
    }

    service_notification_options
    w = WARNING
    u = UNKNOWN
    c = CRITICAL
    r = RECOVER (OK)
    f = when the service starts and stops flapping
    n = NONE – nenhuma notificação

    host_notification_options
    d = DOWN
    u = UNREACHABLE
    r = RECOVER (UP)
    f = when the host starts and stops flapping
    s = SEND notifications when host or service scheduled downtime starts and ends.
    n = NONE – nenhuma notificação

  5. contactgroup.cfg
  6. define contactgroup {
            contactgroup_name       http-admin
            alias                   Administradores de Web Server
            members                 luiz ;membros do grupo definidos em contacts.cfg
    }
  7. hosts.cfg
  8. define host {
            use             generic-host
    
            host_name       firewall
            alias           Firewall
            address         192.168.1.1
            check_command   check-host-alive
            max_check_attempts      5
            contact_groups          fire-admin ;grupo definido em contactgroup.cfg
    }
    define host {
            use             generic-host ; template
    
            host_name       webserver
            alias           Web Server #1
            address         192.168.1.2
            check_command   check-host-alive
            max_check_attempts      5
            notification_interval   1
            notification_period     24x7
            notification_options    d,u,r ; down, unreachable, recover(UP)
            contact_groups          http-admin
            parents                 firewall ;no mapa o webserver estará ligado no firewall
    }
  9. hostgroup.cfg
  10. define hostgroup {
            hostgroup_name          http-server
            alias                   Web Servers
            members                 webserver
    }
  11. services.cfg
  12. define service {
            use                     generic-service
    
            host_name               webserver ; nome do servidor
            service_description     PING ; descrição
            is_volatile             0
            check_period            24x7
            max_check_attempts      5
            normal_check_interval   1
            retry_check_interval    1
            contact_groups          http-admin ; grupo de contatos à ser notificado
            notification_interval   2
            notification_period     24x7
            notification_options    c,r
            check_command           check_ping!100.0,20%!500.0,60% ; nesse caso WARNING é quando tiver 20% de perca em 100 pacotes; CRITICAL 60% de perca em 500 pacotes
    }
  13. hostextinfo.cfg
  14. define hostextinfo {
            name            linux-template ;isso é um template
    
            icon_image      linux.png
            icon_image_alt  Linux Server
            vrml_image      linux.png
            statusmap_image linux.gd2
            register        0
    }
    define hostextinfo {
            use             linux-template ; usa o template definido
            host_name       mclaren
            2d_coords       100,250 ; não necessário
            3d_coords       100.0,50.0,75.0 ; não necessário
    }

Este é um tutorial básico e como o Nágios possui muitas possibilidades de configurações resolvi escrever não apenas um, mas vários posts.

Nos próximos dias estarei postando configurações mais específicas. Aguardem…

Vamos agora conferir o que cada arquivo contém.
1) commands.cfg
define command {
command_name    check_oracle ;nome do comando, quando for usá-lo será usado este nome
command_line    $USER1$/check_oracle –tns $HOSTADDRESS$ $ARG1$ ;caminho do plugin e o parámetros que serão aceitos
}

2) contacts.cfg
define contact {
use                     generic-contact ;template que já possui algumas características

contact_name            cadan
alias                   Daniel Cadan
service_notification_period     24×7 ; esses períodos são configurados em /etc/nagios/objects/timeperiods.cfg
host_notification_period        24×7
service_notification_commands   notify-service-by-email ;notificações em /etc/nagios/objects/commands.cfg
service_notification_options    w,u,c,r
host_notification_commands      notify-host-by-email
host_notification_options       d,u,r
email                   danielcadan@morenarosa.com.br
}

service_notification_options
w = WARNING
u = UNKNOWN
c = CRITICAL
r = RECOVER (OK)
f = when the service starts and stops flapping
n = NONE – nenhuma notificação

host_notification_options
d = DOWN
u = UNREACHABLE
r = RECOVER (UP)
f = when the host starts and stops flapping
s = SEND notifications when host or service scheduled downtime starts and ends.
n = NONE – nenhuma notificação

3) contactgroup.cfg
define contactgroup {
contactgroup_name       banco-admin
alias                   Administradores do Banco de Dados
members                 cadan,silvio ;membros do grupo definidos em contacts.cfg
}

4) hosts.cfg
define host {
use             generic-host

host_name       costura
alias           BRMA Server 1
address         costura.grupomorenarosa.intranet
check_command   check-host-alive
max_check_attempts      5
contact_groups          brma-admin ;grupo definido em contactgroup.cfg
}
define host {
use             generic-host ; template

host_name       mclaren
alias           Web Server #1
address         mclaren.grupomorenarosa.intranet
check_command   check-host-alive
max_check_attempts      5
notification_interval   1
notification_period     24×7
notification_options    d,u,r ; down, unreachable, recover(UP)
contact_groups          http-admin
parents                 costura ;no mapa o mclaren estará ligado no costura
}

5) hostgroup.cfg
define hostgroup {
hostgroup_name          http-server
alias                   Web Servers
members                 mclaren
}

6, 7, 8, 9) definição dos serviços monitorados:
define service {
use                     generic-service

host_name               mclaren ; nome do servidor
service_description     PING ; descrição
is_volatile             0
check_period            24×7
max_check_attempts      5
normal_check_interval   1
retry_check_interval    1
contact_groups          http-admin ; grupo de contatos à ser notificado
notification_interval   2
notification_period     24×7
notification_options    c,r
check_command           check_ping!100.0,20%!500.0,60% ; nesse caso WARNING é quando tiver 20% de perca em 100 pacotes; CRITICAL 60% de perca em 500 pacotes
}

10) hostextinfo.cfg
define hostextinfo {
name            linux-template ;isso é um template

icon_image      linux.png
icon_image_alt  Linux Server
vrml_image      linux.png
statusmap_image linux.gd2
register        0
}
define hostextinfo {
use             linux-template ; usa o template definido
host_name       mclaren
2d_coords       100,250 ; não necessário
3d_coords       100.0,50.0,75.0 ; não necessário
}

 

Twitter4J – API Java para usar o Twitter

twitter follow me A API do #twitter é muito maleável(graças a utilização do #json) o que permite que os dados sejam lidos de forma muito fácil independentemente da linguagem que se esteja usando.

O que não seria diferente no java, uma linguagem super poderosa. Por isso surgiu rápidamente uma API para se trabalhar com o twitter através do java. A API em questão é a Twitter4J.

Neste artigo vamos ver como ela funciona, ver como ela mantém a simplicidade do próprio Twitter e ao final do mesmo você estará apto a criar uma aplicação pra interagir com o microblogging.

Para começar baixe a API nesse link aqui e vamos logo ao que interessa.
.
.
Postando no Twitter:

public static Status postar(String twitterID,
	String twitterPassword, String status)  throws TwitterException {

	Twitter twitter = new Twitter(twitterID, twitterPassword);
	return twitter.updateStatus(status);
}

Buscando os posts dos seus Following(os últimos 20 posts):

public static List<Status> getPosts(String twitterID,
	String twitterPassword)  throws TwitterException {

	Twitter twitter = new Twitter(twitterID, twitterPassword);
	List<Status> statuses = twitter.getFriendsTimeline();
	return statuses;
}

Buscando os posts de alguém(os últimos 20 posts):

public static List<Status> getPosts(String twitterID)
	throws TwitterException {

	Twitter twitter = new Twitter();
	List statuses = twitter.getFriendsTimeline(twitterID);
	return statuses;
}

Fazendo uma busca:

public static List<Tweet> buscar(String busca)
	throws TwitterException {

	Twitter twitter = new Twitter();
	Query query = new Query("source: " + busca);
	QueryResult result = twitter.search(query);

	return result.getTweets();
}

Código completo:

Read the rest of this entry »

 

Enviar email autenticado com Java

Email autenticado com Java
Enquanto eu estava escrevendo o post anterior (Enviar email com Java) surgiu a necessidade na empresa de que os envios de email fossem autenticados, por isso logo após ter publicado o outro post resolvi escrever este para mostrar a diferença.

Repare que as diferenças são muito poucas, mas aconselho que leia o post de envio simples para entender como este funciona e assim entender de modo mais “easy” como autenticar.

Para autenticar você terá que setar mais uma propriedade dizendo que é necessário autenticação:

props.put("mail.smtp.auth", "true");

No modo simples para pegar a sessão se faz assim:

Session session = Session.getDefaultInstance(props, null);
//o null que mudará

Para passar o usuário e a senha faça deste modo:

Authenticator auth = new Authenticator(){

	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication("usuario", "senha");
	}
};
Session session = Session.getDefaultInstance(props, auth);

E ai está, as diferenças são apenas essas, o resto é igualzinho.

Segue o código completo

Read the rest of this entry »

 

Enviar email com Java

Email

O poder do Java é muito grande, você poderia desenvolver um webmail em Java. Existem até exemplos na internet de como se fazer isso, não é o objetivo deste post, mas sim dar uma introdução básica de como Enviar Email com Java.

Importante: Antes de sair copiando o código, colando no seu projeto e testando, preste atenção nessas poucas observações, entenda primeiro e faça depois, garanto que você terminará mais rápido do que se tivesse apenas usado a técnica do: CTRL+C CTRL+V.

Primeiro de tudo: você precisará da API JavaMail que poderá ser baixada aqui: JavaMail

Endereço SMTP: mude para o domínio do seu email (exemplo: smtp.gmail.com), caso necessário pergunte ao administrador do servidor de email o endereço smtp:

props.put("mail.smtp.host", "mail.seudominio.com.br");

Tipo da mensagem email: nesse caso foi definido como html:

mensagem.setContent(msg, "text/html;charset=ISO-8859-1");

Debug: importante para verificar erros e ver se ocorreu tudo certo:

session.setDebug(true);

Múltiplos endereços: o Javamail permite o envio para mais de um destinatário ao mesmo tempo, mas, como aqui a ideia é enviar para apenas um, ficou assim:

Address to[] = new InternetAddress[1];
to[0] = new InternetAddress(para);

Código completo:

Read the rest of this entry »

 

Não sabe? Pergunta pro pai!

Não sabe? pergunta pro pai!Não sabe? pergunta pro pai! http://pt-br.lmgtfy.com/?q=linux

Muitas vezes as pessoas querem aprender sobre algum assunto ou sanar alguma dúvida, e por falta de conhecimento (ou preguiça mesmo), nem se dão o trabalho de pesquisar um pouco (só um pouco) e já saem pelos fóruns a fora a criar posts, que estão cheios de perguntas igualzinhas (muitas das vezes até no título). Se tivessem dado uma pesquisada rápida no “Pai” teriam encontrado o que procuravam, sem ter que incomodar ninguém e garanto que se sentiriam melhor por isso. Acaba se tornando muito mais cômodo perguntar para alguém ou para algum fórum e esperar que seja respondido do que ir realmente atrás e procurar o que se precisa.

Devemos nos acostumar e pregar a cultura do faça você mesmo, pesquise, se inteire do assunto e aprenda de verdade.

Não estou falando que não devemos ajudar os outros, não é isso, alias eu adoro(adoro mesmo) ajudar, porem, as vezes o melhor não é dar o peixe a quem tem fome, mas sim ensina-lo à pescar.
O trabalho dos fóruns também é super importante, eu mesmo dou meus pitacos as vezes no Guj, Vivaolinux, PortalJava e por ai vai, só não participo mais porque existem pessoas mais capacitadas do que eu por esse lugares.

Esses dias descobri até este jeitinho aqui: http://pt-br.lmgtfy.com/?q=java para resolver o problema dessas pessoas(e das nossas também). Esse link muito bacana que está acima quem me passou foi o @fabianocne. Quando alguém lhe perguntar algo mostre esse jeito bacana de se encontrar as coisas de que precisamos saber mais um pouco.

Deixo aqui a minha opinião, o que vocês acham?
E não se esqueçam: Não sabe? Pergunta pro pai!