Archive for agosto, 2008

Nagios uma simples dissertação

agosto 31, 2008

Muito se fala sobre o Nagios, muitos software cópiam o Nagios. Agora que tenho uma experiência mais longa com ele, pude entender (isso é minha visão, convensa-me do contrário), que não exista melhor software de monitoração que ele.

Sua codificação é simples, escrito em C, licenciado pela GPL 2, possibilita uma forma simples de mudar ele todo para atender sua necessidade.

Recentemente estava em um evento sobre Nagios em São Paulo, e algumas coisas me chamaram a atenção, sendo elas o que eu gostaria de ressaltar.

Rotação de Logs:

Não é necessário usar o logrotate para gerenciamento dos logs do Nagios, ele mesmo tem um método de rotação de logs. Sendo que esses logs são armazenados no diretório que você define na variável : log_archive_path, no arquivo principal de configuração: nagios.cfg.

Posteriormente os logs armazenados no log_archive_path, são usados para gerar estatísticas de SLA, que são obtidos pela intercafe web do Nagios.

São 5 formas para rotação dos Logs, que você defini na variável : log_rotation_method=x, onde x é o metódo escolhido:

n = Nunca rotacionar os logs

h = rotação a cada hora cheia

d = rotação diária, sempre a meia-noite

w = rotação semanal, sempre a meia-noite do sábado

m = rotação mensal, sempre a meia-noite do último dia do mês.

Intervalo de checagem:

Acredito que esse seja um dos pontos que mais gerou dúvidas entre os participantes do evento, o que terminou com essa frase: “O Nagios tem um intervalo de 3 minutos sempre!”.

Isso não é verdade, o processo de checagem do Nagios trabalha usando Delay ou não. Isso funciona dependendo do metódo selecionado na variável: service_inter_check_delay_method .

service_inter_check_delay_method é onde você define para os serviços como será o tipo de delay do Nagios; para os hosts também existe este método : host_inter_check_delay_method.

No caso, os mesmos são checados de acordo com a seguintes lógicas:

Existe um número máximo de checagens de serviços e hosts concorrentes, definidos pelas variáveis: max_service_check_spread e max_host_check_spread. Sendo que quando essa variável é definida como 0, é ilimitado.

Além disto, o Nagios realiza um cálculo para controle das checagens evitando sobrecarga de CPU. Essa é a configuração padrão do Nagios, ou seja, smart.

A definição dos intervalos ficam nas variáveis: service_inter_check_delay_method, para serviços e host_inter_check_delay_method, para hosts.

A idéia do smart é:

delay = ( intervalo dos serviços / total de serviços )

delay receberá o tempo de esperá que cada serviços terá na fila de uma nova checagem.

Assim, se você usa no Nagios o smart para controlar o delay da checagem, siginifica que o intervalo de checagem de seus serviços e dado pela conta acima.

Outros metódos são:

None – não usar delay entre as checagens

Dump – Todas as checagens são marcadas ao mesmo tempo, não é indicado para usar em produção

x.xx – onde você defini o intervalo em segundos

Conclusão disso, a demora na checagem é relacionada ao metódo que você optou, intervalo das checagens e total de serviços ou hosts que seram checados.

Existem mais coisas que foi conversado no evento que ainda vou postar aqui, mas por enquanto é isso. A cada dia aprendo algo novo no Nagios, lendo sua documentação e seu código fonte, acredito que não exista melhor fonte que essas.

Anúncios

Pam + Ruby = rpam

agosto 10, 2008

Recentemente tive a necessidade de autenticar usuários no pam com o ruby. Não encontrei nada que pudesse atender minha necessidade, então resolvi fazer com minhas próprias mãos.

Solicitei o projeto no RubyForge, e escrevi uma extensão nativa para o Ruby, integrando com a API do pam.

Resultado disso,  um função simples que realiza a checagem de autenticação de usuários com o pam.

Página do projeto:

http://rubyforge.org/projects/rpam/

SVN:

svn checkout http://rpam.rubyforge.org/svn/

Para usar a classe, basta instalar a gem:

gem install rpam

ou baixar o source,  e compilar como uma extensão nativa do ruby:

tar -zxvf Rpam-1.0-0.tar.gz

cd Rpam-1.0-0/ext/Rpam

ruby extconf.rb

make

make install

É necessário copiar o arquivo login do pam para rpam:

cp /etc/pam.d/login /etc/pam.d/rpam

Veja um exemplo de chamada:

#!/usr/bin/ruby

require ‘rpam’

include Rpam

if authpam(“usuário”,”senha”) == true

puts “Autenticação OK”

else

puts “Não Autenticado”

end

A função authpam(), apenas retorna verdadeiro se a autenticação for bem sucedida, e falsa no caso contrario.

Tanto a gem com o source podem ser baixado na página do projeto :)

Sugestões, criticas, elogias ou ajuda no desenvolvimento são bem vindas.

Executando comandos com popen()

agosto 2, 2008

Aqui um simples exemplo de como executar um comando com popen():

#include <stdio.h>
#include <stdlib.h>

int
main(void) {
FILE *fp;
int pclose_result=0;
char output[1024];

fp=popen(“/bin/ls”,”r”) ;

if(fp==NULL){
printf(“Erro ao executar o comando\n”);
exit(EXIT_FAILURE);
}

while(fgets(output,sizeof(output)-1,fp)){
printf(“%s”,output);
}

pclose_result=pclose(fp);

printf(“\nRetorno: %d \n”,pclose_result);

}