A primeira atitude que qualquer administrador de redes toma quando pretende analisar sua rede é verificar através de sistemas de monitoramento se seus Servidores e Estações de Usuários estão respondendo ok.
Uma das formas de se analisar é executando o comando ping que é um dos comandos DOS mais conhecidos.
Claro que existem vários métodos de se executar tais integridades, mas com certeza tudo se torna mais prático quando você tem um sistema que faz a varredura e lhe informa quando a estação não está online.
Na matéria de hoje estaremos mostrando como elaborar este tipo de sistema que pode gerenciar facilmente sua rede de computadores.
Criando A Lista De Servidores
Antes de nos preocuparmos em monitorar a rede, precisamos levantar informações sobre os terminais, tais como:
- Nome do Operador;
- Nome do Computador;
- IP do computador;
- Departamento que pertence;
- Tipo de máquina (se Servidor ou Estação de Usuário).
Após levantar tais informações, podemos elaborar uma lista que pode ser detalhada em .XLS ou algum outro documento que facilite nossos serviços, correto?
Para nossa solução, não muda muita coisa. Precisamos apenas organizar uma lista com o IP e NOME de cada computador.
Por esse motivo, estaremos criando um ficheiro com o nome “servidor.php” e organizando a lista com cada computador (conforme o ficheiro a seguir).
# IP : nome do servidor
# S -> servidor
# R -> roteador
# P -> impressora
$servidor[] = "187.108.192.23:empresasnainternet.com.br:S"; # servidor (S)
$servidor[] = "187.108.192.23:qsasolucoescorporativas.com.br:S"; # servidor (S)
$servidor[] = "187.108.192.23:repupo.com.br:S"; # servidor (S)
$servidor[] = "74.86.244.168:webmasterphp.org:S"; # servidor (S)
$servidor[] = "67.228.213.188:webmaster.pt:S"; # servidor (S)
$servidor[] = "192.168.0.2:samara:S"; # servidor (S)
$servidor[] = "192.169.0.10:roteador:R"; # roteador (R)
$servidor[] = "192.168.0.11:DNS2:P"; # impressora (P)
?>
OBS.: Acima montei um exemplo com alguns Servidores que monitoro.
É IMPORTANTE LEMBRAR QUE: Os Servidores só serão monitorados, caso a rede dê as permissões devidas.
Ex.: Em alguns Servidores Linux, você só consegue monitorar se um Servidor externo está funcionando, se houver a liberação devida.
Preenchido o conteúdo a ser monitorado, vamos agora criar a página onde as informações aparecerão.
Criando A Página De Apresentação
A página externa pode ser adaptada conforme suas necessidades.
Para esta matéria, usamos um conteúdo simples que pode facilitar suas atividades.
1 – Atualização da página
Para sua página manter uma atualização constante, disponibilizamos o código a seguir, que atualizará a cada 60 segundos.
2 – Email do Administrador
Na linha a seguir, você poderá inserir o email que receberá as mensagens com logs das atividades executadas:
$email_admin = "seu email";
Bem… veja abaixo o código da página “index.php” como deverá ficar:
WEBMASTER.PT
Redes de Computadores e o PHP
Monitoramento das estações / Servidores
".$linha[1]."
IP: ".$linha[0]."
"."Status:";
$server_out .= "Nome: ".$linha[1]."
IP: ".$linha[0]."
";
# Adiciono mais uma tentativa ao meu contador, um arquivo texto desse servidor
if(!file_exists("./".$linha[0].".txt")) shell_exec('touch '.$linha[0].".txt");
$fp = fopen("./".$linha[0].".txt", "r+");
$t = fread($fp,2);
fclose($fp);
# se já houve mais de 35 tentativas, envio um e-mail e zero o contador, lembrando que cada tentativa, tem um intervalo de 1 minuto
if($t >= 35){
$t = 3;
$alerta = "ATENÇÃO, OUTROS ALERTAS JÁ FORAM EMITIDOS PARA ESSE(S) SERVIDOR(S):";
}else
$t++;
# Caso seja o primeiro alerta (depois da 3ª tentativa ele envia um e-mail)
if($t == 4 && !$alerta)
$alerta = "PRIMEIRO ALERTA! (3ª tentativa)";
$fp = fopen("./".$linha[0].".txt", "w");
fwrite($fp, $t);
fclose($fp);
# Gravar Log Erro
$fp2 = fopen("./ERR_".date("d-m-Y").".txt", "a+");
$txt = "\n".date("d/m/Y - H:i:s")." \t\t".$linha[0]." \t\t".$linha[1];
fwrite($fp2, $txt);
fclose($fp2);
}
# se não houve erro, ele exclui o arquivo de texto (contador) caso esteja criado pois o servidor voltou a responder, então exibo a tela com as informações normais como nome, ip, status e o desenho.
else{
echo "
".$linha[1]."
IP: ".$linha[0]."
"."Status:";
# Apaga o arquivo caso esteja pingando
if(file_exists("./".$linha[0].".txt")) unlink("./".$linha[0].".txt");
$a = "A";
# gravo o acerto - só para ter um log
# Gravar Log Acerto
$fp2 = fopen("./OK_".date("d-m-Y").".txt", "a+");
$txt = "\n".date("d/m/Y - H:i:s")." \t\t".$linha[0]." \t\t".$linha[1];
fwrite($fp2, $txt);
fclose($fp2);
}
echo (ereg("bytes from",$stream))?" Ativo":" Não responde ao ping";
echo " ";
if($l == 4){
echo "
";
$l = 0;
}
}
# Preparando para o envio de e-mail
if(isset($server_out) && $server_out && isset($alerta) && $alerta){
if($f = 1) $server_out = "".$alerta."
Os Servidores abaixo encontram-se indisponível:
".$server_out;
if($f > 1) $server_out = "".$alerta."
Os Servidores abaixo encontram-se indisponíveis:
".$server_out;
# formatando um e-mail, com uma tabela e as informações a serem enviadas
$assunto = "ALERTA - Monitoramento de Servidores";
$msg = "
Alerta: ".date("d/m/Y - H:i:s")."
".$server_out."
Sistema de Monitoramento
QSA Soluções Corporativas
Este é um e-mail automático, por favor não responda essa mensagem.
";
//adicionando o html no corpo do email
echo "
";
//enviando e retornando o status de envio
if(mail($email_admin,$assunto,$msg))
echo "Alerta Enviado para (Seu email)";
else
echo "Houve um erro ao enviar o email! ".$mail->ErrorInfo;
echo " ";
}
}
?>
OBS.: O sistema deverá criar arquivos .txt que gravarão logs e informações das atividades executadas.
Caso você queira, poderá inserir novos recursos neste ficheiro. Só não se esqueça de efetuar liberações no Servidor para leitura das máquinas da Rede e o envio periódico das mensagens.
Download Do Código Usado Neste Tutorial: Como Monitorar Servidores E Estações De Usuários
9 Responses
Bom dia, obrigado pelo post. pesso que venha me ajudar pois não consegui, esta dando erro
IP: ".$linha[0]." "."Status:"; $server_out .= "Nome: ".$linha[1]." IP: ".$linha[0]." "; # Adiciono mais uma tentativa etc
Ótima materia, so precisa atualizar a function (ereg) do PHP, pois estamos no PHP5, para corrigir acho que deve fazer o uso da function (preg_match) para que ele funcione corretamente e também a tag do php no inicio do código <? para <?php.. .
Boa tarde, precisei fazer algumas alterações no index.php além das citadas acima como: if(!preg_match("/bytes from/",$stream)){ e echo (preg_match("/bytes from/",$stream))?" Ativo"
Após as alterações parou de dar os erros mas continua não pingando, mesmo na rede local:
DCIP: 10.1.1.1 Status: Não responde ao ping
No servidor onde está hospedado o código é possível pingar sem problemas
att,
como ele citou, voce fez as liberações no servidor de destino? se nao me engano configura no SNMP. vlwww
Também estou com o mesmo problema. Você conseguiu algo que resolvesse?
Bom dia, Parabens pelo post. pesso que venha me ajudar pois não consegui, esta dando o seguinte erro
IP: ".$linha[0]." "."Status:"; $server_out .= "Nome: ".$linha[1]." IP: ".$linha[0]." "; #
Fiz todas as alteraçoes mas continua não pingando, sera que alguem conseguiu consertar o codigo, estou tentando assim que consegui vou postar a solução.
Para corrigir o problema de status, basta alterar o texto "bytes from" para "Resposta de", pois o sistema em PHP busca a resposta do sistema operacional, e possível que o seu não esteja em inglês, e sim em português.
Aqui fiz a alteração e funcionou perfeitamente!
Werner……. Conseguiu fazer isso funcionar….?
HELP ME PLEASE