Script de monitoramento do servidor Python

Script de monitoramento do servidor Python

O script de monitoramento do servidor Python permite monitorar se o seu servidor ou computador estiver ativo e em execução. Pode mostrar quanto tempo de inatividade seu computador ou servidor teve. Usaremos os soquetes do servidor para verificar se a porta específica em um servidor está aberta ou não, o comando ping para monitorar um computador regular simples e o SSL para verificar se o servidor específico requer uma conexão SSL ou não. Para o monitoramento do servidor, eu tenho usado o Ferramenta de intérprete de código do Visual Studio.

Crie python de arquivo.py

Abra o intérprete Python e crie um novo arquivo nomeado Servidor.py e salvou -o em um local específico, onde pode ser acessado facilmente. Quando o arquivo for criado, adicione alguns comandos de importação para importar pacotes importantes da seguinte forma:

  • Soquete: Para conectar -se a diferentes servidores em um determinado soquete por uma porta específica
  • Ssl: Necessário para o embrulho da conexão do soquete
  • Data hora: Usado para verificar a que horas o servidor estava inativo ou ativo
  • Salmoura: Usado para salvar o histórico do computador e o tempo de atividade do computador, além de propagar os dados de Run para Run com este programa
soquete de importação
importar ssl
Do DateTime Import DateTime
importar picles

Estamos usando o plataforma e subprocesso pacotes, que nos dirão qual sistema operacional estamos executando, e.g., Unix ou janelas.

Subprocess de importação
plataforma de importação

Crie uma classe de servidor

Vamos criar uma classe chamada Servidor() e construiu um primeiro método, que é um método construtor. Adicionamos alguns atributos para o servidor, e.g., Qualquer UNIX ou computador comum. Vamos dar uma olhada em cada um:

  • Nome: especifique o nome de um servidor
  • Porta: o número da porta ao qual queremos conectar
  • Conexão: diz o tipo de conexão, e.g., Ssl ou ping
  • Prioridade: Diga -nos a prioridade do servidor, e.g., Você pode definir alertas se definir prioridade
  • História: Para manter a lista de histórico do servidor
  • Alerta: Se você quiser enviar alertas para o seu e -mail
Class Server ():
def __init __ (self, nome, porta, conexão, prioridade):
auto.nome = nome
auto.porta = porta
auto.conexão = conexão.mais baixo()
auto.prioridade = prioridade.mais baixo()
auto.história = []
auto.alerta = false

Crie um método para verificar a conexão

Então, para testar a conexão do servidor, criamos outro método na classe server () denominado check_connection (). Neste método, temos que definir três variáveis ​​como:

  • Msg: Usado para exibir uma mensagem se a conexão estabelecida ou falhou que estiver inicialmente vazia
  • Sucesso: usado para dizer se a conexão é bem -sucedida ou não
  • Agora: receberá a data e hora atuais enquanto verificará a conexão
def check_connection (self):
msg = ""
sucesso = false
agora = datetime.agora()

Agora escreva o código abaixo no mesmo arquivo e usando o Tente declaração, Estamos verificando a conexão para diferentes tipos de conexão de servidores, e.g. simples, SSL e ping. Nisso Tente declaração, Temos a declaração se tendo uma conexão de simples tipo. Ele criará uma conexão com o fornecido nome e qualquer porta número que você forneceu. Se a conexão for bem -sucedida, ele gerará um mensagem de sucesso, e.g., msg. Vai virar o Sucesso variável para Verdadeiro e nenhum alerta será enviado para e -mail. Nós temos else if declaração com um tipo de conexão diferente, e na última declaração se temos um ping () função chamada. No Exceto declaração, Se o soquete estiver sem tempo, uma conexão é recusada, ou qualquer outra coisa, ele exibirá um mensagem de falha.

tentar:
se eu.conexão == "simples":
soquete.create_connection ((self.nome, eu.porta), tempo limite = 10)
msg = f "self.nome está em alta. Na porta self.porta com self.conexão"
sucesso = true
auto.alerta = false
elif eu.conexão == "ssl":
ssl.wrap_socket (soquete.create_connection (
(auto.nome, eu.porta), tempo limite = 10))
msg = f "self.nome está em alta. Na porta self.porta com self.conexão"
sucesso = true
auto.alerta = false
outro:
se eu.ping ():
msg = f "self.nome está em alta. Na porta self.porta com self.conexão"
sucesso = true
auto.alerta = false
exceto soquete.tempo esgotado:
msg = f "servidor: self.Nome Timeout. Na porta self.porta"
Exceto (ConnectionRefusedError, ConnectionReSeterror) como e:
msg = f "servidor: self.nome e "
Exceto exceção como e:
msg = f "sem pista??: e "

Por outro lado, se o status de sucesso e alerta são Falso, vai mudar para Verdadeiro e envie um alerta para o e -mail fornecido e ligue para o create_history () função para criar um história.

Se sucesso == FALSE E SI.alerta == false:
# Enviar alerta
auto.alerta = true
email_alert (self.nome, f "msg \ n agora", "[email protected] ")
auto.create_history (msg, sucesso, agora)

Defina um método para criar história

No Método create_history (), nós anexamos alguns atributos com o máximo limite definido, e se a história O limite excede, ele vai excluir o mais velho.

def create_history (self, msg, sucesso, agora):
history_max = 100
auto.história.Anexar ((msg, sucesso, agora))
Enquanto Len (eu.história)> history_max:
auto.história.pop (0)

