Monitoramento de Servidores com Python usando psutil

O psutil é uma biblioteca Python cross-plataforma projetada para acessar informações sobre processos em execução e utilização de recursos do sistema, incluindo CPU, memória, disco, rede e sensores. Ela permite monitoramento detalhado do sistema, aálise de desempenho, controle de recursos de processos e gerenciamento de tarefas, substituindo a necessidade de comandos shell como ps, top ou df. O psutil suporta diversas plataformas, como Linux, Windows, macOS, FreeBSD, OpenBSD, NetBSD, Solaris e AIX, funcionando em Python 2.6 a 3.6 em arquiteturas de 32 e 64 bits, além de PyPy.

Instalação

Para instalar o psutil, utilize o gerenciador de pacotes pip. Os exemplos a seguir assumem o Python 3.6.

# Instalação via pip
pip install psutil

Funções Básicas

Primeiro, importe a biblioteca e verifique a versão instalada:

import psutil
versao_psutil = psutil.version_info
print(versao_psutil)  # Saída: (5, 4, 3)

Monitoramento de CPU

Para obter informações sobre o processador:

# Núcleos lógicos e físicos
num_logico = psutil.cpu_count()
num_fisico = psutil.cpu_count(logical=False)
print(f"Núcleos lógicos: {num_logico}, Físicos: {num_fisico}")

# Tempo de CPU (usuário, sistema, ocioso)
tempos_cpu = psutil.cpu_times()
print(tempos_cpu)

# Uso de CPU por núcleo, semelhante ao comando top
uso_nucleos = psutil.cpu_percent(percpu=True)
print(uso_nucleos)

# Amostragem de uso de CPU ao longo do tempo
intervalo_amostras = []
for segundo in range(5):
    amostra = psutil.cpu_percent(interval=1, percpu=True)
    intervalo_amostras.append(amostra)
print(intervalo_amostras)

Monitoramento de Memória

Para acessar dados sobre memória RAM e swap:

# Memória virtual (RAM)
info_memoria = psutil.virtual_memory()
print(info_memoria)

# Memória swap
info_swap = psutil.swap_memory()
print(info_swap)

Monitoramento de Disco

Consulte partições, uso de espaço e operações de I/O:

# Listar partições
particoes = psutil.disk_partitions()
print(particoes)

# Uso de uma partição específica
uso_disco = psutil.disk_usage('/')
print(uso_disco)

# Contadores de I/O do disco
io_disco = psutil.disk_io_counters()
print(io_disco)

Monitoramento de Rede

Obtenha detalhes sobre interfaces de rede e tráfego:

# Status das interfaces de rede
stats_rede = psutil.net_if_stats()
interface_en0 = stats_rede.get("en0")
print(interface_en0)

# Endereços das interfaces
enderecos_rede = psutil.net_if_addrs()
enderecos_en0 = enderecos_rede.get("en0")
for endereco in enderecos_en0:
    print(endereco.address)

# Contadores de I/O de rede (bytes e pacotes)
io_rede = psutil.net_io_counters()
print(io_rede)

# Conexões de rede (requer privilégios elevados)
try:
    conexoes = psutil.net_connections()
    print(conexoes)
except psutil.AccessDenied:
    print("Acesso negado. Execute como administrador.")

Monitoramento de Processos

Acesse informações sobre processos em execução:

# Listar IDs de processos
lista_pids = psutil.pids()
print(f"Número de processos: {len(lista_pids)}")

# Informações de um processo específico pelo PID
pid_exemplo = 1  # Altere para um PID válido
processo = psutil.Process(pid_exemplo)
print(f"Nome: {processo.name()}, Caminho: {processo.exe()}")

# Comando de inicialização e contagem de threads
comando = processo.cmdline()
threads = processo.num_threads()
print(f"Comando: {comando}, Threads: {threads}")

# Variáveis de ambiente do processo (use com cautela)
try:
    ambiente = processo.environ()
    print(ambiente)
except psutil.AccessDenied:
    print("Permissão negada para acessar variáveis de ambiente.")

Tags: psutil Python Monitoramento servidor sistema

Publicado em 7-3 06:46