Como Monitorar Servidores E Estações De Usuários Em PHP

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.

servidor

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).


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 ::.

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

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

9 Responses

  1. 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

  2. Ó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.. .

  3. 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,

    1. como ele citou, voce fez as liberações no servidor de destino? se nao me engano configura no SNMP. vlwww

  4. 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]." "; #

  5. 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.

  6. 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!

Leave a Reply

Your email address will not be published. Required fields are marked *


Como Criar Um Site, Blog - WebMaster.pt