Defina a função de ping para conectar

O ping () função vai ping no servidor ou computador. Se o ping for bem-sucedido, será gerado verdadeiro e se a conexão fracassado, Vai retornar Falso.

Def Ping (self):
tentar:
saída = subprocesso.check_output ("ping - 1 ".formato ('n' se plataforma.sistema(
).inferior () == "windows" else 'c', self.nome), shell = true, universal_newlines = true)
Se 'inacessível' na saída:
retorna falso
outro:
retornar verdadeiro
Exceto exceção:
retorna falso

Crie lista de servidores

Agora temos que garantir que estamos executando o programa principal. O IF-statement verificará se é o programa principal ou não. O Tente declaração vai carregar o servidor arquivo de picles Se já existe. Se não existir, o Exceto declaração vai ficar todo nova lista de servidores. Para qualquer um dos servidores, conexões vai ser verificado E a história será salva. Por outro lado, temos que salvar nosso dados para o picles arquivo usando o jogar fora declaração.

Se __name__ == "__main__":
tentar:
servidores = picles.Carregar (abrir ("servidores.Pickle "," RB "))
exceto:
servidores = [
Servidor ("Reddit.com ", 80," Plain "," High "),
Servidor ("msn.com ", 80," Plain "," High "),
Servidor ("SMTP.Gmail.com ", 465," SSL "," High "),
Servidor ("192.168.1.164 ", 80," Plain "," High "),
Servidor ("Yahoo.com ", 80," Plain "," High "),
]
para servidor nos servidores:
servidor.check_connection ()
Imprimir (Len (servidor.história))
servidor de impressão.História [-1])
salmoura.despejo (servidores, aberto ("servidores.Pickle "," WB "))

A saída abaixo será mostrada ao executar este arquivo.

Crie arquivo para adicionar informações

Crie um novo arquivo chamado adicionar.py e importar pacote de picles e servidor de classe do arquivo antigo Servidor.py. Este arquivo abrirá o arquivo em picles e solicitará que você adicione algumas informações adicionais sobre o servidor como o código é mostrado abaixo.

importar picles
Do servidor servidor servidor
servidores = picles.Carregar (abrir ("servidores.Pickle "," RB "))
print ("Exemplo para adicionar servidor")
serverName = input ("Digite o nome do servidor:")
porta = int (entrada ("Digite um número da porta como inteiro:")))
conexão = entrada ("Digite um tipo Ping/Plain/SSL:")
prioridade = entrada ("Digite prioridade alta/baixa:")
new_server = servidor (nome do servidor, porta, conexão, prioridade)
servidores.Anexar (new_server)
salmoura.despejo (servidores, aberto ("servidores.Pickle "," WB "))

Quando você executa este arquivo, você obterá a saída abaixo e ele solicitará que você adicione o nome do servidor, porta, tipo de ping e prioridade.

Enquanto, quando você executa o servidor.arquivo py novamente, você obterá as informações sobre o servidor antigo, bem como o histórico do novo servidor que você forneceu na imagem acima.

Crie arquivo para alertas do Gmail

Agora crie um novo arquivo chamado Gmail.py e importar alguns pacotes necessários. Em seguida, crie um método chamado email_alert () Isso cria um alerta Para enviar no e-mail ao fornecer e -mail e senha Informação.

importar smtplib
do email.Mensagem importar emailMessage
def email_alert (sujeito, corpo, para):
msg = emailMessage ()
msg.set_content (corpo)
gmail_user = '[email protected] '
gmail_password = 'get_app_password'
msg ['sujeito'] = sujeito
msg ['de'] = "[email protected] "
msg ['para'] = para
s = smtplib.Smtp ('smtp.Gmail.com ', 587)
s.ehlo ()
s.startTls ()
s.Login (gmail_user, gmail_password)
s.send_message (msg)
s.desistir()
se __name__ == '__main__':
email_alert ("teste", "https: // discord.GG/CAWW5QQ "," [email protected] ")

Agora vá para o Servidor.arquivo py e importar o email_alert () Método do Gmail.arquivo py.

De Gmail Imporpt Email_alert

Você pode adicionar seu endereço de email Sempre que necessário no código. Agora execute o Servidor.py Arquivo e verifique a saída mostrada no terminal do intérprete Python.

Crie um arquivo para obter estatísticas

Agora você tem que criar Outro arquivo python nomeado get_stats.py dentro do mesmo diretório. Este arquivo importou o Classe do servidor de Servidor.py arquivo. O código escrito abaixo olhará sobre o nosso arquivo de picles, que é carregado, e imprimir a história de cada servidor e quanto esse servidor em particular tem tempo de atividade.

importar picles
Do servidor servidor servidor
servidores = picles.Carregar (abrir ("servidores.Pickle "," RB "))
para servidor nos servidores:
server_up = 0
para ponto no servidor.história:
Se ponto [1]:
Server_up += 1
print (f "---------- \ n servidor.Nome está UP Server_up / Len (servidor.History) * 100 \ Ntotal History: Len (servidor.história) \ n ---------- \ n ")

Quando você executa este arquivo em particular, você verá um histórico total de cada servidor e seu tempo de atividade também.

Conclusão

Tentamos e aprendemos com sucesso o script de monitoramento do servidor Python em nosso intérprete de código do Visual Studio para obter informações sobre vários servidores.