ساخت اسکریپت برای مانیتورینگ منابع سیستم با پایتون

ساخت اسکریپت برای مانیتورینگ منابع سیستم با پایتون

مانیتورینگ منابع سیستم، بخش حیاتی در مدیریت و نگهداری سرورها، ایستگاه‌های کاری و حتی دستگاه‌های IoT است. این فرآیند به ما امکان می‌دهد تا از عملکرد صحیح سیستم اطمینان حاصل کنیم، گلوگاه‌ها را شناسایی کرده و از بروز مشکلات جدی جلوگیری کنیم. پایتون، با کتابخانه‌های قدرتمند و سهولت استفاده، ابزاری ایده‌آل برای ساخت اسکریپت‌های مانیتورینگ سیستم است. این مقاله به آموزش گام به گام ساخت یک اسکریپت مانیتورینگ منابع سیستم با پایتون می‌پردازد و در دسته بندی ‘اتوماسیون و اسکریپت‌نویسی’ قرار می‌گیرد.

پیش‌نیازها

قبل از شروع، اطمینان حاصل کنید که پایتون بر روی سیستم شما نصب شده است. همچنین، برای نمایش گرافیکی اطلاعات، کتابخانه‌های زیر را نصب کنید:

  • psutil: برای جمع‌آوری اطلاعات مربوط به CPU، حافظه، دیسک و شبکه.
  • matplotlib: برای رسم نمودارها و نمایش گرافیکی داده‌ها.

می‌توانید این کتابخانه‌ها را با استفاده از pip نصب کنید:

pip install psutil matplotlib

جمع‌آوری اطلاعات سیستم با psutil

کتابخانه psutil (process and system utilities) یک رابط کراس پلتفرم برای جمع‌آوری اطلاعات سیستم ارائه می‌دهد. با استفاده از این کتابخانه، می‌توان به راحتی به اطلاعاتی مانند درصد استفاده CPU، میزان حافظه آزاد و استفاده شده، فضای دیسک، آمار شبکه و اطلاعات فرآیندهای در حال اجرا دسترسی پیدا کرد.

درصد استفاده CPU

برای دریافت درصد استفاده CPU، از تابع cpu_percent() استفاده می‌کنیم. این تابع، درصد استفاده CPU را در یک بازه زمانی مشخص برمی‌گرداند. به عنوان مثال:

import psutil

cpu_usage = psutil.cpu_percent(interval=1)
print(f"CPU Usage: {cpu_usage}%")

پارامتر interval مشخص می‌کند که درصد استفاده CPU در چه بازه زمانی محاسبه شود. مقدار پیش‌فرض آن 1 ثانیه است.

میزان حافظه

برای دریافت اطلاعات مربوط به حافظه، از کلاس virtual_memory() استفاده می‌کنیم. این کلاس، اطلاعاتی مانند کل حافظه، حافظه آزاد، حافظه استفاده شده و حافظه بافر را ارائه می‌دهد.

import psutil

vm = psutil.virtual_memory()
print(f"Total Memory: {vm.total / (1024**3):.2f} GB")
print(f"Available Memory: {vm.available / (1024**3):.2f} GB")
print(f"Used Memory: {vm.used / (1024**3):.2f} GB")
print(f"Memory Percentage: {vm.percent}%")

در این مثال، مقادیر حافظه به گیگابایت تبدیل شده‌اند.

فضای دیسک

برای دریافت اطلاعات مربوط به فضای دیسک، از کلاس disk_usage() استفاده می‌کنیم. این کلاس، اطلاعاتی مانند کل فضای دیسک، فضای آزاد، فضای استفاده شده و درصد استفاده را ارائه می‌دهد.

import psutil

disk = psutil.disk_usage('/')
print(f"Total Disk Space: {disk.total / (1024**3):.2f} GB")
print(f"Free Disk Space: {disk.free / (1024**3):.2f} GB")
print(f"Used Disk Space: {disk.used / (1024**3):.2f} GB")
print(f"Disk Usage Percentage: {disk.percent}%")

در این مثال، اطلاعات مربوط به پارتیشن ریشه (/) نمایش داده شده است. می‌توانید پارتیشن مورد نظر خود را به عنوان آرگومان به تابع disk_usage() ارسال کنید.

آمار شبکه

برای دریافت آمار شبکه، از کلاس net_io_counters() استفاده می‌کنیم. این کلاس، اطلاعاتی مانند بایت‌های ارسال و دریافت شده را ارائه می‌دهد.

