مانیتورینگ سرویس های لینوکسی به کمک Monit در اوبونتو ۱۶٫۰۴

۱۸ اردیبهشت ۱۳۹۷

یکی از وظایف مهم یک SysAdmin، مراقبت و مانیتورینگ سرویس های مختلف است. به عنوان یک SysAdmin شما باید بتوانید از تمامی اتفاقات زیرساخت آگاهی داشته باشید و در صورت بروز مشکل، اقدام به رفع آن نمایید. طبیعی است در محیط هایی با حجم کاری بالا، در صورتی که بتوانید این فرایند را به صورت خودکار انجام دهید، نه تنها در وقت شما صرفه جویی خواهد شد، که Stability زیرساخت خود را نیز به طور قابل توجه ای افزایش خواهید داد. یکی از سرویس هایی که برای این منظور مورد استفاده قرار می گیرد، Monit است. به کمک این سرویس، می توانید بخش های مختلفی از سیستم عامل را مانیتور کرده و در صورت بروز اتفاقی خاص، عکس العملی مناسب نشان دهید.

در این آموزش فرض می کنیم شما یک ابرک با سیستم عامل اوبونتو ۱۶٫۰۴ دارید و بر روی آن Apache راه اندازی کردید. قصد دارید در صورتی که سرویس Apache به هر دلیلی خوابید، به صورت خودکار دوباره شروع به کار کند. همچنین می خواهید در صورت وقوع یک اتفاق، اسکریپت مورد نظر شما اجرا شود. در نهایت در بخش های بعدی پا را فراتر گذاشته و اقدام به بررسی سرویس های راه اندازی شده بر روی یک ابرک دیگر شما می کنیم.

Monit چیست و چگونه نصب می شود؟

Monit یک برنامه ی لینوکسی برای مدیریت وضعیت پروسس های سیستم عامل است. به کمک Monit می توانیم موارد زیر را مانیتور نماییم:

  • Process ها

شما به راحتی می توانید وضعیت سرویس های مختلف مانند sshd، mysql و … را مانیتور نمایید. به عنوان مثال در صورتی که Apache به هر دلیلی خوابید، سرویس را به صورت خودکار آپ نماید. همچنین اگر منابع زیادی از سیستم مصرف می کند (به دلایل مختلف مانند DDOS)، به صورت خودکار سرویس را ریست نماید.

  • File & Directory

به کمک Monit می توانید پارامتر های مختلف فایل و دایرکتوری ها را مانند اندازه آنها، تغییرات آنها و .. را مانیتور نمایید. این موارد مخصوصا در موارد امنیتی کاربر زیادی خواهد داشت. به عنوان مثال می توانید وضعیت فایل passwd را مانیتور کرده تا به محض اینکه تغییری در آن ایجاد شده است، مطلع شوید.

  • System Resource

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

  • Program

در نهایت شما می توانید از Monit مانند Cron برای اجرای اسکریپت های خود در بازه های زمانی مختلف استفاده نمایید. به این ترتیب این امکان را خواهید داشت تا هر کاری که مد نظرتان است را که در قالب اسکریپت پیاده سازی کرده اید، اجرا نمایید.

نصب Monit:

برای نصب Monit در سیستم عامل اوبونتو ۱۶٫۰۴ به صورت زیر عمل کنید.

apt install monit

به صورت پیش فرض مسیر فایل کانفیگ Monit در مسیر زیر قرار دارد.

/etc/monit/monitrc/

برای اجرای سرویس می توانید از دستور زیر استفاده نمایید.

monit

همچنین برای دیدن وضعیت سرویس می توانید از دستور زیر استفاده نمایید.

monit status

در صورتی که فایل کانفیگ را تغییر داده اید و قصد بررسی آن را دارید، می توانید به کمک دستور زیر این کار را انجام دهید.

monit -t

 

اجرای برنامه ی دلخواه شما (Program):

برای اولین آزمون، فرض می کنیم می خواهیم اسکریپت مورد نظرمان را هر ده ثانیه اجرا کنیم. این اسکریپت قرار است هر ۱۰ ثانیه یک آدرس را ۳ مرتبه پینگ کند ودر صورتی که آن آدرس پینگ نشد، یک پیغام تولید کند. این اسکریپت را به صورت زیر نوشته و با نام ping.sh و در مسیر /etc/cron.d/ ذخیره می کنیم.

bin/bash!#
ping 10.1.1.1 -c3

سپس مجوز اسکریپت را به صورت زیر تغییر می دهیم تا قابلیت اجرایی پیدا کند.

chmod +x ping.sh

