بررسی و مانیتور وضعیت سیستم با psutil

سلام .
نرم افزار های مختلفی برای مانیتور کردن وضعیت کامپیوتر موجود هست امروز با پکیج پایتونی آشنا شدم که میتونه وضعیت پردازش و سیستمون رو بررسی کنه (CPU, memory, disks, network, sensors)

Psutil به صورت کراس پلتفرم این قابلیت ها رو در اختیار شما میزاره و برخی از دستورات یونیکس هم به این قابلیت ها ادقام و اضافه شده مثل ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap

Psutil روی پلتفرم های زیر قابل اجراست

Linux
Windows
OSX,
FreeBSD, OpenBSD, NetBSD
Sun Solaris
AIX

برای نصب کافیه دستور زیر رو اجرا کنید

pip install psutil

خوب حالا قصد داریم اطلاعات مربوط به CPU رو بررسی کنیم

In [1]: psutil.cpu_stats()
Out[1]: scpustats(
ctx_switches=437905181,
interrupts=2222556355L,
soft_interrupts=0,
syscalls=109468308)

دریافت اطلاعات در مورد دیسک و رم :

 In [1]: psutil.disk_usage("c:")
Out[1]: sdiskusage(total=127950385152L,
                   used=116934914048L,
                   free=11015471104L,
                   percent=91.4)
In [2]: psutil.virtual_memory()
Out[2]: svmem(total=8488030208L,
              available=3647520768L,
              percent=57.0,
              used=4840509440L,
              free=3647520768L)

امکان دریافت اطلاعات قطعات فیزیکی مثل باتری و دمای CPU

In [1]: psutil.sensors_battery()
Out[1]: sbattery(percent=77, secsleft=18305, power_plugged=False)
In [2]: psutil.sensors_temperatures() # In Celsius
Out[2]: {'ACPI\\ThermalZone\\THM0_0': 
        [shwtemp(label='', 
         current=49.05000000000001, 
         high=127.05000000000001, 
         critical=127.05000000000001)]}

یکی از قدرتمندترین ابزار ها برای بررسی Processes

In [1]: p = psutil.Process(9800)

In [1]: p.exe()
Out[1]: 'C:\\Windows\\System32\\dllhost.exe'
In [2]: p.cpu_percent()
Out[2]: 0.0
In [3]: p.cwd()
Out[3]: 'C:\\WINDOWS\\system32'

اطلاعات کامل رو میتونید توی مستندات psutil مشاهده کنید
https://psutil.readthedocs.io/en/latest/

5 پسندیده

خیلی خوب بود ممنون،

من از monit روی CentOS server و Ubuntu server استفاده میکنم و خیلی هم قابل اعتماده

https://mmonit.com/monit/

3 پسندیده

معمولا روی سرورها چه چیزهایی رو مانیتور می‌فرمایید ؟

هر چیزی که از کار افتادن یا بد کار کردنش در کار سرویس ها اختلال ایجاد کنه + سرویسهایی که خودمون در سور قرار میدیم.

1 پسندیده

میشه کمی بیشتر توضیح بدین لطفاً ؟ :thinking:

1 پسندیده

منظور از بد کار کردن رو نفهمیدم

1 پسندیده

راستش خیلی کلی عرض کردم، چیز خاصی برای توضیح ندارم چون monit یک اپ‌خیلی سادست که یک سری پارامتر ها رو‌ چک‌میکنه و سرویس ها رو‌ در حالت فعال نگه میداره.‌
کار کرد بد هم خیلی چیزا میتونه باشه, ارورهای مختلف توی یک سرویس که ممکنه باعث از کار افتادن سرویس نشه اما سرویس بعضی از کارهایی که وظیفش هست رو انجام نمیده.

به عنوان مثال فکر کنید در یک سرور یک سرویس ریلز دیپلوی شده، و اون اپ یا سرویس از redis هم استفاده میکنه در ضمن یک سرویس دیگر هم وجود داره برای index کردن به اضافه چیزای دیگه. خب با monit یا ابزار مشابه میتونیم تا به صورت کاملا اثر بخش این سرویس ها رو سلامت و فعال نگه داریم.‌ این فقط یک مثال غیر واقعی بود و در واقعیت خیلی پیچیدهتر هست.

Monit خیلی کوچیک و سادست و خیلی هم پرفرمنس بالایی داره. در سرویس هایی که روی آمازون هست از CloudWatch و ابزار مخصوص آمازون استفاده میکنیم، اما بازم با توجه به کوچک بودن و سادگی monit شاید حتا اونجا هم بکار بیاد.

فکر میکنم این عکس از سایت monit خیلی گویا باشه

1 پسندیده

فکر میکنم Solaris محصول Oracle باشه. Oracle Solaris.
Sun هشت یا نه سالی هست که به تاریخ پیوسته :skull:

1 پسندیده

آقا توماج در مورد مانیتورینگ با zabbix , cacti , nagios
مطالبی خوندم که واقعا برای پروژه های اسکل بزرگ بودن ، این که شما به عنوان یه ابزار از monit برای کارای ساده و کوچک استفاده میکنید حالا توی محیطی مثل centsos , Ubuntu server برای ران کردن و نظارت اسکریپت پایتونی به عنوان نمونه کراودر و یا بوت چه روشی رو توصیه میکنید ؟

سلام، من عرض کردم minit سادست، نگفتم برای کارای کوچیک استفاده میشه.
بستگی به جایی داره که پروژه دیپلوی شده اما احتمالا اولین گزینه من monit باشه, به شما هم پیشنهاد میکنم monit رو در نظر داشته باشی چون خیلی شرکت ها ازش استفاده میکنند.

مثلا در آمازون از CloudWatck و DataDog میشه استفاده کرد. البته DataDog از دیتای CloudWatch استفاده میکنه.

1 پسندیده

خوب بسیار هم عالی منم قصدم همینه برای شروع اولین کاری که می‌خوام با monit انجام بدم ران کردن چندین اسکریپت پایتون به هست ، برای اجرای همیشگی اسکریپت ها از چه روشی استفاده کنم ?cron job , celery , systemd خیلی دقیق در موردش اطلاع ندارم و بعدش از صحت عمکردشون با monit اطمینان حاصل کنم ؟ بیشتر منظورم گرفتن راه حل بهتر. برای انجام همین کار هستم

نباید از monit برای اتوماسیون استفاده کنید, monit نه برای task scheduling هست نه برای‌ automation هر چند کارهایی رو در مسیر سلامت سیستم به صورت اوتوماتیک انجام میده.

اگر از سامانه های containerization مثل docker استفاده میکنید خود اون سامانه ها ابزاری برای automation دارند، در غیر این صورت من Ansible رو برای automation و ارکستر پیشنهاد میکنم.

CronJob هم برای task scheduling به کار میره.
Celery هم task queue هست که به صورت async عمل میکنه و در مورد شما احتمالا بیشتر کاری که نیاز دارید رو انجام میده.

هر کدام از اینها وظیفه و هدف متفاوتی دارند

2 پسندیده

ممنون از توضیح خوبتون