import psutil

net_io = psutil.net_io_counters()
print(f"Bytes Sent: {net_io.bytes_sent / (1024**2):.2f} MB")
print(f"Bytes Received: {net_io.bytes_recv / (1024**2):.2f} MB")

در این مثال، مقادیر بایت به مگابایت تبدیل شده‌اند.

نمایش گرافیکی اطلاعات با matplotlib

پس از جمع‌آوری اطلاعات سیستم، می‌توانیم از کتابخانه matplotlib برای نمایش گرافیکی این اطلاعات استفاده کنیم. این کار به ما کمک می‌کند تا روند تغییرات منابع سیستم را به صورت بصری مشاهده کنیم.

نمودار CPU Usage

import psutil
import matplotlib.pyplot as plt
import time

cpu_usage_history = []

for i in range(10):
    cpu_usage = psutil.cpu_percent(interval=1)
    cpu_usage_history.append(cpu_usage)
    time.sleep(1)

plt.plot(cpu_usage_history)
plt.xlabel("Time (seconds)")
plt.ylabel("CPU Usage (%)")
plt.title("CPU Usage Over Time")
plt.show()

این اسکریپت، درصد استفاده CPU را در هر ثانیه جمع‌آوری کرده و سپس یک نمودار خطی از این داده‌ها رسم می‌کند.

نمودار Memory Usage

import psutil
import matplotlib.pyplot as plt
import time

memory_usage_history = []

for i in range(10):
    vm = psutil.virtual_memory()
    memory_usage_history.append(vm.percent)
    time.sleep(1)

plt.plot(memory_usage_history)
plt.xlabel("Time (seconds)")
plt.ylabel("Memory Usage (%)")
plt.title("Memory Usage Over Time")
plt.show()

این اسکریپت، درصد استفاده حافظه را در هر ثانیه جمع‌آوری کرده و سپس یک نمودار خطی از این داده‌ها رسم می‌کند.

ساخت یک اسکریپت مانیتورینگ کامل

می‌توانیم اطلاعات جمع‌آوری شده را در یک اسکریپت واحد ترکیب کرده و یک اسکریپت مانیتورینگ کامل ایجاد کنیم. این اسکریپت می‌تواند به طور دوره‌ای اطلاعات سیستم را جمع‌آوری کرده و آن‌ها را در یک فایل ذخیره کند یا آن‌ها را به یک داشبورد ارسال کند.

import psutil
import matplotlib.pyplot as plt
import time

def monitor_system():
    cpu_usage = psutil.cpu_percent(interval=1)
    vm = psutil.virtual_memory()
    memory_usage = vm.percent
    disk = psutil.disk_usage('/')
    disk_usage = disk.percent
    net_io = psutil.net_io_counters()
    bytes_sent = net_io.bytes_sent / (1024**2)
    bytes_received = net_io.bytes_recv / (1024**2)

    print(f"CPU Usage: {cpu_usage}%")
    print(f"Memory Usage: {memory_usage}%")
    print(f"Disk Usage: {disk_usage}%")
    print(f"Bytes Sent: {bytes_sent:.2f} MB")
    print(f"Bytes Received: {bytes_received:.2f} MB")

    # Optional: Plotting
    plt.plot([cpu_usage, memory_usage, disk_usage], ['CPU', 'Memory', 'Disk'])
    plt.xlabel("Resource")
    plt.ylabel("Usage (%)")
    plt.title("System Resource Usage")
    plt.show()

if __name__ == "__main__":
    while True:
        monitor_system()
        time.sleep(5)

این اسکریپت، به طور مداوم اطلاعات سیستم را جمع‌آوری کرده و آن‌ها را در کنسول چاپ می‌کند. همچنین، یک نمودار ساده از درصد استفاده CPU، حافظه و دیسک رسم می‌کند. می‌توانید این اسکریپت را با توجه به نیازهای خود سفارشی‌سازی کنید.

نتیجه‌گیری

در این مقاله، نحوه ساخت یک اسکریپت مانیتورینگ منابع سیستم با پایتون را آموزش دادیم. با استفاده از کتابخانه‌های psutil و matplotlib، می‌توان به راحتی اطلاعات سیستم را جمع‌آوری کرده و آن‌ها را به صورت گرافیکی نمایش داد. این اسکریپت می‌تواند به عنوان یک نقطه شروع برای ساخت سیستم‌های مانیتورینگ پیچیده‌تر مورد استفاده قرار گیرد.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *