Como automatizar o monitoramento do sistema usando Python
A maioria das organizações depende fortemente da sua infraestrutura de TI para executar as suas operações. As falhas não planeadas do sistema ou a degradação do desempenho podem levar a interrupções, perdas financeiras e danos à reputação.
Um sistema automatizado para a realização de avaliações periódicas da saúde é essencial para garantir a estabilidade e a fiabilidade da infraestrutura de tecnologias de informação de uma organização. Através do acompanhamento contínuo de indicadores vitais e da identificação atempada de quaisquer desvios dos padrões normais, o potencial para períodos prolongados de interrupção operacional pode ser significativamente reduzido.
Definição de controlos de saúde
Para avaliar eficazmente o bem-estar de um determinado sistema, é imperativo determinar quais os controlos de saúde considerados necessários. Isto implica estabelecer directrizes explícitas relativamente aos parâmetros que serão observados de perto, bem como delinear a lógica subjacente a essa monitorização. Para iniciar este processo, é necessário começar por identificar os objectivos globais do sistema em questão. Que funcionalidades ou ofertas oferece?
Para estabelecer métricas de desempenho eficazes para a sua infraestrutura de TI, é crucial estabelecer linhas de base, analisando as tendências passadas na utilização do sistema. Isto permitir-lhe-á determinar os níveis adequados de consumo de recursos e identificar potenciais estrangulamentos. Além disso, a definição de critérios específicos para quando os alertas são accionados pode ajudar os administradores a responder prontamente aos problemas antes que estes se agravem. Os valores limite para considerar a utilização de recursos como alta ou baixa podem variar dependendo de factores como padrões de carga de trabalho e capacidade disponível. É essencial considerar cuidadosamente estes parâmetros e comunicá-los claramente às equipas para manter o desempenho ideal do sistema.
Escolher bibliotecas e configurar o ambiente
Para implementar uma solução de monitorização automatizada do sistema utilizando Python, deve ser utilizado um conjunto de bibliotecas para recolher dados de desempenho do sistema e estabelecer pontos de controlo regulares. Estas bibliotecas permitem a execução eficiente de tarefas, garantindo uma avaliação fiável do desempenho.
Psutil é uma biblioteca versátil que permite aos utilizadores obter dados relativos ao desempenho do sistema em várias plataformas, incluindo a utilização da CPU, a atribuição de memória, a atividade do disco, a largura de banda da rede e as leituras dos sensores.
A presente biblioteca oferece um meio simples de organizar a execução de tarefas em períodos de tempo pré-determinados.
A biblioteca padrão Python possui um módulo incorporado chamado “time” que fornece funcionalidades relacionadas com a gestão e manipulação de dados temporais, tais como a recuperação da data e hora actuais, o cálculo de intervalos decorridos entre dois pontos no tempo, a definição de relógios do sistema e muito mais. Este módulo serve como um recurso essencial para aplicações que requerem capacidades de controlo de tempo na sua estrutura de software.
O módulo de registo Python serve como um utilitário integrado para gerar e manter registos de registo, permitindo aos programadores seguir e monitorizar o desempenho e o estado dos seus sistemas através da manutenção organizada de registos.
Para começar, estabeleça um novo ambiente virtual Python que mitigará possíveis discrepâncias nas versões da biblioteca. Em seguida, execute a instrução de terminal subsequente usando ‘Pip’ para instalar as bibliotecas necessárias.
pip install psutil schedule
Depois de as bibliotecas necessárias terem sido instaladas e configuradas com êxito no seu ambiente informático, pode continuar a utilizá-las com confiança para obter a funcionalidade pretendida.
O código-fonte completo pode ser acedido através de um repositórioGitHub, que fornece acesso fácil aos ficheiros e recursos do projeto para desenvolvimento ou modificação adicionais.
Importar as bibliotecas necessárias
Iniciar o desenvolvimento de um script Python inovador intitulado “monitoring.py” que começará com a importação de módulos e estruturas indispensáveis para a sua execução.
import psutil
import schedule
import time
import logging
De facto, o ato de importar estas bibliotecas permite a utilização das respectivas funcionalidades na base de código.
Registo e relatórios
Para acompanhar eficazmente os resultados dos seus exames de saúde, é essencial estabelecer um sistema de registo dessas informações. Esta prática serve não só para documentar e preservar um registo de ocorrências passadas, mas também para facilitar a identificação e resolução de quaisquer problemas que possam surgir no código. Além disso, a documentação completa através do registo pode contribuir significativamente para a avaliação da eficiência global.
Utilize a funcionalidade de registo incorporada para gerar registos para esta tarefa. As entradas de registo podem ser guardadas num ficheiro denominado “system\_monitor.log”.
# Function to log messages
def log_message(message):
# Configure logging
logging.basicConfig(filename='system_monitor.log', level=logging.INFO,
format='%(asctime)s - %(message)s')
logging.info(message)
Para facilitar a comunicação imediata relativamente a quaisquer preocupações prementes, recomenda-se a apresentação de uma indicação visual sob a forma de uma mensagem de alerta na consola do sistema para conhecimento e consideração instantâneos.
# Function to print alerts to the console
def print_alert(message):
print(f"ALERT: {message}")
As funções de controlo de saúde devem utilizar estas funcionalidades com o objetivo de registar e divulgar informações pertinentes.
Criar funções de verificação de estado de funcionamento
Para implementar verificações de estado de funcionamento eficazes para a infraestrutura de TI, recomenda-se a criação de funções separadas no sistema de monitorização que se concentrem no exame de aspectos cruciais do desempenho e estabilidade da rede. Ao isolar estes testes em funções dedicadas, pode acompanhar mais eficazmente o bem-estar de diferentes componentes e detetar potenciais problemas antes que estes se transformem em problemas maiores.
Monitorização do uso da CPU
A implementação de um mecanismo eficaz de monitorização do uso da CPU é fundamental para medir a eficiência operacional e a alocação de recursos de um determinado sistema. A deteção de níveis elevados de utilização da CPU pode ajudar a identificar potenciais estrangulamentos ou problemas que podem levar a uma diminuição do desempenho, a uma resposta lenta e, possivelmente, a falhas do sistema, o que pode prejudicar significativamente os serviços cruciais em que os utilizadores confiam.
Através da monitorização consistente da utilização da CPU e do estabelecimento de níveis de limiar adequados, os administradores de sistemas podem identificar obstáculos ao desempenho, procedimentos com muitos recursos ou suspeitas de problemas de hardware, identificando desvios dos padrões de comportamento esperados.
# Health check functions
def check_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 dada monitoriza a utilização atual da unidade central de processamento (CPU) no sistema. Caso a utilização da CPU ultrapasse um limiar pré-determinado expresso como um valor percentual, a função regista uma notificação que indica uma utilização elevada da CPU e apresenta uma mensagem de alarme no ecrã.
Monitorização da utilização da memória
A presente invenção fornece ainda um mecanismo para monitorizar a utilização da memória através da implementação de uma função adicional. O acompanhamento regular da utilização da memória permite a deteção de fugas de memória, a identificação de processos que consomem muitos recursos e a exposição de potenciais estrangulamentos. Ao implementar esta abordagem, é possível evitar abrandamentos do sistema, falhas e interrupções resultantes do consumo excessivo de memória ou da utilização ineficiente de recursos.
def check_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)
De forma comparável à monitorização da utilização da CPU, é estabelecido um limiar pré-determinado para níveis elevados de consumo de memória. Sempre que a acumulação de memória atinge ou ultrapassa este valor de referência, é gerado um registo de tal ocorrência e é emitida uma notificação para análise.
Monitorização do espaço em disco
Deve ser implementada uma função utilitária para avaliar consistentemente o espaço restante em disco.Através da observação contínua do espaço disponível em disco, podem ser mitigadas possíveis complicações decorrentes de recursos insuficientes. Um espaço em disco inadequado pode levar ao mau funcionamento do sistema, à corrupção de informações e à interrupção dos serviços. Avaliações periódicas do espaço em disco garantem a manutenção de uma ampla capacidade de armazenamento.
def check_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)
A presente função examina a capacidade de armazenamento alocada associada a um caminho de ficheiro designado. Por defeito, a localização em avaliação engloba o diretório primário representado pela representação simbólica “/”. Caso a quantidade de espaço disponível nesta área diminua para um nível pré-determinado, o sistema gera uma entrada de registo e emite um aviso sonoro.
Monitorização do tráfego de rede
Incorporar uma função de conclusão para supervisionar o fluxo de dados do seu sistema com o objetivo de identificar potenciais anomalias na atividade da rede numa fase inicial. Tais desvios podem significar intrusões de segurança ou discrepâncias técnicas e podem facilitar uma ação correctiva imediata.
def check_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 funcionalidade acima mencionada acompanha a atividade da rede calculando a quantidade agregada de bytes transmitidos e recebidos. Esta métrica é expressa em termos de medições de bytes. Caso o volume de tráfego da rede ultrapasse este limite predefinido, será gerada uma entrada de registo e apresentada uma notificação para indicar essa ocorrência.
Implementação da lógica de monitorização
A incorporação destas funções de verificação do estado de funcionamento numa função de controlador designada é uma abordagem eficaz. Ao executá-las sequencialmente, permite a impressão de informações relevantes e o registo de mensagens durante cada iteração do processo de avaliação abrangente.
# Function to run health checks
def run_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 operação específica realiza uma avaliação agregada do bem-estar geral da sua infraestrutura, executando várias verificações de saúde de uma forma coesa e abrangente, apresentando uma visão geral consolidada do estado atual da vitalidade do seu sistema.
Agendamento de verificações automáticas e execução do programa
Para facilitar a monitorização automática em períodos de tempo predeterminados, utilize a biblioteca Schedule. Isto permite flexibilidade na definição da frequência das actualizações, conforme necessário.
# Schedule health checks to run every minute
schedule.every(1).minutes.do(run_health_checks)
Para monitorizar continuamente o desempenho do seu computador, é necessário executar o processo de monitorização do sistema de forma contínua.
# Main loop to run scheduled tasks
while True:
schedule.run_pending()
time.sleep(1)
O ciclo acima mencionado persevera no seu exame das tarefas programadas e executa as que são devidas nos intervalos predeterminados.Após a execução do software, o ecrã revela os seguintes resultados:
O software mantém um registo das suas actividades de monitorização no ficheiro system\_monitor.log, ao mesmo tempo que gera um alerta que é apresentado na interface da linha de comandos.
Avançando o programa de monitoramento do sistema
O Psutil fornece recursos adicionais de monitoramento além dos listados aqui, permitindo a personalização com base em necessidades e preferências específicas.
Uma maneira possível de melhorar a funcionalidade do recurso de relatório é incorporar um sistema de notificação por e-mail, em vez de simplesmente exibir mensagens na interface de linha de comando. Isto permitiria aos utilizadores receber actualizações e alertas em tempo real sobre o desempenho do seu sítio Web diretamente nas suas caixas de entrada, facilitando a monitorização e a resolução de quaisquer problemas que possam surgir.