Com uma única biblioteca, você pode monitorar uma série de métricas do sistema e garantir que tudo esteja funcionando perfeitamente.
A maioria das organizações depende fortemente da sua infraestrutura de TI para executar as suas operações. Falhas não planejadas do sistema ou degradação do desempenho podem levar a interrupções, perdas financeiras e danos à reputação.
As verificações automatizadas da integridade do sistema são cruciais para garantir que a infraestrutura de TI permaneça estável e confiável. Ao monitorar métricas críticas e detectar anomalias imediatamente, você pode minimizar o tempo de inatividade.
Definição de verificações de integridade
É essencial definir quais verificações de integridade você deseja realizar em seu sistema. Você deve estabelecer critérios claros sobre o que irá monitorar e por quê. Comece identificando os objetivos principais do seu sistema. Que funções ou serviços ele oferece?
Em seguida, defina benchmarks de desempenho com base em dados históricos e garanta que suas verificações de integridade avaliem o uso eficiente dos recursos do sistema. Finalmente, defina os limites que indicam um problema. Qual porcentagem de uso de recursos você considera alta ou baixa? Em que momento o sistema deve disparar um alerta?
Escolhendo Bibliotecas e Configurando Seu Ambiente
Para automatizar o processo de monitoramento do sistema em Python, você precisará das seguintes bibliotecas para ajudá-lo a coletar métricas do sistema e agendar as verificações.
- psutil: Esta é uma biblioteca multiplataforma que fornece uma interface para recuperação de informações sobre a utilização do sistema (CPU, memória, discos, rede, sensores).
- agendar: esta biblioteca fornece uma maneira simples de agendar tarefas para execução em intervalos específicos.
- tempo: uma biblioteca integrada do Python que você usará para operações relacionadas ao tempo.
- exploração madeireira: outra biblioteca integrada que você usará para criar logs das verificações de integridade do sistema.
Comece a configurar as coisas criando um novo ambiente virtual Python. Isso evitará possíveis conflitos de biblioteca de versões. Em seguida, execute o seguinte comando de terminal para instale as bibliotecas necessárias com Pip:
pip install psutil schedule
Depois que as bibliotecas estiverem instaladas em seu sistema, seu ambiente estará pronto.
O código-fonte completo está disponível em um Repositório GitHub.
Importando as bibliotecas necessárias
Crie um novo roteiro, monitoramento.pye comece importando as bibliotecas necessárias:
import psutil
import schedule
import time
import logging
A importação das bibliotecas permitirá que você use a funcionalidade que elas oferecem em seu código.
Registro e relatórios
Você precisa de uma maneira de registrar os resultados de seus exames de saúde. O registro serve como uma ferramenta vital para capturar e preservar um registro histórico de eventos e depurando problemas em seu código. Ele também desempenha um papel crítico na análise de desempenho.
Use a biblioteca de log integrada para criar seus logs para este projeto. Você pode salvar as mensagens de log em um arquivo chamado system_monitor.log.
# Function to log messages
deflog_message(message):
# Configure logging
logging.basicConfig(filename='system_monitor.log', level=logging.INFO,
format='%(asctime)s - %(message)s')
logging.info(message)
Para relatórios, imprima uma mensagem de alerta no console para servir como notificação imediata sobre quaisquer problemas que exijam atenção.
# Function to print alerts to the console
defprint_alert(message):
print(f"ALERT: {message}")
As funções de verificação de integridade usarão essas funções para registrar e relatar suas descobertas relevantes.
Criando funções de verificação de integridade
Para cada verificação de integridade, defina uma função que encapsulará um teste específico que avalia um aspecto crítico da sua infraestrutura.
Monitoramento de uso de CPU
Comece definindo uma função que monitorará o uso da CPU. Isso servirá como um indicador crítico do desempenho geral e da utilização de recursos de um sistema. O uso excessivo da CPU leva a lentidão do sistema, falta de resposta e até travamentos, interrompendo gravemente serviços essenciais.
Ao verificar regularmente o uso da CPU e definir limites apropriados, os administradores de sistema podem identificar gargalos de desempenho, processos que consomem muitos recursos ou possíveis problemas de hardware.
# Health check functions
defcheck_cpu_usage(threshold=50):
cpu_usage = psutil.cpu_percent(interval=1)
if cpu_usage > threshold:
message = f"High CPU usage detected: {cpu_usage}%"
log_message(message)
print_alert(message)
A função verifica o uso atual da CPU do sistema. Se o uso da CPU exceder o limite em porcentagem, ele registrará uma mensagem indicando alto uso da CPU e imprimirá uma mensagem de alerta.
Monitoramento de uso de memória
Defina outra função que monitorará o uso de memória. Ao monitorar regularmente a utilização da memória, você pode detectar vazamentos de memória, processos que exigem muitos recursos e possíveis gargalos. Este método evita lentidão, travamentos e interrupções do sistema.
defcheck_memory_usage(threshold=80):
memory_usage = psutil.virtual_memory().percent
if memory_usage > threshold:
message = f"High memory usage detected: {memory_usage}%"
log_message(message)
print_alert(message)
Semelhante à verificação de uso da CPU, você define um limite para alto uso de memória. Se o uso da memória ultrapassar o limite, ele registrará e imprimirá um alerta.
Monitoramento de espaço em disco
Defina uma função que monitorará o espaço em disco. Ao monitorar continuamente a disponibilidade de espaço em disco, você pode resolver possíveis problemas decorrentes do esgotamento de recursos. Ficar sem espaço em disco pode resultar em falhas no sistema, corrupção de dados e interrupções de serviço. As verificações de espaço em disco ajudam a garantir que haja capacidade de armazenamento suficiente.
defcheck_disk_space(path='/', threshold=75):
disk_usage = psutil.disk_usage(path).percent
if disk_usage > threshold:
message = f"Low disk space detected: {disk_usage}%"
log_message(message)
print_alert(message)
Esta função examina o uso do espaço em disco de um caminho especificado. O caminho padrão é o diretório raiz /. Se o espaço em disco ficar abaixo do limite, ele registra e imprime um alerta.
Monitoramento de tráfego de rede
Defina uma função final que monitorará o fluxo de dados do seu sistema. Ajudará na detecção precoce de picos inesperados no tráfego de rede, que podem ser indicativos de violações de segurança ou problemas de infra-estrutura.
defcheck_network_traffic(threshold=100 * 1024 * 1024):
network_traffic = psutil.net_io_counters().bytes_recv +\
psutil.net_io_counters().bytes_sent
if network_traffic > threshold:
message = f"High network traffic detected: {network_traffic:.2f} MB"
log_message(message)
print_alert(message)
A função monitora o tráfego de rede somando os bytes enviados e recebidos. O limite está em bytes. Se o tráfego de rede exceder o limite, ele registrará e imprimirá um alerta.
Implementando Lógica de Monitoramento
Agora que você tem as funções de verificação de integridade, basta chamar cada uma delas a partir de uma função de controlador. Você pode imprimir a saída e registrar uma mensagem sempre que esta verificação geral for executada:
# Function to run health checks
defrun_health_checks():
print("Monitoring the system...")
log_message("Running system health checks...")check_cpu_usage()
check_memory_usage()
check_disk_space()
check_network_traffic()
log_message("Health checks completed.")
Esta função executa todas as verificações de integridade, fornecendo uma visão unificada do status de integridade do seu sistema.
Agendamento de verificações automatizadas e execução do programa
Para automatizar o monitoramento em intervalos específicos, você usará a biblioteca de agendamento. Você pode ajustar o intervalo conforme necessário.
# Schedule health checks to run every minute
schedule.every(1).minutes.do(run_health_checks)
Agora execute o processo de monitoramento do sistema em um loop contínuo.
# Main loop to run scheduled tasks
whileTrue:
schedule.run_pending()
time.sleep(1)
Este loop verifica continuamente as tarefas agendadas e as executa quando chega a hora. Ao executar o programa a saída é a seguinte:
O programa registra os logs de monitoramento no system_monitor.log arquivo e exibe um alerta no terminal.
Avançando no Programa de Monitoramento do Sistema
Essas verificações de monitoramento não são as únicas suportadas pelo psutil. Você pode adicionar mais funções de monitoramento, usando uma abordagem semelhante, para atender às suas necessidades.
Você também pode melhorar a função de relatório para usar email em vez de enviar uma mensagem simples no console.