آموزش شل اسکریپت برای مانیتور استفاده از دیسک

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

خبر خوب این است که لینوکس نظارت بر میزان استفاده از دیسک و شناسایی مشکلات قبل از وقوع را به طرز شگفت‌آوری آسان می‌کند. تنها چیزی که نیاز دارید شل اسکریپت برای مانیتور استفاده از دیسک و شاید یک هشدار ایمیل است.
در این مطلب، یک اسکریپت ساده خواهیم ساخت که میزان استفاده از دیسک را بررسی می‌کند و در صورت عبور از ۸۰٪ هشدار ارسال می‌کند.

مرحله ۱: بررسی میزان استفاده از دیسک در لینوکس

قبل از نوشتن اسکریپت، باید با استفاده از دستور df، میزان استفاده فعلی از فضای دیسک در سیستم خود را بدانید.

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

در مثال بالا، پارتیشن ریشه روت (/dev/sda1) روی 99٪ است و زنگ خطر به صدا در آمده، به این معنی است که فضا در حال اتمام است.

مرحله ۲: ایجاد یک اسکریپت برای نظارت بر استفاده از دیسک

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

در اینجا یک اسکریپت بسیار ساده برای نظارت بر پارتیشن روت (/)آورده شده است:

بیایید آنچه را که در اینجا اتفاق می‌افتد، تجزیه و تحلیل کنیم:

THRESHOLD=80 – این محدودیتی است که ما به آن اهمیت می‌دهیم، هر چیزی بالاتر از آن بسیار خطرناک است.
df -h / – فقط فایل سیستم روت را بررسی می‌کند.
awk ‘NR==2 {print $5}’ – از خروجی df، این ستون “Use%” را می‌گیرد.
sed ‘s/%// – علامت % را حذف می‌کند تا بتوانیم آن را به عنوان یک عدد در نظر بگیریم.
بلوک if – اگر میزان استفاده از دیسک از حد آستانه بالاتر رود، یک هشدار ایجاد می‌کند.

در حال حاضر، اسکریپت با استفاده از دستور mail یک ایمیل ارسال می‌کند. اگر ایمیل را روی سیستم خود تنظیم نکرده‌اید، نگران نباشید، من به شما نشان خواهم داد که چگونه آن را تنظیم کنید.

مرحله 3: نظارت بر میزان استفاده از دیسک توسط همه پارتیشن‌ها

اکثر سرورها به یک پارتیشن واحد متکی نیستند. در عوض، آنها معمولا به چندین پارتیشن مانند /، home/، /var یا حتی data/ تقسیم می‌شوند. اگر فقط به پارتیشن root (/) توجه کنید، ممکن است مشکلات حیاتی را در جای دیگر از دست بدهید، به عنوان مثال، اگر var/ با لاگ‌ها پر شود، برنامه‌های شما ممکن است با وجود اینکه / هنوز فضای زیادی دارد، از کار بیفتند.

در اینجا نسخه‌ای کمی بهبود یافته وجود دارد که تمام ‌فایل‌ سیستم‌های نصب‌شده را بررسی می‌کند:

حالا، به جای بررسی فقط /، تمام ‌فایل سیستم‌های زیر /dev/ را بررسی می‌کند و اگر هر پارتیشن از ۸۰٪ عبور کند، یک ایمیل هشدار دریافت خواهید کرد.

با خرید وی پی اس از پارسدو، می‌توانید از قدرت و پایداری یک ماشین مجازی اختصاصی در ۵ موقعیت جهانی بهره‌مند شوید.

مرحله ۴: خودکارسازی اسکریپت با Cron

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

برای تنظیم آن، crontab خود را با این کد باز کنید:

این خط را در پایین اضافه کنید:

این به این معنی است:

  • 0 – در ابتدای ساعت اجرا شود.
  • * * * * – هر ساعت، هر روز.
  • path/to/disk_check.sh/ – این را با مکان واقعی اسکریپت خود جایگزین کنید.

ذخیره کنید و خارج شوید، و cron بقیه کارها را انجام خواهد داد. از این به بعد، اسکریپت شما بی‌سروصدا در پس‌زمینه میزان استفاده از دیسک را بررسی می‌کند و اگر وضعیت بد به نظر برسد، به شما هشدار می‌دهد.

مرحله ۵: آزمایش اسکریپت

قبل از اینکه به این اسکریپت تکیه کنید، آزمایش آن هوشمندانه است. به هر حال، شما نمی‌خواهید منتظر بمانید تا دیسک شما واقعا ۸۰٪ پر شود تا بفهمید سیستم هشدار شما کار می‌کند یا خیر.

ساده‌ترین راه برای آزمایش، کاهش موقت آستانه است:

به این ترتیب، اسکریپت تقریبا بلافاصله یک هشدار را فعال می‌کند زیرا اکثر پارتیشن‌ها حداقل ۱٪ پر هستند. پس از تایید اینکه ایمیل‌ها یا لاگ‌ها کار می‌کنند، آن را به ۸۰ تغییر دهید.

اگر آماده پیکربندی ایمیل نیستید، می‌توانید دستور mail را با چیزی ساده‌تر جایگزین کنید، مانند:

این فقط هشدار را در ترمینال شما چاپ می‌کند که برای دیباگ سریع مفید است.

مرحله ۶: تنظیم اعلان‌های ایمیل

اسکریپت ما از دستور mail برای ارسال هشدارها استفاده می‌کند، اما این ابزار همیشه به طور پیشفرض در دسترس نیست. ابتدا باید آن را نصب کنید:

پس از نصب، باید مطمئن شوید که سرور شما واقعا می‌تواند ایمیل ارسال کند، که ممکن است به تنظیمات اضافی مانند پیکربندی Postfix، Gmail SMTP یا یک سرویس شخص ثالث مانند SendGrid نیاز داشته باشد.

اگر نمی‌خواهید در حال حاضر با ایمیل سر و کار داشته باشید، می‌توانید با ثبت هشدارها در یک فایل، این اسکریپت را کاربردی‌تر کنید:

به این ترتیب، می‌توانید گزارش را بعدا بررسی نموده یا از دستور زیر برای مشاهده هشدارها به صورت لحظه‌ای استفاده کنید.

مرحله ۷: چه زمانی باید از اسکریپت‌های شل فراتر رفت

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

  •  Nagios – یکی از قدیمی‌ترین و قابل اعتمادترین سیستم‌های مانیتورینگ
  •  Zabbix – اگر داشبورد، نمودار و یک مکان مرکزی برای مانیتور بسیاری از سرورها می‌خواهید، خوب است.
  •  Prometheus + Grafana – یک مجموعه مدرن که در آن Prometheus معیارها را جمع‌آوری می‌کند و Grafana داشبوردهای زیبایی برای تجسم آنها می‌سازد.

جمع‌بندی

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