همان طور که در بالا گفته شد، مسیر پیش فرض تنظیمات monit در /etc/monit/monitrc/ قرار دارد. برای اینکه اسکریپت ما هر ۱۰ ثانیه اجرا شود، یا می توانید به طور خاص اسکریپت جاری را به این صورت تنظیم کنید، یا به صورت کلی بگویید تمامی فعالیت های monit هر ۱۰ ثانیه اجرا شوند. ما قسمت دوم را در حال حاضر انجام می دهیم. برای این کار فایل اصلی monitrc را ویرایش کرده و قسمت set daemon را برابر ۱۰ قرار دهید.

vim /etc/monit/monitrc

set daemon 10

حال باید مشخص کنیم monit هر ۱۰ ثانیه که اجرا می شود، اسکریپت ما را بررسی کند. برای این کار می توانیم کد زیر را در فایل monitrc قرار دهیم. یا برای اینکه کار به صورت مرتب انجام شود، یک فایل در مسیر /etc/monitconf-enable به نام ping می سازیم . کد زیر را در آن قرار می دهیم (حتی می توانید بریا Task ها مختلف دایرکتوری های مختلف ایجاد نمایید تا در صورت بیشتر شدن تعداد اسکریپت ها، نظم کارتان حفظ شود). البته به این موضوع دقت خواهیم کرد که برای اینکه monit بتواند از وجود این فایل مطلع شود، در فایل monitrc خط زیر باید وجود داشته باشد:

include /etc/monit/conf.d/*
 include /etc/monit/conf-enabled/*

دستور بالا به monit می گوید هر بار برای اجرا ( در مثال ما هر ۱۰ ثانیه ) به این دو مسیر هم سر بزن و اگر فایلی آنجا بود آنرا اجرا کن.

بعد از اطمینان از موارد فوق، کد زیر را در فایل ping قرار می دهیم.

check program ping with path /etc/cron.d/ping.sh
 if status != 0 then alert

در دستور بالا هر جایی که به صورت Bold نوشته شده است به این معناست که شما می توانید مقادیر خودتان را قرار دهید. این کد به این ترتیب عمل می کند که هر ۱۰ ثانیه ( با توجه به کانفیگ کلی که در فایل monitrc به متغییر set daemon دادیم ) اسکریپتی که با نام ping.sh نوشته بودیم را اجرا می کند و در صورتی که خروجی دستور اجرا شده مخالف صفر بود ( مثلا اگر خطا داشتیم ) یک پیغام تولید می کند. این پیغام ها را می توان به صورت زیر مشاهده کرد.

tailf -n 100 /var/log/monit.log

بدیهی است که در این تمرین در صورت پینگ نشدن سرور مد نظرمان، تنها کاری (Action) که انجام می دهیم تولید پیغام خطا می باشد.

بررسی سرویس:

یکی دیگر از کابرد های مهم monit مانیتورینگ سرویس های مختلف و انجام اقدام مناسب در صورت بروز شرایطی خاص است. برای نوشتن یک نمونه به کمک سرویس monit می خواهیم سرویس Apache و Nginx را مانیتور کرده و در صورتی که این سرویس به هر دلیلی stop شد، مجددا آنرا Start کنیم.

بد نیست بدانیم که هر سرویسی که در لینوکس اجرا می شود، یک Process ID تولید می کند که آنرا در فایلی نگه داری می کند. Monit از این ویژگی استفاده کرده و با بررسی این فایل، متوجه Start یا Stop بودن سرویس مورد نظر می شود. برای مانیتورینگ سرویس Apache در پوشه ی  /etc/monitconf-enable d یک فایل به نام Apache ایجاد کرده و کد زیر را در آن قرار می دهیم.

check process apache with pidfile /run/apache2.pid
 start program = "/etc/init.d/apache2 start" with timeout 20 seconds #for start service
 stop program = "/etc/init.d/apache2 stop" #for Stop service

کد بالا هر ۱۰ ثانیه مسیر /run/apache2.pid را چک کرده و هر زمانی که احتیاج به انجام Start یا Stop کردن سرویس بود، به کمک دستور نوشته شده می توانید این کار را انجام دهد. جالب است بدانید که می توانید در بخش Program اسکریپت مد نظر خودتان را نیز وارد کنید. به عنوان مثال:

stop = "/bin/sh -c 'kill -s SIGTERM `cat /run/apache2.pid`'" # kill process

در نهایت برای Nginx نیز می توانید یک فایل دیگر ایجاد کرده و کد زیر را در آن قرار داد.

check process nginx with pidfile /var/run/nginx.pid
 start program = "/etc/init.d/nginx start" #for start service
 stop program = "/etc/init.d/nginx stop" #for Stop service

مرور:

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

در بخش بعدی به صورت خاص بر روی مانیتورینگ حالات مختلف با ذکر مثال تمرکز خواهیم کرد تا بتوانیم به صورت کامل از ویژگی های Monit استفاده نماییم.

بدون دیدگاه
برچسب‌ها:
× برای اطلاع از آخرین اخبار و مقالات آروان عضو خبرنامه ما شوید