اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

اسکریپت برای بررسی Load Average سیستم و ارسال email به مدیر

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    اسکریپت برای بررسی Load Average سیستم و ارسال email به مدیر

    در این پست اسکریپتی معرفی می شود که، زمانی که Load Average یک سرور بالا می رود، به مدیر ایمیل می زند. از دستور uptime برای تعیین Load Average و استفاده از cron برای زمانبندی اجرای اسکریپت و ارسال گزارش به مدیر سیستم در صورت بالا بودن Load Average استفاده شده است. در خروجی دستور uptime سه عدد پس از عبارت load average معرف Load Average به ترتیب نشان دهنده Load Average، 1، 10 و 15 دقیقه پیش است.

    کد PHP:
    uptime

    03
    :58:13up 68 days11:15,  1 user,  load average1.361.060.85 
    متغیر NOTIFY اگر 1 باشد، آنگاه یک امیل به email address مدیر که با متغیر EMAIL مشخص شده ارسال می شود.می توانید چندین email address را با Space ها، در متغیر EMAIL ازهم جدا کنید. متغیر NOTIFY در اصل حد استانه برای اینکه تصمیم بگیریم که آیا Load Average سیستم بالا است یا نه. بطور پیش فرص 1 است و اگر دمین عدد از سه عدد گفته شده (یعنی Load Average در 5 دقیقه پیش بیشتر از این عدد باشد، یعنی میانگین بار سیستم بالا بوده است.

    کد PHP:
    NOTIFY=1

    “EMAIL
    =”admin@falearn.ir amirnami@falearn.ir 
    متغیر TEMPFILE دستور mktemp را برای ایجاد یک فایل موقتی، استفاده می کنیم. این متغیر نام و مسیر فایلی موقتی را که شامل بدنه (body) پیام ایمل است را در خود نگه می دارد. همانطور که در قطعه کد کامل (قابل دانلود در ادامه) خواهید دید، در هر مرحله توسط >> متنی به انتهای فایل افزوده می شود و در نهایت بعنوان بدنه ایمیل استفاده می شود. ( متغیر SUBJECT که در ادامه توضح داده شده است بعنوان موضوع (عنوان یا Subject) ایمیل استفاده می شود.

    کد PHP:
    (TEMPFILE=$(mktemp 
    از متغیر FTEXT عبارت رشته ای load average را در خودش برای فیلتر و جدا کردن تنها سه عدد گفته شده در بالا، از دستور uptime توسط دستور awk استفاده می کنیم. (البته می توانستیم برای فیلتر و جدا کردن سه عدد گفته شده، با استفاده از دستور awk، خود رشته load average : را استفاده کنیم. اما استفاده از یک متغیر ساده تر و بهینه تر می باشد.)

    کد PHP:
    “FTEXT=”load average 
    اصلی ترین بخش اسکریپت خروجی دستوری است که در متغیر LOAD1MIN ذخیره شده و اجرا می شود. توسط دستور های awk و sed و متغیر FTEXT خروجی دستور زیر را فیلتر وعدد مورد نظر یعنی Load Average را از آن جدا می کنیم و در نهایت این عدد در متغیر LOAD1MIN ذخیره می شود.

    کد PHP:
    ‘uptime awk -F “$FTEXT” ‘{ print $}’ cut -d, -f1 sed ‘s//g 
    در دستور بالا توسط awk ابتدا توسط رشته درون متغیر FTEXT، خروجی دستور uptime را فیلتر و سپس توسط متغیر 2$، ستون دوم از خروجی فیلتر شده یعنی سه عدد (ستون اول که خود رشته متغیر FTEXT، دومین ستون، شامل سه مجموعه سه عدد می باشد). سپس خروجی حاصل از awk توسط pipe به ورودی دستور cut ارسال می شود و توسط دستور cut و با استفاده از سوئیچ d-، کامای (ویرگول) پس از عدد را جدا و اولین ستون توسط سوئیچ f- (یعنی جدا کردن نخستین عدد از سه عدد. توجه داشته باشید در دو متغیر LOAD5MIN و LOAD15MIN عدد مقابل سویئچ f- به ترتیب برابر 2 و 3 است که معرف دومین و سومین عدد اس خروجی دستور uptime می باشد.). درنهایت خروجی حاصل از دستور cut به دستور sed ارسال شده و توسط دستور sed و فرمت استفاده شده از آن، فضای خالی پس از عدد حذف می می شود. (توجه کنید که میان اعداد یک فضای خالی است که از همان ابتدا و پس از فیلتر توسط دستور های awk و cut از میان نرفته و به ورودی دستور sed ارسال می شود) آنچه که باقی می ماند یک عدد که نشان دهنده Load Average در 1 دقیقه پیش می باشد و در متغیر LOAD1MIN ذخیره می شود.

    کد PHP:
    ‘LOAD1MIN=$(uptime awk -F “$FTEXT” ‘{ print $}’ cut -d, -f1 sed ‘s//g 
    متغیر های LOAD5MIN و LOAD15MIN به ترتیب حاوی دمین و سومین عدد از سه عدد گفته شده یعنی Load Average سیستم در 5 و 15 دقیقه پیش هستند که تفسیر آنها همانند آنچه که برای متغیر LOAD1MIN گفته شد، می باشد.

    کد PHP:
    ‘LOAD5MIN=$(uptime awk -F “$FTEXT” ‘{ print $}’ cut -d, -f2 sed ‘s//g

    ‘LOAD15MIN=$(uptime awk -F “$FTEXT” ‘{ print $}’ cut -d, -f3 sed ‘s//g 
    متغیر MEMU حاوی پیامی است که اطلاعاتی از وضعیت میزلن حافظه سیستم را به مدیر امیل می کند. در دستور زیر خروجی دستور free به دستور awk فرستاده می شود و توسط awk، خطی که شامل Total است جدا شده و سپس ستون های دوم با نتغیر 2$، ستون سوم با متغیر 3$ و ستون چهارم با متغیر 4$ که پیش از آنها رشته هایی الحاق می شود، جدا می شود و در متغیر MEMU ذخیره خواهد شد. (متغیر MEMU حاوی رشته ای از وضعیت حافظه است).

    “(‘{“MEMU=”$(free -tom | awk ‘/Total:/ {print “Total memory: “$2″ MB\nUsed memory: “$3″ MB\nFree memory: “$4″ MB

    اگر دستوری را که در متغیر MEMU ذخیره شده است را به تهایی اجرا کنید خروجی مشابه زیر خواهید دید :

    کد PHP:
    Total memory2019 MB

    Used memory
    928 MB

    Free memory
    1090 MB 
    متغیر SUBJECT شامل رشته subject برای ارسال ایمل است که حاوی نام هاست (hostname) و عدد متغیر های LOAD1MIN و LOAD5MIN و LOAD15MIN می باشد. بطور مثال :

    کد PHP:
    “SUBJECT=”Alert $(hostnamehigh load average$LOAD5MIN 
    متغیر RESULT یک متغیر باینری (درست/نادرست یا TRUE/FALSE) است. در این متغیر بررسی می شود که آیا LOAD5MIN از NOTIFY بیشتر است یا نه و سپس به دستور bc رفته. اگر بزرگتر بود یعنی TRUE و دستور bc آنرا به عدد 1 تبدیل می کند (1 همیشه عددی درست است) و اگر بزرگت نبود FALSE تلقی شده و به دستور bc فرستاده شده و bc آنرا 0 تبدیل می کند. (0 عددی همیشه نادرست است).

    کد PHP:
    (RESULT=$(echo “$LOAD5MIN $NOTIFY” bc 
    با مجموعه کد های زیر بررسی می شود که آیا RESULT درست (TRUE است، یعنی LOAD5MIN بیشتر از NOTIFY است) و در این حالت باید یک میل به مدیر (لیست ایمل ها در متغیر MAIL) ارسال شود. متغیر SUBJECT که حاوی رشته عنوان ایمل بود، نیز استفاده شده است.

    کد PHP:
    if [ "$RESULT== "$TRUE]; then
    # echo true
    /bin/mail “$EMAIL” -s “$SUBJECT” $TEMPFILE
    fi 
    می توانید سورس کامل را از اینجا دانلود کنید. آنرا در مسیر usr/bin/local/ کپی کنید و با دستور unzip از حالت فشرده خارج کنید. و سپس مجوز اجرایی به آن بدهید و سپس با استفاده از crontab (و مثال های آن)، اسکریپت را برای اجرای خودکار زمانبندی نمایید.
    نویسنده نامی امیر
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-12-2020, 12:57 AM.

درباره انجمن منطقه لینوکسی ها

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

شبکه های اجتماعی
در حال انجام ...
X