| MONIT(1) | دستورهای کاربر | MONIT(1) |
Monit - ابزاری برای پایش خدمات در سامانههای یونیکس
خلاصه دستور (SYNOPSIS)
monit [options] <arguments>
توضیحات (DESCRIPTION)
Monit ابزاری برای مدیریت و پایش فرایندها، برنامهها، فایلها، دایرکتوریها و سیستمهای فایل در سامانههای یونیکس است. Monit نگهداری و تعمیر خودکار را انجام میدهد و میتواند در وضعیتهای خطا، اقدامات علّی معناداری را اجرا کند. برای نمونه، Monit میتواند در صورتی که فرایندی در حال اجرا نباشد آن را آغاز کند، اگر فرایندی پاسخ ندهد آن را بازراهاندازی کند، و اگر فرایندی بیش از حد منابع مصرف کند، آن را متوقف سازد. میتوانید از Monit برای پایش فایلها، دایرکتوریها و سیستمهای فایل برای تغییراتی نظیر تغییرات برچسب زمانی، تغییرات جمع مقابلهای (checksum) یا تغییرات اندازه استفاده کنید.
Monit از طریق یک فایل کنترلی با پیکربندی آسان و مبتنی بر نحو آزادقالب (free-format) و توکنمحور هدایت میشود. Monit گزارشها را در syslog یا فایل گزارش اختصاصیاش ثبت میکند و شرایط خطا را از طریق پیامهای هشدار قابل سفارشیسازی به شما اطلاع میدهد. Monit میتواند بررسیهای گوناگون شبکهٔ TCP/IP و بررسیهای پروتکل را انجام دهد و قادر است برای چنین بررسیهایی از SSL بهره ببرد. Monit یک رابط HTTP(S) ارائه میدهد و میتوانید برای دسترسی به برنامهٔ Monit از یک مرورگر استفاده کنید.
چه چیزی پایش شود؟ (WHAT TO MONITOR?)
میتوانید از Monit برای پایش فرایندهای دیمن یا برنامههای مشابه در حال اجرا روی localhost استفاده کنید. Monit بهویژه برای پایش فرایندهای دیمن سودمند است، مانند فرایندهایی که در زمان بالا آمدن سامانه آغاز میشوند؛ برای نمونه sendmail، sshd، apache و mysql. در مقایسه با بسیاری از دیگر سامانههای پایش، Monit میتواند در صورت بروز وضعیت خطا وارد عمل شود؛ برای نمونه، اگر sendmail در حال اجرا نباشد، Monit میتواند دوباره sendmail را بهطور خودکار آغاز کند، یا اگر apache بیش از حد از منابع استفاده کند (مثلاً هنگام رخ دادن حملهٔ DoS)، Monit میتواند apache را متوقف یا بازراهاندازی کرده و یک پیام هشدار برای شما ارسال کند. Monit همچنین میتواند ویژگیهای فرایند را پایش کند، مانند اینکه فرایند چه مقدار حافظه یا چرخههای پردازنده (CPU) مصرف میکند.
شما همچنین میتوانید از Monit برای پایش فایلها، دایرکتوریها و سیستمهای فایل روی localhost استفاده کنید. Monit میتواند این موارد را از نظر تغییراتی چون تغییرات برچسب زمانی، تغییرات جمع مقابلهای یا تغییرات اندازه پایش کند. این امر به دلایل امنیتی نیز مفید است - میتوانید جمع مقابلهای md5، sha1 یا sha256 فایلهایی را که نباید تغییر کنند پایش نموده و در صورت تغییر یافتن آنها، هشدار دریافت کرده یا اقدامی را به انجام رسانید. برای امنیت رمزنگاری بهتر، استفاده از SHA256 توصیه میشود.
Monit میتواند اتصالات شبکه به کارگزارهای گوناگون را، چه روی localhost و چه روی میزبانهای دوردست، پایش نماید. پروتکلهای TCP، UDP و Unix Domain Sockets پشتیبانی میشوند. آزمون شبکه میتواند در سطح پروتکل انجام شود؛ Monit دارای آزمونهای داخلی برای پروتکلهای اصلی اینترنت مانند HTTP، SMTP و غیره است. حتی اگر پروتکلی پشتیبانی نشود، شما همچنان میتوانید کارگزار را بیازمایید، زیرا میتوانید Monit را برای ارسال هرگونه داده و بررسی پاسخ دریافتی از کارگزار پیکربندی کنید.
Monit میتواند برای آزمودن برنامهها یا اسکریپتها در زمانهای معین، بسیار شبیه به cron استفاده شود، اما افزون بر این، میتوانید مقدار خروجی (exit value) یک برنامه را بررسی کنید و در صورتی که مقدار خروجی نشاندهندهٔ خطا باشد، اقدامی انجام دهید یا هشداری بفرستید. این بدان معناست که میتوانید از Monit برای انجام هر نوع بررسی که امکان نوشتن اسکریپت برای آن وجود داشته باشد، بهره ببرید.
در نهایت، Monit میتواند برای پایش منابع عمومی سامانه روی localhost مانند مصرف کلی CPU، حافظه و بار سامانه (System Load) به کار رود.
عملکرد کلی (GENERAL OPERATION)
رفتار Monit توسط گزینههای خط فرمان و یک فایل کنترل اجرا به نام monitrc کنترل میشود که نحو آن در بخشی در ادامه شرح داده شده است. گزینههای خط فرمان بر تعاریف فایل .monitrc ارجحیت داشته و آنها را لغو میکنند.
مکان پیشفرض برای monitrc مسیر ~/.monitrc است. اگر این فایل وجود نداشته باشد، Monit مسیر /etc/monitrc و چند جای دیگر را امتحان خواهد کرد. برای جزئیات به فایلها (FILES) مراجعه کنید. همچنین میتوانید فایل کنترل را مستقیماً با استفاده از سوئیچ خط فرمان -c در monit مشخص کنید. برای نمونه،
$ monit -c /var/monit/monitrc
پیش از آنکه Monit برای نخستین بار آغاز شود، میتوانید فایل کنترل را برای خطاهای نحوی بررسی کنید:
$ monit -t $ Control file syntax OK
اگر خطایی وجود داشت، Monit پیام خطایی را در کنسول نمایش میدهد که شامل شماره خطی از فایل کنترل است که خطا در آن یافت شده است.
هنگامی که یک فایل کنترل کارآمد برای Monit داشتید، به سادگی Monit را از کنسول اجرا کنید، به این صورت:
$ monit
میتوانید برخی از دستورالعملهای پیکربندی را از طریق سوئیچهای خط فرمان تغییر دهید، اما برای سادگی پیشنهاد میشود که آنها را درون فایل کنترل قرار دهید.
Monit از ترمینال جدا شده و به صورت یک فرایند پسزمینه، یعنی به عنوان یک فرایند دیمن اجرا خواهد شد. Monit به عنوان یک دیمن، در چرخهها اجرا میشود؛ خدمات را پایش میکند، سپس به مدت زمان پیکربندیشده به خواب میرود، و پس از آن بیدار شده و پایش را دوباره در یک حلقهٔ بیپایان از سر میگیرد.
گزینهها (Options)
گزینههای زیر توسط Monit شناخته میشوند. با این حال، توصیه میشود که گزینهها را (در صورت امکان) مستقیماً درون فایل کنترل .monitrc تنظیم کنید.
-c file
استفاده از
این فایل
کنترل
-d n
اجرای Monit به
عنوان دیمن
هر n ثانیه
یکبار. یا
استفاده از
"set
daemon" در monitrc.
-g name
تنظیم نام
گروه برای
اقدامات
start، stop، restart،
monitor، unmonitor،
status و summary.
-l file
چاپ
اطلاعات
گزارش در
این فایل. یا
استفاده از
"set log"
در monitrc.
-p pidfile
استفاده از
این فایل
قفل در حالت
دیمن. یا
استفاده از
"set pidfile"
در monitrc.
-s statefile
نوشتن
اطلاعات
وضعیت در
این فایل. یا
استفاده از
"set
statefile" در monitrc.
-B
حالت خط
فرمان
دستهای
(بدون خروجی
جدولبندیشده
و بدون رنگ).
یا
استفاده از
"set terminal batch" در monitrc.
-I
عدم اجرا در
حالت
پسزمینه
(برای اجرا
از طریق init
لازم است). یا
استفاده
از "set init" در monitrc.
-i
چاپ شناسهٔ
یکتای Monit (ID)
-r
بازنشانی
شناسهٔ
یکتای Monit (ID). با
احتیاط
استفاده
شود
-t
اجرای
بررسی نحوی
برای فایل
کنترل
-v
حالت پرگو
(verbose)، عملکرد
همراه با
پیامهای
تشخیصی
(خروجی
عیبیابی)
-vv
حالت بسیار
پرگو،
همانند -v
بههمراه
ثبت ردگیری
پشته (stack-trace)
هنگام بروز
خطا
-H [filename]
چاپ
درهمسازهای
MD5، SHA1 و SHA256 فایل
یا ورودی
استاندارد
(stdin) در صورت
مشخص نشدن
نام فایل؛
پس از آن Monit
خارج خواهد
شد
-V
چاپ شماره
نگارش و سطح
وصله (patch level)
-h
چاپ یک متن
راهنما.SS
"آرگومانها
(Arguments)" هنگامی
که Monit به
عنوان یک
پردازه
دیمن در حال
اجرا است،
میتوانید
Monit را با یکی
از
آرگومانهای
زیر
فراخوانی
کنید. سپس Monit
به دیمن Monit
(بهطور
پیشفرض
روی درگاه TCP
به نشانی 127.0.0.1:2812)
متصل شده و
از دیمن Monit
میخواهد
تا اقدام
درخواستی
را انجام
دهد. به بیان
دیگر؛
فراخوانی monit
بدون
آرگومان،
دیمن Monit را
آغاز
میکند، و
فراخوانی monit
همراه با
آرگومانها
به شما
امکان
میدهد تا
با پردازه
دیمن Monit
ارتباط
برقرار
کنید.
- start all
- آغاز تمام سرویسهای فهرستشده در فایل کنترلی و فعالسازی پایش برای آنها. اگر گزینه گروه تنظیم شده باشد (-g)، تنها سرویسهای موجود در گروه نامبرده را آغاز و پایش آنها را فعال میکند (در این حالت نیازی به درج "all" نیست).
- start <name|pattern>
- آغاز سرویس نامبرده و فعالسازی پایش برای آن. نام، یک شناسه سرویس از فایل monitrc است. همچنین میتوانید از یک الگوی عبارت باقاعده (regex) نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست).
- stop all
- توقف تمام سرویسهای فهرستشده در فایل کنترلی و غیرفعالسازی پایش آنها. اگر گزینه گروه تنظیم شده باشد، تنها سرویسهای موجود در گروه نامبرده را متوقف و پایش آنها را غیرفعال میکند (در این حالت نیازی به درج "all" نیست).
- stop <name|pattern>
- توقف سرویس نامبرده و غیرفعالسازی پایش آن. نام، یک شناسه سرویس از فایل monitrc است. همچنین میتوانید از یک الگوی regex نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست).
- restart all
- توقف و آغاز مجدد تمام سرویسها. اگر گزینه گروه تنظیم شده باشد، تنها سرویسهای موجود در گروه نامبرده را مجدداً راهاندازی میکند (در این حالت نیازی به درج "all" نیست).
- restart <name|pattern>
- راهاندازی مجدد سرویس نامبرده. نام، یک شناسه سرویس از فایل monitrc است. همچنین میتوانید از یک الگوی regex نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست).
- monitor all
- فعالسازی پایش تمام سرویسهای فهرستشده در فایل کنترلی. اگر گزینه گروه تنظیم شده باشد، تنها پایش سرویسهای موجود در گروه نامبرده را آغاز میکند (در این حالت نیازی به درج "all" نیست).
- monitor <name|pattern>
- فعالسازی پایش سرویس نامبرده. نام، یک شناسه سرویس از فایل monitrc است. Monit همچنین پایش تمام سرویسهایی را که این سرویس به آنها وابسته است فعال خواهد کرد. میتوانید از یک الگوی regex نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست).
- unmonitor all
- غیرفعالسازی پایش تمام سرویسهای فهرستشده در فایل کنترلی. اگر گزینه گروه تنظیم شده باشد، تنها پایش سرویسهای موجود در گروه نامبرده را غیرفعال میکند (در این حالت نیازی به درج "all" نیست).
- unmonitor <name|pattern>
- غیرفعالسازی پایش سرویس نامبرده. نام، یک شناسه سرویس از فایل monitrc است. Monit همچنین پایش تمام سرویسهایی را که به این سرویس وابسته هستند غیرفعال خواهد کرد. میتوانید از یک الگوی regex نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست).
- status [name|pattern]
- چاپ اطلاعات وضعیت سرویس.
- summary [name|pattern]
- چاپ خلاصهای کوتاه از وضعیت.
- report [up | down | initialising | unmonitored | total]
- گزارش وضعیت سرویسها. خروجی میتواند به آسانی توسط اسکریپتها تجزیه شود. بدون گزینهها، یک نمای کلی کوتاه از وضعیت تمام سرویسهای مدیریتشده توسط Monit را چاپ میکند. گزینه up تعداد تمام سرویسهای موجود در این وضعیت را چاپ میکند، گزینه down نیز به همین ترتیب و الی آخر.
- reload
- راهاندازی اولیه مجدد دیمن در حال اجرای Monit؛ دیمن پیکربندی خود را دوباره میخواند، و فایلهای گزارش (log) را بسته و مجدداً باز میکند.
- quit
- خاتمه دادن به پردازه دیمن Monit (kill).
- validate
- بررسی تمام سرویسهای فهرستشده در فایل کنترلی. این کنش همچنین رفتار پیشفرض هنگام اجرای Monit در حالت دیمن است.
- procmatch <regex>
- امکان آزمایش آسان الگو را برای بررسی تطابق پردازه فراهم میکند. این دستور یک عبارت باقاعده را به عنوان آرگومان دریافت کرده و تمام پردازههای در حال اجرایی را که با الگو مطابقت دارند نمایش میدهد.
فایل کنترلی MONIT (THE MONIT CONTROL FILE)
برنامه Monit از طریق یک فایل کنترلی با نام monitrc پیکربندی و کنترل میشود. مکان پیشفرض این فایل ~/.monitrc است. اگر این فایل وجود نداشته باشد، Monit مسیر /etc/monitrc، سپس @sysconfdir@/monitrc و در نهایت ./monitrc را بررسی میکند. اگر Monit را از کد منبع بسازید، مقدار @sysconfdir@ را میتوان در زمان پیکربندی به صورت ./configure --sysconfdir تعیین کرد. برای نمونه، استفاده از ./configure --sysconfdir /var/monit/etc سبب میشود Monit به دنبال monitrc در /var/monit/etc بگردد.
برای محافظت از امنیت فایل کنترلی و گذرواژههایتان، فایل کنترلی باید دارای مجوزهای خواندن و نوشتن حداکثر 0700 (u=xrw,g=,o=) باشد؛ در غیر این صورت Monit اخطار داده و خارج میشود.
هنگامی که تعارضی میان آرگومانهای خط فرمان و آرگومانهای موجود در این فایل وجود داشته باشد، آرگومانهای خط فرمان اولویت دارند.
نرمافزار Monit از زبان اختصاصی دامنه (DSL) خود استفاده میکند؛ فایل کنترلی شامل مجموعهای از مدخلهای سرویس و دستورات گزینههای سراسری است.
توضیحات (کامنتها) با یک '#' آغاز شده و تا انتهای خط ادامه مییابند. در غیر این صورت، فایل شامل مجموعهای از مدخلهای سرویس یا دستورات گزینههای سراسری در یک نحو آزادِ مبتنی بر نشانه (token) است.
میتوانید از کلیدواژههای بیاثر (noise keywords) مانند 'if'، 'and'، 'with(in)'، 'has'، 'us(ing|e)'، 'on(ly)'، 'then'، 'for' و 'of' در هر کجای مدخل استفاده کنید تا آن را به زبان انگلیسی شبیهتر سازید. آنها نادیده گرفته میشوند، اما میتوانند خواندن مدخلها را در یک نگاه بسیار آسانتر کنند. کلیدواژهها نسبت به بزرگی و کوچکی حروف حساس نیستند.
سه نوع نشانه (token) وجود دارد: دستور زبان (grammar)، اعداد (یعنی دنبالهای از ارقام دهدهی) و رشتهها. رشتهها میتوانند درون گیومه یا بدون آن باشند. یک رشته درون گیومه توسط گیومه دوتایی محصور شده و میتواند حاوی فاصلههای سفید باشد (و ارقام درون گیومه نیز به عنوان رشته در نظر گرفته میشوند). یک رشته بدون گیومه هر نشانهای است که با فاصله سفید محدود شده و حاوی نویسهها و/یا ارقام است.
در سطح معنایی، فایل کنترلی از سه نوع مدخل تشکیل شده است:
- 1. Global set-statements
- یک دستور سراسری set با کلیدواژه "set" و موردی که باید پیکربندی شود آغاز میگردد.
- 2. Global include-statement
- دستور include شامل کلیدواژه "include" و یک رشته الگو (glob) است. این دستور برای گنجاندن دستورالعملهای پیکربندی از فایلهای جداگانه به کار میرود.
- 3. One or more service entry statements.
- هر مدخل سرویس شامل کلیدواژهٔ "check" و به دنبال آن نوع سرویس است. هر مدخل نیازمند یک نام توصیفی یکتا (unique) است که میتواند آزادانه انتخاب شود. این نام توسط Monit برای ارجاع داخلی به سرویس و در تمام تعاملات با کاربر استفاده میشود. این نام به بزرگی و کوچکی حروف حساس نیست.
در حال حاضر، نه نوع عبارت بررسی پشتیبانی میشود:
فرآیند (Process)
CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>>
<path> مسیر مطلق به pid-file برنامه است. یک pid-file فایلی حاوی شناسهٔ یکتای یک فرآیند (ID) است. اگر pid-file وجود نداشته باشد یا حاوی شمارهٔ PID یک فرآیند در حال اجرا نباشد، Monit در صورت تعریف شدن، متد start مدخل را فراخوانی خواهد کرد.
<regex> جایگزینی برای استفاده از فایلهای PID است و از تطبیق الگوی نام فرآیند برای یافتن فرآیند مد نظر جهت پایش استفاده میکند. بالاترین والد منطبق با بیشترین زمان بالا بودن (uptime) انتخاب میشود، بنابراین این نوع بررسی زمانی بیشترین کاربرد را دارد که نام فرآیند یکتا باشد. در صورت امکان باید از pid-file استفاده شود، زیرا PID مورد انتظار را دقیقاً مشخص میکند. میتوانید با استفاده از دستور "monit procmatch "regex-pattern"" در خط فرمان بررسی کنید که آیا فرآیندی با الگو مطابقت دارد یا خیر. این کار تمام فرآیندهایی را که با الگوی regex مطابقت دارند یا ندارند، فهرست میکند.
فایل (File)
CHECK FILE <unique name> PATH <path>
<path> مسیر مطلق به فایل است. اگر فایل وجود نداشته باشد، Monit در صورت تعریف شدن متد start مدخل، آن را فراخوانی خواهد کرد؛ اگر <path> به یک نوع فایل معمولی (برای نمونه یک دایرکتوری) اشاره نکند، Monit پایش این مدخل را غیرفعال میکند. اگر Monit در حالت منفعل (passive) اجرا شود یا متد start تعریف نشده باشد، Monit در هنگام بروز خطا صرفاً یک هشدار ارسال خواهد کرد.
Fifo (صف)
CHECK FIFO <unique name> PATH <path>
<path> مسیر مطلق به fifo است. اگر fifo وجود نداشته باشد، Monit در صورت تعریف شدن متد start مدخل، آن را فراخوانی خواهد کرد؛ اگر <path> به نوع fifo (برای نمونه یک دایرکتوری) اشاره نکند، Monit پایش این مدخل را غیرفعال خواهد کرد. اگر Monit در حالت منفعل اجرا شود یا متد start تعریف نشده باشد، Monit در هنگام بروز خطا صرفاً یک هشدار ارسال خواهد کرد.
سیستمفایل (Filesystem)
CHECK FILESYSTEM <unique name> PATH <string>
<path> مسیر به دستگاه/دیسک، نقطهٔ اتصال (mount point) یا رشتهٔ اتصال NFS/CIFS/FUSE است. اگر سیستمفایل از دسترس خارج شود، Monit در صورت تعریف شدن، متد start سرویس را فراخوانی میکند. اگر Monit در حالت منفعل اجرا شود یا متد start تعریف نشده باشد، Monit در هنگام بروز خطا صرفاً یک هشدار ارسال خواهد کرد.
دایرکتوری (Directory)
CHECK DIRECTORY <unique name> PATH <path>
<path> مسیر مطلق به دایرکتوری است. اگر دایرکتوری وجود نداشته باشد، Monit در صورت تعریف شدن متد start مدخل، آن را فراخوانی میکند. اگر <path> به یک دایرکتوری اشاره نکند، monit پایش این مدخل را غیرفعال خواهد کرد. اگر Monit در حالت منفعل اجرا شود یا متدهای start تعریف نشده باشند، Monit در هنگام بروز خطا صرفاً یک هشدار ارسال خواهد کرد.
میزبان راهدور (Remote host)
CHECK HOST <unique name> ADDRESS <host>
آدرس میزبان میتواند به عنوان یک رشتهٔ نام میزبان (hostname) یا رشتهٔ آدرس IP در قالب دهدهی نقطهدار مشخص شود؛ مانند "tildeslash.com" یا "64.87.72.95".
سیستم (System)
CHECK SYSTEM <unique name>
مقدار unique name معمولاً نام میزبان محلی است، اما از هر نام توصیفی دیگری نیز میتوان استفاده کرد. اگر از متغیر $HOST به عنوان نام استفاده کنید، به نام میزبان بسط مییابد. این بررسی امکان پایش منابع عمومی سیستم مانند مصرف CPU، کل حافظهٔ مصرفی یا میانگین بار (load average) را فراهم میآورد. مقدار unique name به عنوان نام میزبان سیستم در هشدارهای ایمیلی و به عنوان نام اولیهٔ مدخل میزبان در M/Monit استفاده میشود.
برنامه (Program)
CHECK PROGRAM <unique name> PATH <executable file> [TIMEOUT <number> SECONDS]
<path> مسیر مطلق به برنامه یا اسکریپت اجرایی است. آزمون وضعیت امکان بررسی وضعیت خروج (exit status) برنامه را فراهم میآورد. اگر اجرای برنامه ظرف <number> ثانیه به پایان نرسد، Monit آن را خاتمه خواهد داد. مهلت زمانی (timeout) پیشفرض برنامه ۳۰۰ ثانیه (۵ دقیقه) است. خروجی برنامه ثبت شده و در رابط کاربری و در هشدارها در دسترس قرار میگیرد که بهطور پیشفرض تا ۵۱۲ بایت است. شما میتوانید با استفاده از دستور set limits این محدودیت خروجی را تغییر دهید).
شبکه (Network)
CHECK NETWORK <unique name> <ADDRESS <ipaddress> | INTERFACE <name>>
<ipaddress> آدرس IPv4 یا IPv6 رابط شبکهٔ تحت پایش است. همچنین امکان استفاده از نام رابط، مانند "eth0" در لینوکس، وجود دارد..SH "ثبت گزارشها (LOGGING)" برنامه Monit پیامهای وضعیت و خطا را در یک فایل یا از طریق syslog ثبت میکند. از دستور set log در فایل کنترل monitrc استفاده کنید.
برای تنظیم Monit جهت ثبت گزارش در فایل اختصاصی خودش، به عنوان مثال از set log /var/log/monit.log استفاده کنید. توجه داشته باشید که دستور قبلی set logfile منسوخ شده است، اما همچنان میتوان از آن به عنوان جایگزین استفاده کرد.
اگر syslog به عنوان مقدار سوئیچ خط فرمان "-l" مشخص شود یا عبارت کلیدی set log syslog در فایل کنترل وجود داشته باشد، Monit از دیمن سیستمی syslog برای ثبت پیامها با اولویتی که بر اساس زمینه به هر پیام اختصاص مییابد، استفاده خواهد کرد.
برای غیرفعال کردن ثبت گزارش، کافی است log را در فایل کنترل تنظیم نکنید (و البته، از سوئیچ -l نیز استفاده نکنید).
قالب یک مدخل در فایل گزارش به این صورت است:
[date] priority : message
برای مثال:
[2020-08-12T16:35:00+0200] info : 'localhost' Monit started
خروجی ترمینال (TERMINAL OUTPUT)
در صورتی که ترمینال از رنگها پشتیبانی کند، Monit از دنبالههای گریز ANSI برای رنگآمیزی بخشهای مهم خروجی خط فرمان، و از نویسههای جعبهای UTF-8 برای خروجیهای جدولبندیشده استفاده میکند.
اگر میخواهید خروجی CLI مانیت را در یک اسکریپت پردازش کنید، میتوانید از گزینه -B استفاده کنید یا عبارت زیر را در فایل پیکربندی monit برای غیرفعال کردن کامل خروجی جدولی و رنگها قرار دهید:
SET TERMINAL BATCH
حالت دیمن (DAEMON MODE)
از
SET DAEMON <seconds>
[[WITH] START DELAY <seconds>]
برای تعیین طول چرخه پایش Monit و اجرای آن در حالت دیمن استفاده کنید. شما باید یک آرگومان عددی را که فاصله زمانی پایش بر حسب ثانیه است مشخص کنید.
در حالت دیمن، Monit از کنسول جدا شده، به پسزمینه میرود و به طور مداوم اجرا میشود؛ هر سرویس تعیینشده را پایش میکند و سپس برای فاصله پایش مشخصشده به خواب میرود، بیدار میشود و پایش را دوباره در یک چرخه بیپایان از سر میگیرد.
به عنوان جایگزین، میتوانید از سوئیچ خط فرمان "-d" برای تنظیم بازه پایش استفاده کنید، اما اکیداً توصیه میشود که بازه پایش را در فایل ~/.monitrc خود با استفاده از set daemon تنظیم نمایید.
در این صورت Monit همیشه در حالت دیمن شروع به کار خواهد کرد. اگر از این عبارت استفاده نکنید و monit را با گزینه -d اجرا نکنید، Monit تنها یک بار بررسیهای سرویس را انجام داده و سپس خارج میشود. این حالت ممکن است در برخی شرایط مفید باشد، اما Monit اساساً برای اجرا به عنوان یک پردازه دیمن طراحی شده است.
فراخوانی "monit" در حالی که دیمن Monit در پسزمینه در حال اجرا است، یک سیگنال بیدارباش به دیمن ارسال کرده و آن را مجبور میکند سرویسها را فوراً بررسی کند. فراخوانی "monit" با آرگومان quit به جای بیدار کردن، پردازه دیمن در حال اجرای Monit را خاتمه میدهد.
گزینه تأخیر در شروع (start delay) میتواند برای یک بار درنگ قبل از شروع بررسی سرویسها پس از راهاندازی مجدد سیستم استفاده شود. Monit به طور پیشفرض بلافاصله پس از راهاندازی، پایش سرویسها را آغاز میکند.
پشتیبانی از INIT (INIT SUPPORT)
عبارت "set init" مانع از تبدیل Monit به یک پردازه دیمن میشود. در عوض Monit به عنوان یک پردازه در پیشزمینه اجرا خواهد شد (همچنان باید از "set daemon" برای تعیین چرخه پایش استفاده کنید).
این کار برای اجرای Monit از طریق init ضروری است. اجرای Monit از طریق init احتمالاً بهترین روش برای اجرای Monit است اگر میخواهید اطمینان حاصل کنید که همیشه یک دیمن Monit در حال اجرا در سیستم خود دارید. گزینه دیگر، اجرای Monit از طریق crontab است. در هر حال، قبل از اینکه Monit را از طریق init یا crontab اجرا کنید، باید مطمئن شوید که فایل کنترل هیچ خطای نحوی ندارد (از "monit -t" برای بررسی استفاده کنید).
برای تنظیم Monit جهت اجرا از طریق init، میتوانید از عبارت "set init" در فایل کنترل Monit یا از گزینه "-I" در خط فرمان استفاده کنید. در اینجا کدهایی که باید به "/etc/inittab" اضافه کنید آمده است:
# Run Monit in standard run-levels mo:2345:respawn:/usr/local/bin/monit -Ic /etc/monitrc
پس از ویرایش فایل پیکربندی init، میتوانید دستور زیر را برای بررسی مجدد /etc/inittab و شروع Monit اجرا کنید:
telinit q
برای سیستمهای فاقد telinit:
kill -1 1
اگر از Monit برای نظارت بر سرویسهایی استفاده میشود که همزمان در زمان بوت سیستم راهاندازی میشوند (مانند سرویسهایی که از طریق اسکریپتهای rc مربوط به SYSV init یا از طریق inittab شروع میشوند)، در برخی موارد ممکن است یک شرایط رقابتی (race condition) رخ دهد؛ بدین معنی که اگر راهاندازی یک سرویس کُند باشد، Monit ممکن است فرض کند که سرویس اجرا نشده است و احتمالاً تلاش کند آن را راهاندازی کرده و هشداری ایجاد نماید، در حالی که در واقع سرویس در آستانه راهاندازی است یا در مرحله توالی آغازین خود قرار دارد. لطفاً برای راهحل این مشکل به FAQ مراجعه کنید. خلاصه راهحل این است که Monit را در یک run-level بالاتر، پس از پردازههای سیستمی راهاندازی کنید..SH "فایلهای ضمیمه (INCLUDE FILES)" فایل کنترلی Monit، یعنی "monitrc"، میتواند فایلهای پیکربندی اضافی را ضمیمه کند. این قابلیت در صورتی که مایل باشید، کمک میکند تا پیکربندی را به جای تجمیع همه چیز در یک فایل، در چندین فایل مجزا سازماندهی کنید. عبارتهای Include را میتوان تقریباً در هر کجای "monitrc" قرار داد، هرچند طبق عرف معمولاً در انتهای آن قرار میگیرند. ساختار نحوی به صورت زیر است:
INCLUDE <globstring>
مقدار globstring هر نوع رشتهای است که در glob(7) تعریف شده باشد. بنابراین، میتوانید به یک فایل منفرد ارجاع دهید یا چندین فایل را به صورت همزمان بارگذاری نمایید. اگر میخواهید در رشتهی خود از فاصلهی خالی (whitespace) استفاده کنید، globstring باید درون علامتهای نقلقول تکی (') یا دوتایی (") قرار گیرد. در صورتی که globstring به جای یک فایل با یک دایرکتوری مطابقت داشته باشد، بدون اعلام هشدار نادیده گرفته میشود.
هر دستور include درون یک فایل ضمیمهشده نیز دقیقاً همانند فایل کنترلی اصلی پردازش و تجزیه میشود.
اگر globstring با چندین نتیجه مطابقت داشته باشد، فایلها بدون ترتیب خاصی ضمیمه خواهند شد. چنانچه لازم است بر ترتیب مشخصی تکیه کنید، باید از الگوهای تطبیق کاراکترهای عمومی (wild-card globbing) خودداری نموده و در عوض مسیر کامل فایلهای ضمیمهشده را مشخص کنید.
یک مثال:
include /etc/monit.d/*.cfg
این دستور هر فایلی را که با globstring مطابقت داشته باشد بارگذاری میکند؛ یعنی تمامی فایلهای موجود در دایرکتوری /etc/monit.d که به .cfg ختم میشوند.
تا حداکثر ۱۰۲۴ فایل include پشتیبانی میشود. در صورت فراتر رفتن از این محدودیت، Monit یک خطا گزارش خواهد داد.
گزینههای SSL (SSL OPTIONS)
گزینههای عمومی SSL/TLS را میتوان با استفاده از عبارت زیر تعیین کرد و این تنظیمات بر تمامی اتصالات SSL برقرار شده از طریق Monit اعمال خواهند شد:
SET <SSL | TLS> [OPTIONS] {
VERSION: <AUTO | [-]SSLV2 | [-]SSLV3 | [-]TLSV1 | [-]TLSV11 | [-]TLSV12 | [-]TLSV13>, ...
VERIFY: <ENABLE | DISABLE>
SELFSIGNED: <ALLOW | REJECT>
CIPHERS: <string>
PEMFILE: <path>
PEMCHAIN: <path>
PEMKEY: <path>
CLIENTPEMFILE: <path>
CACERTIFICATEFILE: <path>
CACERTIFICATEPATH: <path>
}
VERSION نسخهی
خاص SSL/TLS مورد
استفاده را
تعیین
میکند. به
صورت
پیشفرض Monit
از AUTO
استفاده
میکند. در
حالت AUTO،
تنها TLS 1.2 و 1.3
مجاز هستند
و سایر
پروتکلها
منسوخ در
نظر گرفته
میشوند.
اگر
میخواهید
از
پروتکلهای
منسوخ
استفاده
کنید، باید
نسخه را
صریحاً
مشخص
نمایید.
میتوانید
با استفاده
از پیشوند
"-" پروتکل
مورد نظر را
مستثنی
کنید. مثال
برای فهرست
استثناها (Exclude):
set ssl {
version: auto -sslv2 -sslv3 -tlsv1 -tlsv11
} مثال برای
فهرست
پروتکلهای
مجاز:
set ssl {
version: tlsv12 tlsv13
}
VERIFY اعتبارسنجی گواهی سرور SSL را فعال میکند. این گزینه گواهی را اعتبارسنجی کرده و در صورتی که گواهی سرور غیرقابل اعتماد یا نامعتبر بوده یا منقضی شده باشد، خطا گزارش میدهد. اعتبارسنجی گواهی به صورت پیشفرض غیرفعال است، اگرچه فعالسازی آن توصیه میشود؛ در غیر این صورت هیچ تضمینی وجود ندارد که Monit با همان سروری ارتباط برقرار میکند که شما مد نظر دارید.
SELFSIGNED گواهیهای خودامضا (self-signed) بهطور پیشفرض رد میشوند. از این گزینه برای مجاز ساختن گواهیهای خودامضا استفاده کنید. هشدار: به دلایل امنیتی استفاده از این گزینه در محیط عملیاتی توصیه نمیشود، چرا که در این وضعیت کلاینت قادر به تأیید هویت سرور واقعی نبوده و حملاتی مانند مرد میانی (man-in-the-middle) یا سرقت دیاناس (DNS hijacking) امکانپذیر خواهند بود.
CIPHERS الگوریتمهای رمزنگاری (ciphers) پیشفرض SSL/TLS را بازنویسی میکند.
PEMFILE مسیر "فایل پایگاهدادهی" گواهی سرور SSL را با قالب PEM تعیین میکند. این گزینه تنها بر رابط HTTP در Monit تأثیر دارد.
به عنوان جایگزینی برای تنظیم PEMFILE با یک فایل ادغامشده از زنجیره و کلید، گزینههای PEMCHAIN و PEMKEY به ترتیب مسیر فایل زنجیره گواهی SSL و کلید خصوصی سرور را با قالب PEM مشخص میکنند. این گزینهها تنها بر رابط HTTP در Monit تأثیر دارند.
CLIENTPEMFILE مسیر فایل پایگاهدادهی گواهیهای کلاینت SSL کدگذاریشده با PEM را تعیین میکند. در صورت تنظیم این گزینه، احراز هویت با گواهی کلاینت فعال خواهد شد.
CACERTIFICATEFILE مسیر فایل کدگذاریشده با PEM حاوی گواهیهای مرجع صدور گواهی (CA) را تعیین میکند. در صورت عدم استفاده از این گزینه، Monit از گواهیهای CA پیشفرض OpenSSL استفاده میکند (میتوان با اجرای دستور openssl version -d گواهیهای پیشفرض CA را به دست آورد). در بسیاری از توزیعها، تنظیمات گواهیهای SSL و CA از پیش انجام شده است و معمولاً نیازی به استفاده از این گزینه نیست.
CACERTIFICATEPATH مسیر دایرکتوری حاوی گواهیهای مرجع صدور گواهی (CA) را مشخص میکند. در صورت عدم استفاده از این گزینه، Monit از گواهیهای CA پیشفرض OpenSSL استفاده خواهد کرد. در بسیاری از توزیعها، تنظیمات گواهیهای SSL و CA از پیش پیکربندی شده است و معمولاً نیازی به استفاده از این گزینه نیست.
عبارت گزینههای SSL به طور سراسری بر تمام اتصالات SSL/TLS برقرار شده از طریق Monit اعمال میشود. همچنین گزینههای SSL را میتوان درون یک بررسی محلی، در تنظیمات mailserver یا در عبارت mmonit نیز تنظیم کرد که در این صورت تنظیمات سراسری را بازنویسی یا گسترش خواهند داد.
برای تعیین گزینههای سراسری SSL، این عبارت را نزدیک به ابتدای فایل .monitrc خود قرار دهید:
set ssl options {...}
در اینجا مثالی از تنظیم همزمان گزینههای سراسری و محلی SSL ارائه شده است:
# Enable certificate verification for all SSL connections
# Self-signed certificates are not allowed by default
set ssl options {
verify: enable
}
# Verify certificate (via global setting)
# Allow self-signed certificate for this check
check host example with address example.com
if failed
port 443
protocol https
with ssl options {selfsigned: allow}
then alert
# Do not verify example2.com's certificate (override global setting)
check host example2 with address example2.com
if failed
port 443
protocol https
with ssl options {verify: disable}
then alert
برای فعالسازی حالت FIPS (به شرطی که کتابخانهٔ OpenSSL شما از آن پشتیبانی کند)، این دستور را به فایل کنترلی Monit اضافه کنید:
SET FIPS
سرویس MONIT HTTPD (MONIT HTTPD)
در صورت تعیین در فایل کنترلی، Monit با پشتیبانی از HTTP شروع به کار خواهد کرد. سپس میتوانید از CLI مربوط به Monit برای شروع و متوقف کردن سرویسها، غیرفعال یا فعال کردن پایش سرویسها و همچنین مشاهده وضعیت هر سرویس استفاده کنید.
اگر پشتیبانی از HTTP بهجای سوکت یونیکس (Unix Socket) بر بستر TCP فعال شده باشد، میتوانید داشبورد اطلاعاتی Monit را در مرورگر وب خود نیز مشاهده کنید.
توجه داشته باشید که در صورت غیرفعال بودن پشتیبانی از HTTP، عملکرد رابط CLI مربوط به Monit کاهش خواهد یافت، زیرا بیشتر دستورات CLI (مانند "monit status") برای ارتباط با فرایند پسزمینهٔ Monit به رابط HTTP نیاز دارند. اکیداً توصیه میکنیم پشتیبانی از HTTP را فعال بگذارید. اگر نگران مسائل امنیتی هستید، رابط HTTP را تنها به localhost متصل (bind) کنید یا از Unix Socket استفاده نمایید تا Monit از خارج سیستم در دسترس نباشد.
سوکت یونیکس (UNIX SOCKET)
ساختار دستوری برای Unix Socket:
SET HTTPD UNIXSOCKET <path>
[UID <uid | username>]
[GID <gid | groupname>]
[PERMISSION <octal number>]
ALLOW <user:password>+
مثال:
set httpd unixsocket /var/run/monit.sock
allow username:password
UNIXSOCKET مسیری به Unix Socket که Monit باید به آن متصل شده (bind) و روی آن گوش دهد (listen) را تنظیم میکند.
UID مالک سوکت (اختیاری، بهطور پیشفرض کاربری است که Monit را اجرا میکند).
GID گروه سوکت (اختیاری، بهطور پیشفرض گروه اصلی کاربری است که Monit را اجرا میکند).
PERMISSION مجوزهای دسترسی سوکت - حالت هشتهشتی (octal) مطلق (اختیاری، بهطور پیشفرض UMASK فرایند اعمال میشود).
درگاه TCP (TCP PORT)
ساختار دستوری برای درگاه TCP:
SET HTTPD PORT <number>
[ADDRESS <hostname | IP-address>]
[[with] SSL {pemfile: <path>}]
ALLOW <user:password | IP-address | IP-range>+
PORT درگاهی را تنظیم میکند که Monit باید به آن متصل شده و روی آن گوش دهد. Monit معمولاً روی درگاه 2812 راهاندازی میشود. مثال:
set httpd port 2812
allow username:password
اکنون میتوانید پس از وارد کردن نام کاربری و گذرواژه بهعنوان اطلاعات احراز هویت، از http://localhost:2812 برای دسترسی به رابط وب Monit از طریق مرورگر استفاده کنید. چنانچه گذرواژه شامل نویسههای خاصی مانند "p@ssw:r#" باشد، ممکن است نیاز باشد آن را داخل گیومه دوتایی قرار دهید.
ADDRESS باعث میشود Monit تنها روی یک رابط شبکهٔ خاص گوش دهد. برای مثال، اگر نمیخواهید رابط وب Monit را در معرض شبکه قرار دهید، آن را تنها به localhost متصل کنید. در صورت استفاده نشدن از گزینهٔ ADDRESS، نرمافزار Monit اتصالها را روی تمام آدرسها خواهد پذیرفت:
set httpd
port 2812
use address 127.0.0.1
allow username:password
بخش HTTP در Monit روی TCP از هر دو پروتکل IP نسخهٔ 4 و 6 پشتیبانی میکند. این پشتیبانی شفاف بوده و نیازی به هیچ پیکربندی خاصی ندارد. اگر address برای اتصال مشخص نشده باشد، مانند این مثال:
set httpd port 2812 allow ...
نرمافزار Monit روی همهٔ رابطها، در صورت دردسترس بودن هم IPv4 و هم IPv6، به درگاه 2812 متصل شده و به آن گوش خواهد داد. برای وادار کردن HTTP در Monit به اینکه تنها روی IP نسخهٔ 6 گوش دهد و اتصالات آن را بپذیرد، یک آدرس IPv6 مشخص کنید:
set httpd port 2812 use address "fe80::222:19ff:fe53:6c59" allow ...
مشابهاً، برای وادار کردن HTTP در Monit به اینکه تنها روی IP نسخهٔ 4 گوش دهد و اتصالات آن را بپذیرد، یک آدرس IPv4 مشخص کنید:
set httpd port 2812 use address 62.109.39.247 allow ...
تنظیمات SSL
SSL قابلیت SSL/TLS را برای رابط وب Monit فعال میکند. برای فهرست کامل گزینههای SSL، بخش گزینهها را ببینید.
PEMFILE مسیر فایل با کدگذاری PEM را تعیین میکند که شامل کلید خصوصی و گواهی کارساز (سرور) است. این فایل باید در مکانی امن روی سیستمفایل ذخیره شود و مجوزهای سختگیرانهای داشته باشد (نه بیشتر از 0700).
بهعنوان جایگزین، PEMCHAIN و PEMKEY مسیر زنجیرهٔ گواهی و فایل کلید خصوصی مجزا با کدگذاری PEM را مشخص میکنند. فایل کلید باید در مکانی امن روی سیستمفایل ذخیره شود و مجوزهای دسترسی سختگیرانهای داشته باشد (نه بیشتر از 0700).
مثال برای استفاده از pemfile:
set httpd
port 2812
with ssl {
pemfile: /etc/ssl/certs/monit.pem
}
allow myuser:mypassword
مثال برای استفاده از زنجیره گواهی و کلید مجزا:
set httpd
port 2812
with ssl {
pemchain: /etc/ssl/certs/monit.chain.pem
pemkey: /etc/ssl/certs/monit.key.pem
}
allow myuser:mypassword
اکنون میتوانید از https://localhost:2812 برای دسترسی به کارساز وب Monit از طریق یک اتصال رمزنگاریشده با TLS استفاده کنید.
نکتهٔ گواهیهای کارساز خودامضاشده (self-signed): رابط CLI در Monit بر پایهٔ ساختار کلاینت-سرور عمل میکند و از HTTP GUI در Monit برای دریافت وضعیت از دیمن Monit و ارسال دستوراتی مانند start/stop به آن بهره میبرد. از آنجا که گواهیهای خودامضاشده بهطور پیشفرض به دلایل امنیتی رد میشوند، CLI کار نخواهد کرد مگر آنکه با استفاده از گزینهٔ SELFSIGNED: ALLOW صراحتاً اجازه آن را صادر کنید:
set httpd
port 2812
with ssl {
pemfile: /etc/ssl/certs/monit.pem
selfsigned: allow
}
allow myuser:mypassword
CLIENTPEMFILE احراز هویت مبتنی بر گواهی کلاینت را فعال کرده و مسیر فایل پایگاهداده با کدگذاری PEM را مشخص میکند که شامل فهرستی از گواهیهای مجاز کلاینت است. کلاینت متصلشونده باید گواهی شناختهشدهای برای Monit (فهرستشده در clientpemfile) ارائه دهد، در غیر این صورت رد خواهد شد. این فایل همچنین باید شامل تمامی گواهیهای CA لازم باشد. بهطور پیشفرض گواهیهای کلاینت خودامضاشده به دلایل امنیتی رد میشوند؛ اگر میخواهید به گواهیهای کلاینت خودامضاشده اجازه دهید (فقط برای آزمایش توصیه میشود)، باید با استفاده از گزینهٔ SELFSIGNED: ALLOW صراحتاً اجازهٔ آن را صادر کنید (مثال بالا را ببینید). برای نحوهٔ وارد کردن گواهی کلاینت به مرورگر خود، به مستندات مرورگرتان مراجعه کنید.
مثال:
set httpd
port 2812
with SSL {
pemfile: /etc/ssl/certs/monit.pem
clientpemfile: /etc/ssl/certs/monit-client.pem
}
از SIGNATURE میتوان برای پنهان کردن نسخه Monit از سرآیند پاسخ HTTP و صفحههای خطا استفاده کرد. برای مثال:
set httpd port 2812 signature disable allow myuser:mypassword
احراز هویت (Authentication)
دسترسی به رابط وب Monit اساساً از طریق گزینهٔ ALLOW کنترل میشود که برای تعیین احراز هویت و مجاز کردن اتصال کلاینتهای بخصوص به کار میرود.
در صورت استفاده از رابط خط فرمان Monit، حداقل یک گذرواژهٔ متن آشکار (cleartext) لازم است (به زیر مراجعه کنید)، در غیر این صورت رابط خط فرمان Monit قادر نخواهد بود به رابط وب Monit متصل شود.
کلاینتهایی که برای اتصال به Monit تلاش میکنند، اما نام کاربری و/یا گذرواژهٔ نادرستی ارائه میدهند، همراه با نشانی IP آنها ثبت (log) میشوند.
گواهیهای کلاینت (Client certificates)
این روش، یک سازوکار احراز هویت قوی است و از گواهیهای کلاینت HTTPS برای بررسی اصالت کلاینت متصلشونده استفاده میکند. کلاینتها باید یک گواهی کلید عمومی داشته باشند که برای Monit شناختهشده باشد. کلاینت باید روی بستر SSL به Monit متصل شود و Monit از کلاینت درخواست ارسال گواهیاش را میکند. پس از دریافت گواهی، Monit آن را با گواهیهای موجود در فایل CLIENTPEMFILE مقایسه میکند. در صورت وجود گواهی کلاینت در این فایل، دسترسی داده میشود. برای جزئیات به تنظیمات SSL مراجعه کنید.
احراز هویت پایه (Basic Authentication)
نرمافزار Monit از Basic Authentication همانطور که در RFC 2617 شرح داده شده، پشتیبانی میکند.
به طور خلاصه؛ یک سرور، کلاینت (مثلاً یک مرورگر) را به چالش میکشد تا اطلاعات احراز هویت (نام کاربری و گذرواژه) را ارسال کند و در صورت پذیرش، سرور اجازهٔ دسترسی کلاینت به سند درخواستی را صادر میکند.
بزرگترین نقطه ضعف Basic Authentication این است که نام کاربری و گذرواژه به صورت متن آشکار روی شبکه ارسال میشوند (یعنی با کدگذاری base64). از این رو توصیه میشود از این روش احراز هویت استفاده نکنید مگر اینکه Monit را همراه با پشتیبانی از ssl اجرا کنید. با ssl، استفاده از Basic Authentication ایمن است زیرا تمام دادههای HTTP، از جمله سرآیندهای Basic Authentication، رمزگذاری خواهند شد.
نام کاربری و گذرواژهٔ متن آشکار (Cleartext user and password)
اگر یک عبارت allow شامل نام کاربری و گذرواژهای باشد که با یک نویسهٔ ':' از هم جدا شدهاند، Monit از Basic Authentication استفاده خواهد کرد.
نکته: نویسههای خاص قابل استفاده هستند، اما برای نویسههای غیرالفبایی-عددی، گذرواژه باید داخل گیومه قرار گیرد.
شیوهنگارش:
ALLOW <username>:<password>
فهرست مجاز میزبانها و شبکهها (Host and network allow list)
نرمافزار Monit یک فهرست کنترل دسترسی از میزبانها و شبکههای مجاز برای اتصال را نگهداری میکند. شما میتوانید هر تعداد میزبان که مایلید بیفزایید، اما فقط میزبانهایی با یک نام دامنهٔ معتبر یا نشانی IP آن مجاز هستند.
نرمافزار Monit برای بررسی هر میزبانی که سعی در اتصال دارد، از یک نامکارساز (name server) استعلام میگیرد. اگر میزبانی (کلاینت) برای اتصال تلاش کند، اما در فهرست دسترسی یافت نشود یا نام آن تحلیل نشود، Monit فوراً اتصال به کلاینت را قطع خواهد کرد.
مثال فایل کنترلی:
set httpd port 2812
allow localhost
allow my.other.work.machine.com
allow 10.1.1.1
allow 192.168.1.0/255.255.255.0
allow 10.0.0.0/8
کلاینتهایی که در فهرست allow ذکر نشدهاند و برای اتصال به Monit تلاش کنند، دسترسیشان رد شده و همراه با نشانی IP آنها ثبت میشوند.
PAM
از PAM در سکوهایی که PAM را ارائه میدهند (مانند Linux، macOS، FreeBSD و NetBSD) پشتیبانی میشود.
شیوهنگارش:
ALLOW @<group>
که در آن "group" نام گروهی است که اجازهٔ دسترسی به رابط وب Monit را دارد. نرمافزار Monit از یک سرویس PAM به نام monit برای احراز هویت PAM استفاده میکند؛ برای دستورالعملهای دقیق دربارهٔ نحوهٔ تنظیم سرویس PAM و افزایههای احراز هویت PAM، به صفحهٔ راهنمای PAM مراجعه کنید.
نمونه سرویس PAM برای Monit در macOS (ذخیره به عنوان فایل "/etc/pam.d/monit"):
# monit: auth account password session #auth sufficient pam_securityserver.so #auth sufficient pam_unix.so auth sufficient pam_opendirectory.so auth required pam_deny.so account required pam_permit.so password required pam_deny.so session required pam_permit.so
و سرویس مشابه PAM برای Monit در Linux (ذخیره به عنوان فایل "/etc/pam.d/monit"):
# monit: auth account password session auth sufficient pam_unix2.so auth required pam_deny.so account required pam_permit.so password required pam_deny.so session required pam_permit.so
یک پیکربندی "monitrc" که تنها به گروههای "admin" و "staff" که از طریق PAM احراز هویت شدهاند، اجازهٔ دسترسی به رابط وب را میدهد:
set httpd
port 2812
allow @admin
allow @staff readonly
فایل htpasswd
بهعنوان جایگزین میتوانید اطلاعات کاربری را در یک فایل با قالببندی "htpasswd" ذخیره کنید (یک ورودی user:passwd در هر سطر)، به این صورت: allow [cleartext|crypt|md5] /path [users]. حالت پیشفرض، گذرواژههای متن آشکار است. در صورتی که گذرواژهها چکیدهسازی (digest) شده باشند، مشخص کردن روش رمزنگاری ضروری است. اگر مایل نیستید تمام کاربران فایل گذرواژه به Monit دسترسی داشته باشند، میتوانید فقط کاربرانی را که باید دسترسی داشته باشند در عبارت allow مشخص کنید. در غیر این صورت، تمام کاربران اضافه میشوند.
مثال ۱:
set httpd port 2812
allow md5 /etc/httpd/htpasswd john paul ringo george
اگر از این روش همراه با یک فهرست میزبان استفاده کنید، تنها کلاینتهای متعلق به میزبانهای فهرستشده مجاز به اتصال به کارساز HTTP در Monit خواهند بود و از هر کلاینت خواسته میشود یک نام کاربری و گذرواژه ارائه دهد.
مثال ۲:
set httpd port 2812
allow localhost
allow 10.1.1.1
allow hauk:"passw@rd"
اگر تنها میخواهید از Basic Authentication استفاده کنید، کافی است ورودیهای allow را با نام کاربری و گذرواژه یا فایلهای گذرواژه همانطور که در مثال ۱ بالا آمده مشخص کنید.
کاربران فقطخواندنی (Read-only users)
علاوه بر این، امکان تعریف برخی کاربران به عنوان فقطخواندنی (read-only) وجود دارد. یک کاربر فقطخواندنی میتواند صفحات وب Monit را بخواند، اما به دکمهها دسترسی نخواهد داشت و نمیتواند سرویسی را از طریق رابط وب تغییر دهد.
set httpd port 2812
allow admin:password
allow hauk:password read-only
allow @admins
allow @users read-only
یک کاربر با استفاده از کلیدواژهٔ read-only در بعد از username:password به عنوان فقطخواندنی تنظیم میشود. در مثال بالا، کاربر hauk به عنوان یک کاربر فقطخواندنی تعریف شده است، در حالی که کاربر admin تمام حقوق دسترسی را دارد..PP سرور http فقطخواندنی
در نهایت این امکان وجود دارد که کل رابط وب را به حالت فقطخواندنی محدود کنید. تمام کاربران، صرفنظر از اینکه با کلیدواژهٔ read-only یا بدون آن تعریف شده باشند، تنها مجوزهایی را خواهند داشت که در بالا شرح داده شد. هنگام استفاده از این تنظیم، توصیه میشود یک UNIXSOCKET نیز پیکربندی کنید؛ در غیر این صورت، CLI مربوط به Monit کار نخواهد کرد.
set httpd
port 2812
read-only
unixsocket /run/monit.socket
allow @users
پیامهای هشدار (ALERT MESSAGES)
برنامهٔ Monit در شرایط زیر هشدار صادر خواهد کرد:
o یک سرویس وجود نداشته باشد (برای نمونه فرایند در حال اجرا نباشد) o دادههای سرویس خوانده نشوند (مثلاً عدم امکان دریافت میزان مصرف سیستمفایل) o اجرای اسکریپت مرتبط با سرویس با شکست مواجه شود (مثلاً شکست در start) o نوع سرویس نامعتبر باشد (مثلاً مسیر به جای فایل به یک دایرکتوری اشاره کند) o اسکریپت آزمون سفارشی خطا بازگرداند o آزمون Ping با شکست مواجه شود o آزمون درگاه و/یا اتصال TCP/UDP با شکست مواجه شود o آزمون مصرف منابع با شکست مواجه شود (مثلاً مصرف بیش از حد cpu) o عدم تطابق یا تغییر Checksum (مثلاً فایل تغییر کرده باشد) o آزمون اندازهٔ فایل با شکست مواجه شود (مثلاً فایل بیش از حد بزرگ باشد) o آزمون برچسب زمانی با شکست مواجه شود (مثلاً فایل قدیمیتر از حد انتظار باشد) o آزمون مجوزها با شکست مواجه شود (مثلاً حالت دسترسی فایل مطابقت نداشته باشد) o یک آزمون UID با شکست مواجه شود (مثلاً فایل متعلق به کاربر دیگری باشد) o یک آزمون GID با شکست مواجه شود (مثلاً فایل متعلق به گروه دیگری باشد) o مقدار PID یک فرایند خارج از کنترل Monit تغییر کند o مقدار PPID یک فرایند خارج از کنترل Monit تغییر کند o تلاشهای مکرر برای بازیابی سرویس با شکست مواجه شود o در آزمون محتوای فایل، تطابقی یافت شود o پرچمهای سیستمفایل تغییر کنند o عملیاتی روی سرویس توسط مدیر سیستم انجام شود o پیوند شبکه قطع یا وصل شود (down یا up شدن پیوند) o ظرفیت پیوند شبکه تغییر کند o آزمون اشباع پیوند شبکه با شکست مواجه شود o نرخ بارگذاری/بارگیری پیوند شبکه با شکست مواجه شود o برنامهٔ Monit راهاندازی، متوقف یا مجدداً بارگذاری (reload) شود
برای دریافت هشدار از طریق رایانامه، مقصد هشدار را با استفاده از دستور سراسری "set alert" (برای همهٔ سرویسها) یا دستور "alert" در زمینهٔ مدخل یک سرویس (برای یک سرویس منفرد) مشخص کنید.
تنظیم گیرندهٔ هشدار (Setting an alert recipient)
در صورت وقوع یک رویداد، Monit هشداری ارسال خواهد کرد. دو نوع دستور هشدار وجود دارد: سراسری و محلی.
نحو دستور سراسری:
SET ALERT mail-address [[NOT] {event, ...}] [REMINDER cycles]
مثال:
set alert foo@bar
در صورت وقوع هر رویدادی در هر سرویسی، یک رایانامهٔ پیشفرض به نشانی foo@bar ارسال خواهد کرد.
اگر میخواهید پیامهای هشدار را به نشانیهای رایانامهٔ بیشتری ارسال کنید، برای هر نشانی یک دستور "set alert 'email'" اضافه نمایید.
همچنین میتوان از دستور هشدار محلی در زمینهٔ بررسی یک سرویس برای فعالسازی هشدار تنها برای همان سرویس استفاده کرد:
ALERT mail-address [[NOT] {event, ...}] [REMINDER cycles]
مثال هشدار محلی:
check host myhost with address 1.2.3.4
if failed port 3306 protocol mysql then alert
if failed port 80 protocol http then alert
alert foo@baz # Local service alert
میتوانید دستورهای هشدار سراسری و محلی را با یکدیگر ترکیب کنید. در صورت وجود تعارض، هشدار محلی اولویت داشته و دستور سراسری را لغو (override) میکند.
تنظیم فیلتر رویداد (Setting an event filter)
اگر میخواهید پیام هشدار فقط برای رویدادهای خاصی ارسال شود، آنها را در یک بلوک "{event, ...}" فهرست کنید، مانند:
set alert foo@bar only on { timeout, nonexist }
همچنین میتوان با قرار دادن کلمهٔ "not" در ابتدای فهرست، آن را نفی کرد تا هشدارها برای همهٔ رویدادها بهجز موارد فهرستشده ارسال شوند. برای نمونه، جهت دریافت تمام هشدارها بهجز اعلان مربوط به شروع و توقف برنامهٔ Monit:
set alert foo@bar but not on { instance }
در اینجا فهرستی از تمام انواع رویدادهای ممکن که توسط Monit صادر میشوند آورده شده است. مقادیر ستون اول را میتوان در فهرست فیلتر رویداد که در بالا به آن اشاره شد استفاده کرد:
Event: | Failure state: | Success state: --------------------------------------------------------------------- action | "Action failed" | "Action done" checksum | "Checksum failed" | "Checksum succeeded" bytein | "Download bytes exceeded" | "Download bytes ok" byteout | "Upload bytes exceeded" | "Upload bytes ok" connection | "Connection failed" | "Connection succeeded" content | "Content failed", | "Content succeeded" data | "Data access error" | "Data access succeeded" exec | "Execution failed" | "Execution succeeded" fsflags | "Filesystem flags failed" | "Filesystem flags succeeded" gid | "GID failed" | "GID succeeded" icmp | "Ping failed" | "Ping succeeded" instance | "Monit instance changed" | "Monit instance changed not" invalid | "Invalid type" | "Type succeeded" link | "Link down" | "Link up" nonexist | "Does not exist" | "Exists" packetin | "Download packets exceeded" | "Download packets ok" packetout | "Upload packets exceeded" | "Upload packets ok" permission | "Permission failed" | "Permission succeeded" pid | "PID failed" | "PID succeeded" ppid | "PPID failed" | "PPID succeeded" resource | "Resource limit matched" | "Resource limit succeeded" saturation | "Saturation exceeded" | "Saturation ok" size | "Size failed" | "Size succeeded" speed | "Speed failed" | "Speed ok" status | "Status failed" | "Status succeeded" timeout | "Timeout" | "Timeout recovery" timestamp | "Timestamp failed" | "Timestamp succeeded" uid | "UID failed" | "UID succeeded" uptime | "Uptime failed" | "Uptime succeeded"
هر گیرندهٔ هشدار میتواند فیلتر مخصوص به خود را داشته باشد، برای نمونه:
set alert foo@bar { nonexist, timeout, resource, icmp, connection }
set alert security@bar on { checksum, permission, uid, gid }
set alert admin@bar
تنظیم یادآور خطا (Setting an error reminder)
برنامهٔ Monit بهطور پیشفرض در صورت شکست یک سرویس تنها یک اعلان، و در هنگام بازیابی آن نیز اعلان دیگری ارسال میکند. اگر میخواهید از باقی ماندن سرویس در وضعیت شکستخورده مطلع شوید، میتوانید از گزینهٔ reminder در دستور هشدار استفاده کنید:
SET ALERT mail-address [WITH] REMINDER [ON] number [CYCLES]
برای نمونه، اگر میخواهید در صورت تداوم وضعیت شکستخوردهٔ یک سرویس در هر دهمین چرخه به شما اطلاع داده شود، میتوانید از دستور زیر استفاده کنید:
alert foo@bar with reminder on 10 cycles
به همین ترتیب، اگر میخواهید در هر چرخهٔ ناموفق اعلان دریافت کنید، میتوانید از این دستور استفاده نمایید:
alert foo@bar with reminder on 1 cycle
برای نادیده گرفتن هشدارها برای یک کاربر و سرویس مشخص، عبارت "noalert"
را در بافت بررسی سرویس اضافه کنید.
NOALERT mail-address
مثال (ارسال تمام هشدارها به foo@bar بهجز برای سرویس p3):
set alert foo@bar
check process p1 with pidfile /var/run/p1.pid
check process p2 with pidfile /var/run/p2.pid
check process p3 with pidfile /var/run/p3.pid
noalert foo@bar
قالب پیام
قالب پیام هشدار را میتوان با استفاده از عبارت "set mail-format" تغییر داد:
SET MAIL-FORMAT {mail-format}
مثال:
set mail-format {
from: Monit Support <monit@foo.bar>
reply-to: support@domain.com
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
Yours sincerely,
monit
}
گزینهٔ from: نشانی ایمیل فرستنده برای هشدارهای Monit است. نام فرستنده اختیاری است، اما در صورت استفاده، مستلزم آن است که نشانی ایمیل پس از آن همانند مثال بالا در براکتهای زاویهدار (<>) محصور شود.
گزینهٔ reply-to: میتواند برای تنظیم هدر ایمیل reply-to، بهطور اختیاری همراه با یک نام، استفاده شود.
گزینهٔ subject: موضوع پیام را تعیین میکند و باید تنها در یک خط باشد.
گزینهٔ message: متن اصلی ایمیل را تعیین میکند. این گزینه همیشه باید آخرین گزینه در یک عبارت mail-format باشد. متن ایمیل میتواند هر چقدر که لازم است طولانی باشد، اما نباید شامل نویسهٔ بستن بلوک یعنی '}' باشد.
نیازی به استفاده از تمام گزینهها نیست، تنها گزینهای که میخواهید بازنویسی شود کفایت میکند. به عنوان مثال، برای تغییر سراسری تنها نشانی فرستنده:
set mail-format { from: bofh@foo.bar }
موضوع و بدنه میتوانند شامل متغیرهای $NAME باشند که توسط Monit بسط داده میشوند. در اینجا فهرستی از متغیرهایی که میتوان هنگام ساخت یک پیام هشدار استفاده کرد آورده شده است:
- $EVENT
رشتهای که رویداد رخداده را شرح میدهد.
- $SERVICE
نام سرویس
- $DATE
زمان و تاریخ کنونی (به سبک تاریخ RFC 822).
- $HOST
نام میزبانی که Monit روی آن در حال اجرا است
- $ACTION
نام کنشی که توسط Monit انجام شده است.
- $DESCRIPTION
شرح شرایط خطا
تنظیم سرور ایمیل برای تحویل هشدارها
سرور ایمیلی که Monit باید برای ارسال پیامهای هشدار از آن استفاده کند با یک عبارت "set mailserver" تعریف میشود:
SET MAILSERVER
<hostname|ip-address>
[PORT number]
[USERNAME string] [PASSWORD string]
[using SSL [with options {...}]
[CERTIFICATE CHECKSUM [MD5|SHA1|SHA256] <hash>],
...
[with TIMEOUT X SECONDS]
[using HOSTNAME hostname]
میتوان چند سرور ایمیل را با استفاده از یک فهرست جداشده با کاما تعیین کرد. اگر Monit نتواند به سرور اول متصل شود، سرور بعدی در فهرست را امتحان میکند و به همین ترتیب ادامه میدهد.
عبارت port امکان بازنویسی درگاه پیشفرض SMTP را فراهم میکند (465 برای SSL، یا 25 برای TLS و اتصالات غیرامن).
برنامهٔ Monit از AUTH PLAIN و AUTH LOGIN برای احراز هویت SMTP پشتیبانی میکند. میتوانید با استفاده از گزینههای USERNAME و PASSWORD نام کاربری و گذرواژه را تعیین کنید.
میتوانید گزینههای SSL/TLS را برای اتصال تنظیم کرده و همچنین چکسام گواهی SSL را بررسی نمایید.
مهلت زمانی پیشفرض اتصال ۳۰ ثانیه است. میتوانید این محدودیت را با استفاده از گزینهٔ TIMEOUT تغییر دهید.
مثال (تنظیم دو سرور ایمیل برای failover):
set mailserver smtp.gmail.com, smtp.other.host
بهطور پیشفرض، Monit از نام میزبان محلی در SMTP HELO/EHLO و در هدر Message-ID استفاده میکند. میتوانید با استفاده از گزینهٔ HOSTNAME این مورد را بازنویسی کنید..SS "صف رویداد (Event queue)" اگر هیچ سرور ایمیلی در دسترس نباشد، Monit میتواند رویدادها را برای تلاش مجدد تا زمان بازیابی سرور ایمیل، در فایلسیستم محلی صفبندی کند.
اگر Monit همراه با M/Monit استفاده شود، صف رویداد در صورت بروز مشکلات موقت، یک ذخیرهساز امن رویداد را برای M/Monit فراهم میآورد.
صف رویداد در برابر راهاندازیهای مجدد Monit پایدار است و به شرطی که فایلسیستم زیرین نیز پایدار باشد، با راهاندازی مجدد سیستم نیز حفظ میشود.
بهطور پیشفرض، این صف غیرفعال است و اگر مدیریتکنندهٔ هشدار ناموفق باشد، Monit پیام هشدار را نادیده گرفته و رها میکند.
برای فعالسازی صف رویداد، عبارت زیر را اضافه کنید:
SET EVENTQUEUE BASEDIR <path> [SLOTS <number>]
مقدار <path> مسیر دایرکتوریای است که رویدادها در آن ذخیره خواهند شد.
در صورت تمایل به محدود کردن اندازهٔ صف، میتوانید از گزینهٔ slots برای ذخیرهٔ حداکثر تا number پیام رویداد استفاده کنید.
مثال:
set eventqueue basedir /var/monit slots 5000
اگر بیش از یک نمونه از Monit را روی یک ماشین اجرا میکنید، باید از دایرکتوریهای صف رویداد مجزا استفاده کنید.
روشهای سرویس (SERVICE METHODS)
هر سرویس میتواند متدهای start، stop و restart مرتبطی داشته باشد که Monit از آنها برای اجرای عملیات روی سرویس استفاده کند.
نحو:
<START | STOP | RESTART> [PROGRAM] = "program"
[[AS] UID <number | string>]
[[AS] GID <number | string>]
[[WITH] TIMEOUT <number> SECOND(S)]
اگر "program" یک اسکریپت شل باشد، باید با "#!" آغاز شود و ادامهٔ خط اول باید یک مفسر را برای برنامه مشخص کند؛ مانند "#!/bin/sh".
همچنین "program" باید قابل اجرا باشد (برای مثال با حالت دسترسی 0755).
نوشتن مستقیم اسکریپتها در program به این روش نیز امکانپذیر است:
stop = "/bin/sh -c 'kill -s SIGTERM `cat /var/run/process.pid`'"
بهطور پیشفرض، برنامه با همان کاربری اجرا میشود که Monit تحت آن در حال اجرا است. اگر Monit با دسترسی ریشه (root) اجرا میشود، میتوانید به صورت اختیاری UID و GID مورد نظر را که برنامهٔ اجراشده باید به آنها تغییر یابد مشخص کنید.
مثال:
check process mmonit with pidfile /usr/local/mmonit/mmonit/logs/mmonit.pid start program = "/usr/local/mmonit/bin/mmonit" as uid "mmonit" and gid "mmonit" stop program = "/usr/local/mmonit/bin/mmonit stop" as uid "mmonit" and gid "mmonit"
در مورد بررسی فرایند، Monit حداکثر تا ۳۰ ثانیه برای پایان عملیات start/stop منتظر میماند و پس از آن متوقف شده و خطایی گزارش میکند. میتوانید این مهلت زمانی را با استفاده از گزینهٔ TIMEOUT یا بهطور سراسری با دستور set limits بازنویسی کنید.
مثال:
check process foobar with pidfile /var/run/foobar.pid start program = "/etc/init.d/foobar start" with timeout 60 seconds stop program = "/etc/init.d/foobar stop"
زمان بررسی سرویس (SERVICE POLL TIME)
سرویسها به صورت منظم در بازهٔ زمانی تعریفشده توسط عبارت "set daemon n" بررسی میشوند. بررسیها به همان ترتیبی که در فایل ".monitrc" نوشته شدهاند انجام میگیرند، مگر اینکه وابستگیهایی بین سرویسها تعریف شده باشد که در آن صورت سرویسهای پیشنیاز ابتدا آزمایش میشوند.
امکان تغییر زمانبندی بررسی یک سرویس با استفاده از عبارت "every" وجود دارد.
سه حالت مختلف وجود دارد:
- ۱. مضربی از چرخهٔ بررسی (A poll cycle multiple)
-
EVERY [number] CYCLES
- ۲. سبک کران (Cron-style)
-
EVERY [cron]
- ۳. سبک کران منفی یا عدم بررسی (Negative Cron-style)
-
NOT EVERY [cron]
یک رشته به سبک کران (cron-style) از ۵ فیلد تشکیل شده است که با فاصلههای خالی از هم جدا میشوند. تمام فیلدها الزامی هستند:
نام فیلد: | مقادیر مجاز: | نویسههای خاص: --------------------------------------------------------------- Minutes | 0-59 | * - , / Hours | 0-23 | * - , / Day of month | 1-31 | * - , / Month | 1-12 (1=jan, 12=dec) | * - , / Day of week | 0-6 (0=sunday, 6=saturday) | * - , /
نویسههای خاص:
نویسه: | توضیحات:
---------------------------------------------------------------
* (asterisk) | ستاره نشان میدهد که عبارت با تمام مقادیر این فیلد
| مطابقت دارد؛ مانند استفاده از ستاره در فیلد چهارم
| (ماه) که به معنای «هر ماه» خواهد بود.
- (hyphen) | خطتیره برای تعریف بازهها استفاده میشود. برای نمونه،
| 8-9 در فیلد ساعت به معنای بین 8AM و 9AM است. توجه
| داشته باشید که بازه شامل زمان پایان نیز میشود؛ یعنی
| از 8AM تا 10AM مگر اینکه دقیقه تعیین شده باشد. نمونهٔ
| دیگر، 1-5 در فیلد روز هفته است که از دوشنبه تا جمعه
| (شامل جمعه) را مشخص میکند.
, (comma) | ویرگول برای تعیین یک دنباله به کار میرود. برای نمونه،
| 17,18 در فیلد روز، روزهای هفدهم و هجدهم ماه را مشخص
| میکند. یک دنباله همچنین میتواند شامل بازهها باشد؛
| برای نمونه، 1-5,0 در فیلد روز هفته بیانگر دوشنبه تا
| جمعه و یکشنبه است.
/ (slash) | اسلش مقادیر گام (step) را تعیین میکند. همراه با ستاره
| یا بازهها برای تعیین فواصل استفاده میشود. برای نمونه،
| */5 در فیلد دقیقه به معنای «هر ۵ دقیقه» (0,5,10,15...)
| است. قالب N-M/S به معنای «هر S-امین مقدار در بازهٔ N
| تا M» است؛ برای نمونه، 10-30/5 در فیلد دقیقه یعنی
| 10,15,20,25,30.
مثال ۱: بررسی یکبار به ازای هر دو چرخه
check process nginx with pidfile /var/run/nginx.pid every 2 cycles
مثال ۲: اجرای یک گزارش (یکبار) در هر دوشنبه ساعت 08:15
check program weekly_report with
path /var/monit/programs/weekly_report.sh
every "15 8 * * 1"
if status != 0 then alert
مثال ۳: بررسی در هر ۵ دقیقه
check process app with pidfile /var/run/app.pid every "*/5 * * * *"
مثال ۴: بررسی هر ۱۵ دقیقه در طول ساعات کاری (۹ صبح تا ۵ بعدازظهر) در روزهای کاری هفته
check process webapp with pidfile /var/run/webapp.pid every "*/15 9-17 * * 1-5"
مثال ۵: عدم اجرای بررسیها در طول بازهٔ پشتیبانگیری (یکشنبهها از ساعت ۰ تا ۳ بامداد). نکته: توصیه میکنیم به جای دقت در سطح دقیقه، از "not every" همراه با بازههای ساعتی/روزانه استفاده کنید؛ چرا که بررسیها در خارج از بازهٔ استثنا، در هر چرخهٔ بررسی اجرا خواهند شد.
check process mysqld with pidfile /var/run/mysqld.pid not every "* 0-3 * * 0"
نکته دربارهٔ بسامد اجرا:
عبارت "every" با زمانبندی به سبک کران، از معناشناسی crontab پیروی میکند: Monit صرفنظر از تنظیم چرخهٔ بررسی، در زمان زمانبندیشده این بررسی را حداکثر یکبار در دقیقه اجرا خواهد کرد. برای مثال، اگر چرخهٔ بررسی ۳۰ ثانیه باشد و بررسی با عبارت "every '15 8 * * 1'" زمانبندی شده باشد، تنها یکبار در ساعت 08:15 روز دوشنبه اجرا میشود، نه دو بار در آن دقیقه. این رفتار یکبار-در-دقیقه برای وظایف زمانبندیشدهای که باید در زمان مشخصی اجرا شوند، مانند گزارش هفتگی در مثال ۲ بالا، ایدهآل است..PP در مقابل، عبارت "not every" در هر چرخهٔ نظرسنجی (poll cycle) ارزیابی میشود که آن را برای تعریف بازههای نگهداری یا پشتیبانگیری ایدهآل میسازد. برای نمونه، "not every '* 2-5 * * *'" بررسیها را در بازهٔ زمانی ۲ تا ۵ صبح نادیده میگیرد و در هر چرخهٔ نظرسنجی بررسی میکند که آیا باید صرفنظر کند یا ادامه دهد. این روش نسبت به زمانبندی cron در سطح دقیقه برای بازههای استثنا، کارآمدتر است.
ترکیب زمانبندی مبتنی بر چرخه و سبک cron:
اگر برای برخی سرویسها از زمانبندی "every" به سبک cron استفاده میکنید، آگاه باشید که این کار ممکن است بر زمانبندی سرویسهایی که از "every [number] cycles" استفاده میکنند تأثیر بگذارد. تطابق با یک الگوی cron باعث بیدار شدن Monit برای اجرای بررسی زمانبندیشده میشود و این چرخهٔ نظرسنجی اضافی، شمارندهٔ چرخه را برای تمام سرویسها به جلو میبرد. برای نمونه، اگر سرویسی روی "every "* * * * *"" تنظیم شده باشد (بررسی در هر دقیقه)، Monit هر دقیقه بیدار میشود و سرویسی که با "every 10 cycles" پیکربندی شده است، سریعتر از حد انتظار به شمارش چرخهٔ خود میرسد. اگر به زمانبندی دقیق مبتنی بر زمان نیاز دارید، به جای "every" مبتنی بر چرخه، از "every" به سبک cron استفاده کنید.
گروههای سرویس (SERVICE GROUPS)
مدخلهای سرویس در فایل پیکربندی کنترلی، monitrc، میتوانند با عبارت group گروهبندی شوند. نحو آن به سادگی به صورت زیر است (کلمهٔ کلیدی با حروف بزرگ):
GROUP groupname
با این عبارت میتوان مدخلهای سرویس مشابه را گروهبندی کرد و آنها را به صورت یکپارچه مدیریت نمود. Monit توابعی را برای راهاندازی (start)، متوقف کردن (stop)، راهاندازی مجدد (restart)، پایش (monitor) و لغو پایش (unmonitor) یک گروه از سرویسها به صورت زیر فراهم میکند:
برای شروع به کار یک گروه از سرویسها از خط فرمان:
monit -g <groupname> start
برای متوقف کردن یک گروه از سرویسها:
monit -g <groupname> stop
برای راهاندازی مجدد یک گروه از سرویسها:
monit -g <groupname> restart
یک سرویس میتواند با استفاده از بیش از یک عبارت group به چندین گروه افزوده شود:
group www group filesystem
حالت پایش سرویس (SERVICE MONITORING MODE)
برنامهٔ Monit از دو حالت پایش پشتیبانی میکند: active و passive.
نحو:
MODE <ACTIVE | PASSIVE>
در حالت active، برنامهٔ Monit به صورت پیشکنشگر سرویس را پایش میکند و در صورت بروز مشکل، هشدار ارسال کرده و سرویس را مجدداً راهاندازی مینماید. حالت Active حالت پیشفرض است.
حالت passive مشابه حالت active است، با این تفاوت که در صورت خرابی سرویس، monit سعی نخواهد کرد با راهاندازی مجدد سرویس مشکل را حل کند و تنها هشدار صادر میکند.
راهاندازی مجدد سیستم و شروع به کار سرویس (SYSTEM REBOOT AND SERVICE STARTUP)
برنامهٔ Monit از سه حالت راهاندازی مجدد پشتیبانی میکند: start، nostart و laststate.
نحو:
ONREBOOT <START | NOSTART | LASTSTATE>
در حالت start، برنامهٔ Monit همیشه پس از راهاندازی مجدد سیستم، سرویس را به صورت خودکار شروع میکند، حتی اگر پیش از راهاندازی مجدد متوقف شده باشد. این حالت پیشفرض است و زمانی که onreboot مشخص نشده باشد استفاده میشود.
در حالت nostart، سرویس هرگز پس از راهاندازی مجدد سیستم به صورت خودکار شروع به کار نمیکند. این حالت برای راهکارهای با دسترسیپذیری بالا (HA) با کلاسترهای active/passive طراحی شده است. برای مثال، گروه سرویس HA، متشکل از یک نام مستعار IP متحرک و یک سرور برنامه، روی میزبان H1 اجرا شده است، میزبان H2 پشتیبان است و سازوکار ضربان قلب (heartbeat) بین هر دو میزبان فعال است. گروه سرویس HA باید تنها روی یکی از گرهها راهاندازی شود. اگر H1 از کار بیفتد، H2 مدیریت گروه HA را بر عهده میگیرد. چنانچه H1 مجدداً راهاندازی شود، بسیار مهم است که تلاش نکند گروه HA را نیز راهاندازی کند؛ حتی با وجود اینکه این گروه پیش از خرابی روی H1 فعال بوده است، زیرا اکنون HA روی H2 در حال اجراست.
در حالت laststate، وضعیت پایش سرویس پس از راهاندازی مجدد سیستم ماندگار خواهد بود. برای نمونه، اگر سرویسی پیش از راهاندازی مجدد فعال بوده باشد، پس از راهاندازی مجدد نیز فعال خواهد شد؛ اگر پیش از راهاندازی مجدد متوقف بوده باشد، پس از آن نیز شروع به کار نخواهد کرد و به همین ترتیب.
حالت پیشفرض ONREBOOT START میتواند به صورت سراسری لغو شود:
SET ONREBOOT <START | NOSTART | LASTSTATE>
محدودیت راهاندازی مجدد سرویس (SERVICE RESTART LIMIT)
برنامهٔ Monit یک سازوکار محدودیت راهاندازی مجدد را برای شرایطی که یک سرویس برای مدتی طولانی از شروع به کار یا پاسخدهی سر باز میزند، فراهم میکند.
سازوکار محدودیت راهاندازی مجدد بر اساس تعداد دفعات راهاندازی مجدد سرویس و تعداد چرخههای نظرسنجی کار میکند. برای مثال، اگر یک سرویس x بار در طول y چرخهٔ نظرسنجی (که در آن x <= y) راهاندازی مجدد شده باشد، آنگاه Monit عملی را انجام خواهد داد (برای مثال لغو پایش سرویس). در صورت وقوع اتمام مهلت زمانی (timeout)، اگر دریافت این رویداد را ثبت کرده باشید، Monit یک پیام هشدار ارسال خواهد کرد.
نحو عبارت timeout به صورت زیر است (کلمات کلیدی با حروف بزرگ هستند):
IF <number> RESTART <number> CYCLE(S) THEN <action>
مقدار action یا یکی از اقدامات عمومی است یا TIMEOUT (برای حفظ سازگاری با نسخههای گذشته، معادل اقدام UNMONITOR است).
در اینجا مثالی آورده شده است که در آن اگر سرویس ۲ بار در طول ۳ چرخه مجدداً راهاندازی شود، Monit پایش آن را لغو میکند:
if 2 restarts within 3 cycles then unmonitor
برای اینکه Monit پس از غیرفعال شدن پایش، مجدداً سرویس را بررسی کند، دستور "monit monitor servicename" را از خط فرمان اجرا کنید.
مثالی برای تنظیم اجرای دستور سفارشی (exec) هنگام اتمام مهلت زمانی:
if 5 restarts within 5 cycles then exec "/foo/bar"
مثالی برای متوقف کردن سرویس:
if 7 restarts within 10 cycles then stop در صورت مشخص شدن در فایل پیکربندی، Monit میتواند پیش از آغاز (start)، توقف (stop)، پایش (monitoring) یا توقف پایش (unmonitoring) سرویسها، وابستگیها را بررسی کند. دستور وابستگی میتواند درون هر یک از مدخلهای سرویس در فایل پیکربندی Monit به کار رود.
دستور زبان برای عبارت depend بسیار ساده است:
DEPENDS on service[, service [,...]]
که در آن service نام یک مدخل سرویسِ مورد بررسی است که در فایل ".monitrc" شما استفاده شده است، مانند apache یا datafs.
میتوانید بیش از یک نام سرویس از هر نوعی اضافه کنید یا بیش از یک دستور depend را در یک مدخل به کار ببرید.
سرویسهای مشخصشده در دستور depend در طول عملیاتهای stop/start/monitor/unmonitor بررسی خواهند شد.
اگر سرویسی متوقف شده یا پایش آن متوقف شود، هر سرویسی را که به آن وابسته است نیز متوقف کرده یا از حالت پایش خارج میکند.
اگر سرویس آغاز به کار کند، تمام سرویسهایی که این سرویس به آنها وابسته است پیش از شروع این سرویس آغاز خواهند شد. اگر آغاز به کار سرویسی با شکست مواجه شود، سرویسِ دارای پیشنیاز آغاز نخواهد شد، اما به خاطر خواهد سپرد که باید آغاز شود و در چرخهٔ بعدی مجدداً تلاش خواهد کرد.
اگر سرویسی راهاندازی مجدد (restart) شود، ابتدا تمام سرویسهای فعالی را که به آن وابسته هستند متوقف میکند و پس از این که خودش آغاز به کار کرد، دوباره تمام سرویسهای وابستهای را که پیش از راهاندازی مجدد فعال بودند آغاز مینماید.
در اینجا مثالی آورده شده است که در آن مدخل سرویس apache را طوری تنظیم میکنیم که به فایل باینری زیربنایی apache وابسته باشد. اگر این فایل باینری تغییر کند، یک هشدار ارسال شده و apache دیگر پایش نمیشود. دلیل این کار امنیت است و اینکه Monit نباید فایل باینریِ احتمالاً دستکاریشدهٔ apache را اجرا کند.
(1) check process apache with pidfile "/var/run/httpd.pid" (2) depends on httpd (3) ... (4) (5) check file httpd with path /usr/bin/httpd (6) if failed checksum then stop
مدخل نخست، مدخل فرایند برای apache است. خط دوم یک وابستگی میان این مدخل و مدخل سرویسی با نام httpd در خط ۵ برقرار میسازد. یک درخت وابستگی به این صورت عمل میکند: اگر اقدامی در شاخهای پایینتر انجام شود، در درخت به سمت بالا انتشار مییابد و برای هر مدخل وابسته همان اقدام را اجرا میکند. در این حالت، اگر checksum در خط ۶ با شکست روبرو شود، یک اقدام stop اجرا شده و فایل باینری apache دیگر بررسی نخواهد شد. اما از آنجا که مدخل فرایند apache به مدخل httpd وابسته است، این مدخل نیز اقدام stop را اجرا خواهد کرد. بهطور خلاصه، اگر آزمون checksum برای فایل باینری httpd شکست بخورد، هم مدخل check file httpd و هم مدخل check process apache متوقف میشوند.
درخت وابستگی یک ساختار عمومی است و میتواند میان تمام انواع مدخلهای سرویس استفاده شود، چندین سطح را در بر گیرد و هر اقدام پشتیبانیشدهای را انتشار دهد (بهجز اقدام exec که به دلایل مشخص، در یک درخت وابستگی به سمت بالا انتشار نمییابد).
در اینجا یک مثال متفاوت دیگر آورده شده است. پیکربندی سرور رایج زیر را در نظر بگیرید:
WEB-SERVER -> APPLICATION-SERVER -> DATABASE -> FILESYSTEM
(a) (b) (c) (d)
میتوانید وابستگیها را طوری تنظیم کنید که وبسرور وابسته به اجرای سرور برنامه (application server) پیش از آغاز وبسرور باشد، سرور برنامه به سرور پایگاهداده وابسته باشد و پایگاهداده پیش از آغاز به کار، وابسته به سوار شدن (mount) سامانهٔ فایل باشد. همچنین برای مشاهدهٔ مثالهای استفاده از دستور depend بخش مثالها را در زیر ببینید.
در اینجا نحوهٔ عملکرد Monit با وابستگیهای فوق شرح داده شده است:
- اگر هیچ سرویسی در حال اجرا نباشد
- Monit سرورها را با این ترتیب آغاز خواهد کرد: d، c، b، a
- اگر همهٔ سرورها در حال اجرا باشند
- هنگامی که دستور 'monit stop all' را اجرا میکنید، ترتیب توقف به این صورت است: a، b، c، d. اگر 'monit stop d' را اجرا کنید، آنگاه a، b و c نیز متوقف میشوند زیرا به d وابسته هستند و در نهایت d متوقف میشود.
- اگر a اجرا نشود
- Monit سرویس a را آغاز خواهد کرد.
- اگر b اجرا نشود
- Monit ابتدا a را متوقف کرده، سپس b را آغاز میکند و در نهایت اگر b مجدداً بالا آمد، a را آغاز مینماید.
- اگر c اجرا نشود
- Monit ابتدا a و b را متوقف میکند، سپس c را آغاز کرده و در نهایت b و سپس a را آغاز مینماید.
- اگر d اجرا نشود
- Monit ابتدا a، b و c را متوقف کرده، سپس d را آغاز میکند و در نهایت c، b و سپس a را آغاز مینماید.
- اگر فایل پیکربندی دارای یک حلقهٔ وابستگی باشد.
- یک حلقهٔ
وابستگی
برای نمونه
به شکل a->b و b->a
یا a->b->c->a است.
هنگامی که Monit آغاز به کار میکند، چنین حلقههایی را بررسی کرده و در صورت یافتن حلقه، با نمایش خطا خارج میشود. همچنین اگر از دستور depend به گونهای استفاده شده باشد که به هیچ سرویسی در فایل پیکربندی اشاره نکند، با اعلام خطا خارج خواهد شد.
آزمونهای سرویس (SERVICE TESTS)
محدودیتها (LIMITS)
میتوانید محدودیتهای گوناگونی را پیکربندی و تنظیم کنید تا اندازهٔ بافرها و مهلتهای زمانی (timeouts) مورد استفاده توسط Monit را تغییر دهید. در بیشتر شرایط مقادیر پیشفرض مناسب هستند. در صورت نیاز، محدودیتهایی که در حال حاضر میتوانید در Monit تغییر دهید در زیر آورده شدهاند.
دستور زبان:
SET LIMITS {
PROGRAMOUTPUT: <number> <unit>,
SENDEXPECTBUFFER: <number> <unit>,
FILECONTENTBUFFER: <number> <unit>,
HTTPCONTENTBUFFER: <number> <unit>,
NETWORKTIMEOUT: <number> <timeunit>
PROGRAMTIMEOUT: <number> <timeunit>
STOPTIMEOUT: <number> <timeunit>
STARTTIMEOUT: <number> <timeunit>
RESTARTTIMEOUT: <number> <timeunit>
EXECTIMEOUT: <number> <timeunit>
}
که در آن:
unit برابر است
با "B" (بایت)،
"kB"
(کیلوبایت)
یا "MB"
(مگابایت)
timeunit برابر
است با "MS"
(میلیثانیه)
یا "S"
(ثانیه)
راهنمای گزینهها:
--------------------------------------------------------------------------------- | Option | Description | Default | --------------------------------------------------------------------------------- | programOutput | limit for check program output (truncated after) | 512 B | | sendExpectBuffer | limit for send/expect protocol test | 256 B | | fileContentBuffer | limit for file content test (line) | 512 B | | httpContentBuffer | limit for HTTP content test (response body) | 1 MB | | networkTimeout | timeout for network I/O | 5 s | | programTimeout | timeout for check program | 300 s | | stopTimeout | timeout for service stop | 30 s | | startTimeout | timeout for service start | 30 s | | restartTimeout | timeout for service restart | 30 s | | execTimeout | timeout for test action exec | nolimit | --------------------------------------------------------------------------------- برنامهٔ Monit چندین آزمون if ارائه میدهد که میتوانید از آنها در یک دستور 'check' برای ارزیابی جنبههای گوناگون یک سرویس استفاده کنید.
میتوانید هم برای یک مقدار از پیش تعیینشده و هم برای یک محدوده آزمون انجام دهید و در صورت تغییر مقدار، اقداماتی (actions) را به اجرا درآورید.
ساختار دستوری کلی برای آزمودن یک مقدار یا محدوده مشخص:
IF <test> THEN <action> [ELSE <action>]
عملیات (action) هر بار که شرط <TEST> برقرار باشد، ارزیابی میشود. اقدام در صورت موفقیت اختیاری است و تنها زمانی اجرا میشود که وضعیت از شکست به موفقیت تغییر یابد. اگر اقدام موفقیت تنظیم نشده باشد، Monit بهطور پیشفرض یک هشدار بازیابی (recovery alert) ارسال خواهد کرد.
ساختار دستوری کلی برای آزمون تغییر مقدار:
IF CHANGED <test> THEN <action>
این اقدام هر بار که مقدار تغییر کند اجرا میشود. Monit مقدار جدید را به خاطر میسپارد و در صورت تغییر مجدد آن، رویدادی را فعال میکند.
اقدام (ACTION)
هر آزمون میتواند با متدهای alert، start، stop، restart، unmonitor یا exec مرتبط شود که Monit میتواند از آنها برای اجرای اقدامات یا برنامهها روی سرویس استفاده کند. اقدام موفقیتآمیز از متد ignore نیز پشتیبانی میکند.
ساختار دستوری:
ALERT | IGNORE | START | STOP | RESTART | UNMONITOR
یا:
EXEC "program" [[AS] UID <number | string>] [[AS] GID <number | string>] [[WITH] TIMEOUT <number> SECOND(S)] [REPEAT EVERY [<number>] CYCLE(S)]
در هر آزمون باید اقدام مورد نظر برای اجرا را از این فهرست انتخاب کنید:
- ALERT با هر بار تغییر وضعیت، رویداد هشداری را برای کاربر ارسال میکند.
- RESTART سرویس را مجدداً راهاندازی میکند و هشداری میفرستد. راهاندازی مجدد با فراخوانی متد ثبتشدهٔ restart برای سرویس، یا در صورت تنظیم نشدن آن، ابتدا با فراخوانی متد stop و سپس متد start انجام میشود.
- START سرویس را با فراخوانی متد ثبتشدهٔ start آغاز میکند و هشداری میفرستد.
- STOP سرویس را با فراخوانی متد ثبتشدهٔ stop متوقف میکند و هشداری میفرستد. اگر Monit سرویسی را متوقف کند، دیگر توسط Monit بررسی نخواهد شد و بعداً نیز دوباره راهاندازی نمیشود. برای فعالسازی مجدد پایش سرویس، باید صراحتاً پایش را از طریق رابط وب یا از طریق کنسول فعال کنید.
- EXEC
میتواند
برای اجرای
یک برنامهٔ
دلخواه و
ارسال
هشدار
استفاده
شود. در
صورت
انتخاب این
اقدام،
باید
برنامهٔ
اجرایی را
مشخص کنید و
اگر برنامه
نیاز به
آرگومان
دارد، باید
برنامه و
آرگومانهای
آن را داخل
یک رشته
نقلقولشده
قرار دهید.
همچنین
میتوانید
به صورت
اختیاری uid و gid
را تعیین
کنید تا
برنامهٔ
اجراشده پس
از شروع به
آنها
تغییر یابد.
اگر آزمون
با شکست
مواجه شود،
برنامه
تنها یک
بار اجرا
میشود. در
صورتی که
خطا برای
تعداد
چرخههای
مشخصی
ادامه
یابد،
میتوانید
تکرار اجرا
را فعال
کنید. به
عنوان مثال:
if failed <test> then exec "/usr/local/bin/sms.sh" as uid "nobody" and gid "nobody" repeat every 5 cyclesبه یاد داشته باشید، اگر Monit توسط کاربر ریشه (root) اجرا شود، تمام برنامههای اجرا شده توسط Monit با مجوزهای مدیر سیستم (superuser) شروع خواهند شد مگر اینکه از افزونههای uid و gid استفاده شده باشد.
- UNMONITOR پایش سرویس را غیرفعال میکند و هشداری میفرستد. سرویس دیگر توسط Monit بررسی نخواهد شد و بعداً نیز دوباره راهاندازی نمیشود. برای فعالسازی مجدد پایش سرویس باید صراحتاً پایش را از رابط وب یا از کنسول فعال کنید.
- IGNORE میتواند در بخش اقدام استفاده شود تا زمانی که بررسی مجدداً وارد این وضعیت میشود، هشداری ایجاد نشود.
تحمل خطا (FAULT TOLERANCE)
بهطور پیشفرض، اگر شرطی برقرار باشد اقدام اجرا شده و سرویس مربوطه در وضعیت خطا قرار میگیرد. با این حال، میتوانید تعیین کنید که آزمون بیش از یک بار با شکست مواجه شود تا رویداد خطا فعال گردد و وضعیت سرویس به failed تغییر یابد. این قابلیت برای جلوگیری از دریافت هشدارهای ناشی از خطاهای گذرا و کاذب، به ویژه در آزمونهای شبکه، بسیار مفید است.
ساختار دستوری:
FOR <X> CYCLES ...
یا:
<X> [TIMES WITHIN] <Y> CYCLES ...
این شرط میتواند هم برای اقدام مربوط به شکست (failure) و هم اقدام موفقیت (success) استفاده شود.
قالب اول که سادهتر و قالب پیشنهادی است، نیازمند "X" رویداد متوالی پیش از تغییر وضعیت است:
if failed port 80 for 3 cycles then alert
قالب دوم پیشرفتهتر است و امکان تحمل مشکلات مقطعی را فراهم میآورد، در حالی که همچنان مشکلات حاد—که در آن سرویس به طور مکرر بین وضعیت خطا و موفقیت در نوسان است—را شناسایی میکند.
به عنوان مثال، اگر سرویس یکی در میان در چرخهها شکست بخورد (1-0-1-0-1-0-...)، شرط "for 2 cycles" با وجود مشکل داشتن سرویس هرگز برقرار نخواهد شد. عبارت زیر چنین وضعیتی را پوشش میدهد:
if failed port 80 for 3 times within 5 cycles then alert
نمونهای که چندین سطح خطا و اقدامات را تعیین میکند:
check filesystem rootfs with path /dev/hda1 if space usage > 80% for 5 times within 15 cycles then alert if space usage > 90% for 5 cycles then exec '/try/to/free/the/space'
نکته: بیشینهٔ مقدار برای چرخهها (cycles) عدد 64 است..SS "آزمونهای وجود (EXISTENCE TESTS)" این آزمون امکان راهاندازی یک کنش را بر اساس وجود شیء تحت نظارت فراهم میکند. این قابلیت برای سرویسهای process، file، directory، filesystem و fifo پشتیبانی میشود.
اگر هیچ آزمون وجودی تعریف نشده باشد، آزمون ضمنی عدم وجود با کنش راهاندازی مجدد فعال میشود؛ بنابراین به عنوان مثال اگر فرآیند متوقف شود، Monit آن را دوباره راهاندازی خواهد کرد.
دو نوع آزمون وجود دردسترس است:
NON-EXIST
این آزمون در صورتی که شیء وجود نداشته باشد کنشی را اجرا میکند. برای نمونه میتوان از آن برای اطمینان از در حال اجرا بودن apache، مانت بودن سیستمفایل داده و غیره استفاده کرد.
IF [DOES] NOT EXIST THEN <action>
مقدار action انتخابی از بین "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال: اجرای یک اسکریپت در صورتی که سیستمفایل وجود نداشته باشد:
check filesystem disk1 with path /dev/sda1
if does not exist then exec "/sbin/mount..."
EXIST
این آزمون معکوس آزمون عدم وجود است: در صورتی که شیء وجود داشته باشد، کنشی را آغاز میکند. به عنوان مثال میتواند برای متوقف کردن (kill) فرآیندی که نباید در حال اجرا باشد به کار رود.
IF [DOES] EXIST THEN <action>
مقدار action انتخابی از بین "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال: کشتن فرآیندی که نباید اجرا شود:
check process vmware matching "vmware"
if exist then exec "/usr/bin/pkill -9 vmware"
مثال: ارسال هشدار در صورت وجود فایلی که نباید موجود باشد:
check file x with path /some/path/x
if exist then alert
آزمونهای منابع (RESOURCE TESTS)
برنامه Monit میتواند میزان مصرف منابع توسط یک سرویس را بررسی کند. این آزمون تنها میتواند درون یک مدخل سرویس system یا process در فایل پیکربندی Monit استفاده شود.
بسته به ویژگیهای سیستم یا فرآیند، سرویسها میتوانند متوقف شده یا مجدداً راهاندازی شوند و هشدارهایی ایجاد گردد. بدین ترتیب امکان بهرهبرداری از سیستمهای بیکار و محافظت از سیستم تحت بار سنگین فراهم میشود.
نحو (Syntax):
IF <resource> <operator> <value> THEN <action>
مقدار operator انتخابی از بین "<"، ">"، "!="، "==" در نشانهگذاری C، "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوسته sh و "greater"، "less"، "equal"، "notequal" در شکل انسانخوان است (در صورت مشخص نشدن، مقدار پیشفرض EQUAL است).
مقدار value یک عدد صحیح یا یک عدد حقیقی است.
مقدار action انتخابی از بین "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مجموعه resource به نوع سرویس بستگی دارد:
آزمونهای منابع سیستم (System resource tests)
عبارت LOADAVG([1min|5min|15min]) [PER CORE] به میانگین بار (load average) سیستم اشاره دارد. میانگین بار برابر است با تعداد فرآیندهای موجود در صف اجرای سیستم بهازای هر هسته CPU، که در دوره زمانی مشخص میانگینگیری شده است. مثال:
if loadavg (1min) per core > 2 for 15 cycles then alert if loadavg (5min) per core > 1.5 for 10 cycles then alert if loadavg (15min) per core > 1 for 8 cycles then alert
اگر گزینه per core را حذف کنید، آزمون بدون در نظر گرفتن تعداد هستههای CPU میانگین بار کل را بررسی خواهد کرد.
عبارت CPU([user|system|wait|nice|hardirq|softirq|steal|guest|guestnice]) درصد زمانی است که سیستم صرف نوع مشخصی از وظایف میکند:
- user
- پردازنده (CPU) در حال اجرای کد در حالت فضای کاربری (user space) است، که شامل هر فرآیندی است که متعلق به هسته نباشد؛ مانند وبسرورها، پایگاههای داده، پوستهها و برنامههای مرتبط با محیط میزکار.
- system
- پردازنده در حال اجرای هسته است، که شامل درایورها و سایر ماژولهای هسته میشود. هسته همچنین درخواستهای فرآیندهای فضای کاربری مانند تخصیص حافظه، ورودی/خروجی دیسک و شبکه و ساخت فرآیندهای فرزند را مدیریت میکند.
- wait
- وضعیت انتظار ورودی/خروجی (I/O wait) زمانی رخ میدهد که CPU در حین انتظار برای تکمیل یک عملیات ورودی/خروجی از دیسک یا شبکه، بیکار بوده است.
- nice
- آمار nice مربوط به فرآیندهای فضای کاربری است که با اولویت تغییریافته (بالاتر یا پایینتر از حد معمول) اجرا میشوند.
- hardirq
- هسته در حال پاسخدهی به درخواستهای وقفه سختافزاری است. وقفههای سختافزاری از تجهیزات جانبی مانند صفحهکلید، رابطهای شبکه، دیسکها، ساعت سیستم و غیره ناشی میشوند.
- softirq
- هسته در حال پاسخدهی به درخواستهای وقفه نرمافزاری است. وقفههای نرمافزاری از فرآیندهای در حال اجرا در سیستم ناشی میشوند.
- steal
- این مورد تنها برای ماشینهای مجازی روی یک هایپروایزر اعمال میشود. زمان steal نشاندهنده درصد زمانی است که یک ماشین مجازی مجبور بوده منتظر CPU واقعی بماند در حالی که هایپروایزر در حال سرویسدهی به یک ماشین مجازی دیگر بوده است. اگر این عدد بالا بماند، سیستم میزبان بیش از حد شلوغ است و ممکن است به پردازندههای فیزیکی بیشتری نیاز داشته باشد یا لازم باشد برخی از ماشینهای مجازی به میزبان دیگری منتقل شوند.
- guest
- این مورد تنها برای ماشینهای میزبانی که هایپروایزر اجرا میکنند اعمال میشود. این پارامتر زمان صرفشده برای اجرای یک CPU مجازی برای سیستمعاملهای مهمان تحت کنترل هسته لینوکس را نشان میدهد. این مقدار از قبل در آمار "user" لحاظ شده است.
- guestnice
- این مورد تنها برای ماشینهای میزبانی که هایپروایزر اجرا میکنند اعمال میشود. این پارامتر زمان صرفشده برای اجرای یک CPU مجازی برای سیستمعاملهای مهمان تحت کنترل هسته لینوکس با اولویت تغییریافته را نشان میدهد. این مقدار از قبل در آمار "nice" لحاظ شده است.
تعدیلکننده user/system/wait/nice/hardirq/softirq/steal/guest/guestnice اختیاری است و پشتیبانی از آن به پلتفرم بستگی دارد (پشتیبانی در لینوکس به نسخه هسته وابسته است؛ تمام این آمارها از نسخه هسته 2.6.33 به بعد در دسترس هستند):
------------------------------------------------------------------------------------------------- | Platform | user | nice | system | wait | hardirq | softirq | steal | guest | guest nice | ------------------------------------------------------------------------------------------------- | AIX | X | | X | X | | | | | | | DragonFlyBSD | X | X | X | | X | | | | | | FreeBSD | X | X | X | | X | | | | | | Linux | X | X | X | X | X | X | X | X | X | | MacOS | X | X | X | | | | | | | | NetBSD | X | X | X | | X | | | | | | OpenBSD | X | X | X | | X | | | | | | Solaris | X | | X | X | | | | | | -------------------------------------------------------------------------------------------------
مثال:
if cpu usage > 95% for 10 cycles then alert
عبارت MEMORY میزان مصرف حافظه سیستم برحسب درصد [%] یا مقدار مطلق [B, kB, MB, GB] است. مثال:
if memory usage > 75% for 5 cycles then alert
عبارت SWAP میزان استفاده از swap سیستم برحسب درصد [%] یا مقدار مطلق [B, kB, MB, GB] است. مثال:
if swap usage > 20% for 10 cycles then alert
عبارتهای
PAGEIN و PAGEOUT
امکان
نظارت بر
فعالیت swap و
فشار حافظه
(memory pressure) سیستم را
فراهم
میکنند.
زمانی که
سیستم به
حافظه
بیشتری
نیاز پیدا
کند، ممکن
است انتقال
صفحات
حافظه به
داخل و خارج
از دستگاه swap
را آغاز کند.
ورودی/خروجی
دستگاه swap
بسیار
کندتر از
دسترسی به RAM
است، که این
امر آن را به
شاخصی برای
فشار حافظه
سیستم
تبدیل
میکند. یک
قاعده کلی
سرانگشتی
برای
فعالیت
مبادله به
شرح زیر است:
0 pages/sec: سالم (Healthy)
1-10 pages/sec: پیجینگ
جزئی،
معمولاً
قابل قبول
>100 pages/sec sustained: فشار
حافظه،
نیازمند
بررسی
>1000 pages/sec: کوبش
شدید حافظه
(Thrashing)، اقدام
فوری لازم
است
مثال:
if pageout > 50 per second for 20 cycles then alert if pageout > 100 per second for 10 cycles then alert آزمونهای منابع فرایند (Process resource tests)
CPU میزان استفاده خود فرایند از CPU است [به درصد]. Monit میزان مصرف CPU را بر اساس تعداد ریسهها (threads) در برابر هستههای در دسترس CPU محاسبه میکند. اگر فرایند یک ریسه داشته باشد، ۱۰۰٪ مصرف CPU معادل ۱۰۰٪ بهرهبرداری از یک هستهٔ CPU است. اگر ۲ ریسه داشته باشد، مصرف ۱۰۰٪ CPU هنگامی گزارش میشود که از ۲ هستهٔ CPU به میزان ۱۰۰٪ استفاده کند و به همین ترتیب. اگر تعداد ریسههای فرایند بیشتر از هستههای موجود CPU در دستگاه باشد، مصرف ۱۰۰٪ CPU متناظر با بهرهبرداری کامل از تمام هستههای در دسترس CPU خواهد بود. مثال:
if cpu > 10% for 5 cycles then restart
TOTAL CPU کل میزان مصرف CPU توسط فرایند و فرزندان آن است (به درصد). معمولاً برای سرویسهایی مانند وبسرور Apache که در آنها یک فرایند اصلی (master) فرایندهای فرزند را بهعنوان کارگر (worker) منشعب میکند، از TOTAL CPU استفاده خواهید کرد. مثال:
if total cpu > 50% for 10 cycles then restart
THREADS تعداد ریسههای فرایند است. مثال:
if threads > 3 then alert
CHILDREN تعداد فرایندهای فرزند فرایند است. مثال:
if children > 10 then alert
MEMORY میزان مصرف حافظه توسط خود فرایند است، [%] یا مقدار مطلق [B, kB, MB, GB].
- Linux:
Monit گزارش PSS
(اندازه
مجموعه
متناسب - Proportional Set Size)
را به RSS
(اندازه
مجموعه
مقیم - Resident Set
Size) ترجیح
میدهد. PSS با
تقسیم
عادلانهٔ
حافظهٔ
مشترک میان
فرایندها،
معیار
دقیقتری
فراهم
میکند. RSS
میتواند
گمراهکننده
باشد زیرا
با اضافه
کردن کل
میزان
حافظه به
تکتک
فرایندهایی
که از آن
استفاده
میکنند،
حافظهٔ
مشترک را
بیش از حد
شمارش
میکند. PSS
دیدگاه
واقعبینانهتری
از سهم یک
فرایند به
تنهایی و
ردپای
حافظهٔ کلی
سیستم
ارائه
میدهد.
- MacOS:
گزارش مصرف
حافظهٔ
فرایند با
ActivityMonitor همخوانی
دارد و
ردپای
حافظهٔ
فیزیکی
فرایند را
بهجای RSS
نشان
میدهد. این
گزارش
حافظهٔ
مشترک را که
توسط چندین
فرایند
استفاده
میشود حذف
میکند (تا
از شمارش
دوگانه
جلوگیری
شود).
مثال:
if memory usage > 8 MB then alert
TOTAL MEMORY میزان مصرف حافظه توسط فرایند و فرایندهای فرزند آن است، به صورت درصد یا به صورت یک مقدار [B, kB, MB, GB]. مثال:
if total memory usage > 1% for 10 cycles then alert
آزمون فعالیت ورودی/خروجی فرآیند (PROCESS I/O ACTIVITY TEST)
Monit میتواند فعالیت خواندن و نوشتن فرایند روی فایلسیستم را بیازماید. این آزمون تنها میتواند در بستر نوع سرویس فرایند (process) استفاده شود. Monit برای دسترسی به این معیارها معمولاً باید بهعنوان کاربر ریشه (root) اجرا شود.
سیستمعامل (OS) معمولاً از معیارهای I/O به ازای هر فرایند بر حسب بایت یا بر حسب عملیات پشتیبانی میکند.
برخی پلتفرمها اجازه میدهند زیرمجموعهٔ I/O نیازمند دسترسی به ذخیرهساز فیزیکی را از I/O عمومی که توسط حافظهٔ پنهان (cache) پاسخ داده شده است تفکیک کرد. توجه داشته باشید از آنجا که I/O فیزیکی معمولاً با صفحهٔ فایلسیستم تراز میشود، ممکن است تفاوتی میان I/O کل و فیزیکی وجود داشته باشد، حتی اگر فرایند فقط سعی کرده باشد ۱ بایت بخواند.
آمار فعالیت I/O به ازای هر فرایند بر پایهٔ پلتفرم:
----------------------------------------------------------------- | Platform | Operation | Byte (physical) | Byte (generic) | ----------------------------------------------------------------- | AIX | X | | | | DragonFlyBSD | X | | | | FreeBSD | X | | | | Linux | X | X | X | | MacOS | | X | | | NetBSD | X | | | | OpenBSD | X | | | | Solaris | X | | | -----------------------------------------------------------------
خواندن: بایت بر ثانیه (عمومی)
ساختار:
IF READ [ACTIVITY] <operator> <number> <unit>/S THEN action
operator انتخابی است از "<"، ">"، "!="، "==" در نشانهگذاری c، و "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh، و "greater"، "less"، "equal"، "notequal" در قالبی خوانا برای انسان (در صورت عدم تعیین، پیشفرض EQUAL است).
unit انتخابی است از "B"، "KB"، "MB"، "GB" یا معادلهای بلندتر "byte"، "kilobyte"، "megabyte"، "gigabyte"، "percent".
action انتخابی است از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check process p...
if read activity > 1 MB/s then alert
خواندن: بایت بر ثانیه (ذخیرهساز فیزیکی)
ساختار:
IF DISK READ [ACTIVITY] <operator> <number> <unit>/S THEN action
operator انتخابی است از "<"، ">"، "!="، "==" در نشانهگذاری c، و "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh، و "greater"، "less"، "equal"، "notequal" در قالبی خوانا برای انسان (در صورت عدم تعیین، پیشفرض EQUAL است).
unit انتخابی است از "B"، "KB"، "MB"، "GB" یا معادلهای بلندتر "byte"، "kilobyte"، "megabyte"، "gigabyte"، "percent".
action انتخابی است از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check process p...
if disk read activity > 1 MB/s then alert
خواندن: عملیات بر ثانیه
ساختار:
IF DISK READ [ACTIVITY] <operator> <number> operations/S THEN action
operator انتخابی است از "<"، ">"، "!="، "==" در نشانهگذاری c، و "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh، و "greater"، "less"، "equal"، "notequal" در قالبی خوانا برای انسان (در صورت عدم تعیین، پیشفرض EQUAL است).
action انتخابی است از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check process p...
if disk read activity > 500 operations/s then alert
نوشتن: بایت بر ثانیه (عمومی)
ساختار:
IF WRITE [ACTIVITY] <operator> <number> <unit>/S THEN action
operator انتخابی است از "<"، ">"، "!="، "==" در نشانهگذاری c، و "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh، و "greater"، "less"، "equal"، "notequal" در قالبی خوانا برای انسان (در صورت عدم تعیین، پیشفرض EQUAL است).
unit انتخابی است از "B"، "KB"، "MB"، "GB" یا معادلهای بلندتر "byte"، "kilobyte"، "megabyte"، "gigabyte"، "percent".
action انتخابی است از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check process p...
if write activity > 1 MB/s then alert
نوشتن: بایت بر ثانیه (ذخیرهسازی فیزیکی)
نحو:
IF DISK WRITE [ACTIVITY] <operator> <number> <unit>/S THEN action
operator انتخابی از "<"، ">"، "!="، "==" در نشانهگذاری زبان c، "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh و "greater"، "less"، "equal"، "notequal" در قالب انسانخوان است (در صورت عدم تعیین، پیشفرض EQUAL است).
unit انتخابی از "B"، "KB"، "MB"، "GB" یا جایگزینهای کاملتر "byte"، "kilobyte"، "megabyte"، "gigabyte" و "percent" است.
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال:
check process p...
if disk write activity > 1 MB/s then alert
نوشتن: عملیات بر ثانیه
نحو:
IF DISK WRITE [ACTIVITY] <operator> <number> operations/S THEN action
operator انتخابی از "<"، ">"، "!="، "==" در نشانهگذاری زبان c، "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh و "greater"، "less"، "equal"، "notequal" در قالب انسانخوان است (در صورت عدم تعیین، پیشفرض EQUAL است).
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال:
check process p...
if disk write activity > 500 operations/s then alert
آزمون چکسام فایل (FILE CHECKSUM TEST)
دستور چکسام فقط میتواند در ورودی سرویس فایل استفاده شود و برای بررسی چکسام MD5، SHA1 یا SHA256 فایل به کار میرود.
بررسی چکسام مشخص:
IF FAILED [MD5|SHA1|SHA256] CHECKSUM [EXPECT checksum] THEN action
بررسی هرگونه تغییر در فایل:
IF CHANGED [MD5|SHA1|SHA256] CHECKSUM THEN action
انتخاب MD5، SHA1 یا SHA256 اختیاری است. MD5 دارای یک چکسام ۱۲۸ بیتی (رشتهٔ ۳۲ بایتی در مبنای شانزده)، SHA1 دارای یک چکسام ۱۶۰ بیتی (رشتهٔ ۴۰ بایتی در مبنای شانزده) و SHA256 دارای یک چکسام ۲۵۶ بیتی (رشتهٔ ۶۴ بایتی در مبنای شانزده) است. اگر این گزینه نادیده گرفته شود، Monit تلاش خواهد کرد روش را از روی رشتهٔ EXPECT حدس بزند یا از MD5 به عنوان چکسام پیشفرض استفاده کند. SHA256 برای امنیت رمزنگاری بهتر توصیه میشود.
عبارت "expect" اختیاری است و در صورت استفاده، رشتهٔ md5، sha1 یا sha256 را مشخص میکند که Monit باید هنگام آزمودن چکسام فایل انتظار داشته باشد. در این صورت Monit چکسام اولیهای برای فایل محاسبه نمیکند، بلکه از رشتهای که تعیین کردهاید استفاده میکند. برای مثال:
if failed checksum expect 8f7f419955cefa0b33a2ba316cba3659 then alert
برای نمونه میتوانید از ابزار GNU شامل md5sum(1)، sha1sum(1) یا sha256sum(1) برای ساخت یک رشتهٔ چکسام برای فایل استفاده کرده و این رشته را در عبارت expect به کار ببرید.
بارگذاری مجدد یک سرور در صورت تغییر فایل پیکربندی آن:
check file apache_conf with path /etc/apache/httpd.conf
if changed checksum then exec "/usr/bin/apachectl graceful"
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
آزمون برچسب زمانی (TIMESTAMP TEST)
دستور برچسب زمانی تنها میتواند در ورودیهای سرویس فایل، fifo یا دایرکتوری استفاده شود.
نحو برچسب زمانی نسبی:
IF <ACCESS TIME | ATIME | MODIFICATION TIME | MTIME | CHANGE TIME | CTIME | TIME[STAMP]> <operator> <value> [unit] THEN <action>
نحو تغییر برچسب زمانی:
IF CHANGED <ACCESS TIME | ATIME | MODIFICATION TIME | MTIME | CHANGE TIME | CTIME | TIME[STAMP]> THEN action
چهار نوع آزمون برچسب زمانی وجود دارد:
- ACCESS (ATIME)
- برچسب زمانی را میآزماید که هر زمان به شیء دسترسی پیدا شود (برای مثال فایل خوانده شود) بهروزرسانی میگردد. فایلسیستم معمولاً اجازه میدهد با استفاده از گزینههای mount، بهروزرسانیهای atime غیرفعال شود؛ بنابراین این آزمون تنها در صورتی کار خواهد کرد که فایلسیستم بهروزرسانیهای atime را انجام دهد.
- CHANGE (CTIME)
- برچسب زمانی را میآزماید که هر زمان متادیتای شیء نظیر مالک، گروه، دسترسیها یا تعداد پیوندهای سخت تغییر کند، بهروزرسانی میشود.
- MODIFICATION (MTIME)
- برچسب زمانی را میآزماید که هر زمان محتوای شیء تغییر کند، بهروزرسانی میشود. برچسب زمانی تغییر محتوای فایل هر بار که فایل کوتاه (truncate) شود یا روی آن نوشته شود، بهروز میگردد. برچسب زمانی تغییر محتوای دایرکتوری هرگاه فایلها یا زیردایرکتوریهایی به دایرکتوری اضافه شده یا از آن حذف شوند، بهروزرسانی میشود.
- DEFAULT (LATEST OF CHANGE AND MODIFICATION TIMES)
- اگر هیچ نوع برچسب زمانی مشخصی تعیین نشده باشد، تازهترین زمان از میان زمانهای تغییر متادیتا و اصلاح محتوا بررسی میشود. این آزمون امکان بررسی سادهٔ هرگونه تغییر شیء (دادهها و متادیتا) را فراهم میکند.
operator انتخابی از "<"، ">"، "!="، "==" در نشانهگذاری C، "GT"، "LT"، "EQ"، "NE" در نشانهگذاری پوستهٔ sh و "NEWER"، "OLDER"، "GREATER"، "LESS"، "EQUAL"، "NOTEQUAL" در قالب انسانخوان است (در صورت عدم تعیین، مقدار پیشفرض EQUAL است).
value یک معیار زمانی (watermark) است.
unit یکی از موارد "SECOND(S)"، "MINUTE(S)"، "HOUR(S)" یا "DAY(S)" است.
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
برای مثال، جهت بارگذاری مجدد apache در صورت تغییر فایل پیکربندی:
check file apache_conf with path /etc/apache/httpd.conf if changed timestamp then exec "/usr/bin/apachectl graceful"
برای مثال، جهت آزمودن دایرکتوری برای افزودن یا حذف فایل:
check directory bar path /foo/bar if changed timestamp then alert
مثال برای ارسال هشدار در صورتی که فایل گزارش بیش از ۱ ساعت بهروزرسانی نشده باشد:
if timestamp is older than 1 hour then alert عبارت size تنها میتواند در یک مدخل سرویس check file استفاده شود. در صورت تعیین در فایل کنترلی، Monit اندازه فایل را محاسبه خواهد کرد.
بررسی اندازه مشخص یا یک محدوده:
IF SIZE [[operator] value [unit]] THEN action
بررسی تغییرات اندازه:
IF CHANGED SIZE THEN action
operator انتخابی از "<"، ">"، "!="، "==" در نشانهگذاری C، "GT"، "LT"، "EQ"، "NE" در نشانهگذاری پوسته sh، و "GREATER"، "LESS"، "EQUAL"، "NOTEQUAL" در قالب خوانا برای انسان است (در صورت عدم تعیین، پیشفرض EQUAL است).
value حد آستانه (watermark) اندازه است.
unit انتخابی از "B"، "KB"، "MB"، "GB" یا معادلهای کاملتر "byte"، "kilobyte"، "megabyte"، "gigabyte" است. در صورت عدم تعیین، واحد پیشفرض "byte" در نظر گرفته میشود.
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
برای مثال، جهت ارسال هشدار در صورت بزرگتر شدن بیش از حد فایل:
check file mydb with path /data/mydatabase.db
if size > 1 GB then alert
آزمون محتوای فایل (FILE CONTENT TEST)
عبارت content میتواند برای بررسی افزایشی محتوای یک فایل متنی با استفاده از عبارات باقاعده (regular expressions) استفاده شود.
نحو (Syntax):
IF CONTENT <operator> <regex|path> THEN action
operator برابر با "=" برای تطابق و یا "!=" برای عدم تطابق است.
regex رشتهای حاوی عبارت باقاعده تعمیمیافته است. همچنین ببینید: regex(7).
path یک مسیر مطلق به فایلی است که در هر خط آن یک عبارت باقاعده تعمیمیافته قرار دارد. همچنین ببینید: regex(7).
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
در زمان راهاندازی، موقعیت خواندن بر روی انتهای فایل تنظیم میشود و Monit در هر چرخه، بررسی را تا انتهای فایل ادامه میدهد.
اگر اندازه فایل کاهش یابد یا inode تغییر کند، موقعیت خواندن بر روی ابتدای فایل تنظیم میشود.
تنها خطوطی که به نویسه خطجدید (newline) ختم میشوند بررسی میگردند.
بهطور پیشفرض تنها ۵۱۱ نویسه اول هر خط بررسی میشوند. میتوانید این محدودیت را با استفاده از عبارت set limits افزایش دهید.
IGNORE CONTENT <operator> <regex|path>
خطوطی که با یک IGNORE تطابق دارند در ارزیابیهای بعدی بررسی نمیشوند. IGNORE CONTENT همواره نسبت به IF CONTENT تقدم دارد.
تمام عبارتهای IGNORE CONTENT ابتدا و به ترتیب ظهورشان ارزیابی میشوند. پس از آن، تمام عبارتهای IF CONTENT ارزیابی خواهند شد.
برای مثال:
check file syslog with path /var/log/syslog
ignore content = "monit"
if content = "^mrcoffee" then alert
آزمون پرچمهای سوار کردن سیستمفایل (FILESYSTEM MOUNT FLAGS TEST)
برنامه Monit میتواند پرچمهای سوار کردن (mount flags) سیستمفایل را برای تغییرات ارزیابی کند. این آزمون ضمنی است و Monit بهطور پیشفرض در صورت وقوع شکست، هشدار ارسال میکند.
این آزمون برای تشخیص تغییرات پرچمهای سیستمفایل، مانند فقطخواندنی شدن سیستمفایل (در اثر خطای دیسک) یا تغییر پرچمهای سوار کردن (مانند nosuid) مفید است.
نحو عبارت fsflags به صورت زیر است:
IF CHANGED FSFLAGS THEN action
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال:
check filesystem rootfs with path /
if changed fsflags then exec "/my/script"
آزمون مصرف فضا (SPACE USAGE TEST)
برنامه Monit میتواند یک سیستمفایل یا یک دیسک را از نظر میزان مصرف فضا ارزیابی کند. این آزمون تنها میتواند در بستر نوع سرویس filesystem استفاده شود.
سیستمهای فایل معمولاً مقداری فضای رزرو شده برای کاربر ریشه (root) دارند (حدود ۱-۵٪)، بنابراین کاربران غیر مدیر سیستم نمیتوانند روی یک سیستمفایل تقریباً پر بنویسند. اگر برای سیستمفایلی که توسط کاربران غیر ریشه استفاده میشود محدودیتی تعیین میکنید، ممکن است بخواهید هنگام تنظیم محدودیت این بلوکهای رزرو شده را مد نظر قرار دهید. میتوانید با استفاده از دستور وضعیت در CLI یا واسط HTTP برای سیستمفایل مربوطه، درصد بلوکهای رزرو شده را از طریق خود Monit مشاهده کنید.
نحو (Syntax):
IF SPACE operator value unit THEN action
یا:
IF SPACE FREE operator value unit THEN action
operator انتخابی از "<"، ">"، "!="، "==" در نشانهگذاری c، "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوسته sh، و "greater"، "less"، "equal"، "notequal" در قالب خوانا برای انسان است (در صورت عدم تعیین، پیشفرض EQUAL است).
unit انتخابی از "B"، "KB"، "MB"، "GB"، "%" یا معادلهای کاملتر "byte"، "kilobyte"، "megabyte"، "gigabyte"، "percent" است.
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال:
check filesystem rootfs with path /
if space usage > 90% then alert
برنامهٔ Monit میتواند میزان مصرف inode در سیستمفایل را بیازماید. این آزمون تنها میتواند در بافت (context) یک نوع سرویس filesystem استفاده شود.
قالب دستوری:
IF INODE(S) operator value [unit] THEN action
یا:
IF INODE(S) FREE operator value [unit] THEN action
operator انتخابی است از میان "<"، ">"، "!="، "==" در نشانهگذاری زبان c؛ مقادیر "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh؛ و "greater"، "less"، "equal"، "notequal" به صورت انسانخوان (در صورت عدم تعیین، مقدار پیشفرض EQUAL است).
unit اختیاری است. اگر مشخص نشود، مقدار بهصورت تعداد مطلق inodeها در نظر گرفته میشود. میتوانید از نویسهٔ "%" یا معادل طولانیتر "percent" بهعنوان واحد استفاده کنید.
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check filesystem rootfs with path /
if inode usage > 90% then alert
آزمون ورودی/خروجی دیسک (DISK I/O TEST)
برنامهٔ Monit میتواند فعالیت خواندن و نوشتن سیستمفایل را بسنجد. این آزمون تنها در بافت یک نوع سرویس filesystem قابل استفاده است.
معیارهای I/O در دسترس به پلتفرم و سیستمفایل بستگی دارد. برخی پلتفرمها اجازه میدهند فعالیتهای I/O برای یک پارتیشن خاص سنجیده شود، در حالی که برخی دیگر تنها برای کل دیسک این کار را انجام میدهند. برخی امکان دریافت معیارها برای سیستمفایلهای شبکهای را فراهم میکنند و برخی دیگر تنها برای دستگاههای بلوکی (block devices).
میزان تفکیکپذیری معیارهای I/O در پلتفرمهای مختلف و پشتیبانی سیستمفایل در Monit:
--------------------------------------------------------------------------------------- | Platform | Granularity | Supported filesystems | TBD | --------------------------------------------------------------------------------------- | AIX | per-disk | Disk io monitoring currently not supported | JFSx | | DragonFlyBSD | per-disk | UFS | HAMMER | | FreeBSD | per-disk | UFS, ZFS | | | Linux | per-filesystem | EXTx, XFS, BTRFS, ZFS, NFS, CIFS | | | MacOS | per-disk | HFS | | | NetBSD | per-disk | FFS | NFS | | OpenBSD | per-disk | FFS | | | Solaris | per-filesystem | ZFS, UFS, NFS | | ---------------------------------------------------------------------------------------
خواندن: بایت بر ثانیه (Read: bytes per second)
قالب دستوری:
IF READ [RATE] <operator> <number> <unit>/S THEN action
operator انتخابی است از میان "<"، ">"، "!="، "==" در نشانهگذاری زبان c؛ مقادیر "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh؛ و "greater"، "less"، "equal"، "notequal" به صورت انسانخوان (در صورت عدم تعیین، مقدار پیشفرض EQUAL است).
unit انتخابی است از بین "B"، "KB"، "MB"، "GB" یا معادلهای طولانیتر "byte"، "kilobyte"، "megabyte"، "gigabyte" و "percent".
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check filesystem disk1...
if read rate > 1 MB/s then alert
خواندن: عملیات بر ثانیه (Read: operations per second)
قالب دستوری:
IF READ [RATE] <operator> <number> operations/S THEN action
operator انتخابی است از میان "<"، ">"، "!="، "==" در نشانهگذاری زبان c؛ مقادیر "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh؛ و "greater"، "less"، "equal"، "notequal" به صورت انسانخوان (در صورت عدم تعیین، مقدار پیشفرض EQUAL است).
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check filesystem disk1...
if read rate > 500 operations/s then alert
نوشتن: بایت بر ثانیه (Write: bytes per second)
قالب دستوری:
IF WRITE [RATE] <operator> <number> <unit>/S THEN action
operator انتخابی است از میان "<"، ">"، "!="، "==" در نشانهگذاری زبان c؛ مقادیر "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh؛ و "greater"، "less"، "equal"، "notequal" به صورت انسانخوان (در صورت عدم تعیین، مقدار پیشفرض EQUAL است).
unit انتخابی است از بین "B"، "KB"، "MB"، "GB" یا معادلهای طولانیتر "byte"، "kilobyte"، "megabyte"، "gigabyte" و "percent".
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check filesystem disk1...
if write rate > 1 MB/s then alert
نوشتن: عملیات بر ثانیه (Write: operations per second)
قالب دستوری:
IF WRITE [RATE] <operator> <number> operations/S THEN action
operator انتخابی است از میان "<"، ">"، "!="، "==" در نشانهگذاری زبان c؛ مقادیر "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh؛ و "greater"، "less"، "equal"، "notequal" به صورت انسانخوان (در صورت عدم تعیین، مقدار پیشفرض EQUAL است).
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check filesystem disk1...
if write rate > 500 operations/s then alert
زمان پاسخدهی برای هر عملیات (Service time per operation)
زمان سرویسدهی (Service Time) مدتزمانی است که برای تکمیل یک عملیات خواندن یا نوشتن صرف میشود. این یک معیار بسیار مهم است. اگر این زمان افزایش یابد، به این معنی است که دیسک قادر نیست با سرعت کافی به عملیاتها رسیدگی کند. نمودارهای روند رشد در M/Monit در دسترس هستند.
قالب دستوری:
IF SERVICE TIME <operator> <number> <unit> THEN action
operator انتخابی است از میان "<"، ">"، "!="، "==" در نشانهگذاری زبان c؛ مقادیر "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh؛ و "greater"، "less"، "equal"، "notequal" به صورت انسانخوان (در صورت عدم تعیین، مقدار پیشفرض EQUAL است).
unit برابر با "MS" (میلیثانیه) یا "S" (ثانیه) است.
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
if service time > 10 milliseconds
for 3 times within 5 cycles
then alert
برنامهٔ Monit میتواند سطح دسترسی اشیاء فایلی را بررسی کند. این آزمون
تنها در زمینهٔ انواع سرویسهای file، fifo، directory یا filesystem قابل
استفاده است.
نحو برای آزمودن یک سطح دسترسی مشخص:
IF FAILED PERM(ISSION) octalnumber THEN action
نحو برای آزمودن هرگونه تغییر در سطح دسترسی:
IF CHANGED PERM(ISSION) THEN action
octalnumber سطح دسترسی یک فایل، دایرکتوری یا سیستمفایل را بهصورت چهار رقم در مبنای هشت (0-7) مشخص میکند. محدودهٔ معتبر 0000 - 7777 است (میتوانید صفرهای ابتدایی را حذف کنید، Monit صفرها را از سمت چپ اضافه خواهد کرد. برای نمونه، "640" مقداری معتبر بوده و با "0640" مطابقت دارد).
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check file shadow with path /etc/shadow
if failed permission 0640 then alert
آزمون شناسه کاربر (UID TEST)
برنامهٔ Monit میتواند شناسهٔ کاربری (uid) مالک یک file، fifo، directory یا کاربر مالک و مؤثر یک فرآیند را پایش کند.
نحو:
IF FAILED [E]UID <value> THEN action
value شناسهٔ کاربر را بهصورت عددی یا رشتهای تعیین میکند.
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check file shadow with path /etc/shadow
if failed uid "root" then alert
آزمون شناسه گروه (GID TEST)
برنامهٔ Monit میتواند شناسهٔ گروهِ (gid) مالک یک file، fifo، directory یا فرآیند را پایش کند.
نحو:
IF FAILED GID <value> THEN action
value شناسهٔ گروه را بهصورت عددی یا رشتهای تعیین میکند.
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثال:
check file shadow with path /etc/shadow
if failed gid "shadow" then alert
آزمون پیوند سخت (HARDLINK TEST)
دستور hardlink میتواند در مدخل سرویسهای check file، fifo یا directory استفاده شود. در صورت تعیین در فایل کنترلی، Monit تعداد پیوندهای سخت را برای یک file، fifo یا directory محاسبه خواهد کرد.
آزمودن یک مقدار مشخص:
IF HARDLINK [[operator] value] THEN action
آزمودن تغییرات پیوند سخت:
IF CHANGED HARDLINK THEN action
operator انتخابی است از میان "<"، ">"، "!="، "==" در نشانهگذاری زبان C، "GT"، "LT"، "EQ"، "NE" در نشانهگذاری شل sh، و "GREATER"، "LESS"، "EQUAL"، "NOTEQUAL" بهشکل خوانا برای انسان (در صورت عدم تعیین، مقدار پیشفرض EQUAL است).
value مقدار آستانه (watermark) است.
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
برای نمونه، جهت ارسال هشدار در صورتی که تعداد پیوندهای سخت استفادهشده برای یک دایرکتوری بیش از حد زیاد باشد:
check directory upload with path /data/upload
if hardlink > 32000 then alert
آزمون شناسه فرآیند (PID TEST)
برنامهٔ Monit میتواند PID فرآیند را بررسی کند. در صورتی که PID خارج از کنترل Monit تغییر کند، هشداری ارسال خواهد شد.
نحو:
IF CHANGED PID THEN action
action انتخابی است از میان "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
این آزمون برای تشخیص راهاندازیهای مجدد احتمالی فرآیند که در بازهٔ زمانی میان دو چرخهٔ آزمون Monit رخ دادهاند، بسیار مفید است.
برای نمونه، اگر فردی پیکربندی sshd را تغییر داده و sshd را خارج از کنترل Monit مجدداً راهاندازی کند، به شما اطلاع داده خواهد شد که فرآیند با یک نمونهٔ جدید جایگزین شده است:
check process sshd with pidfile /var/run/sshd.pid
if changed pid then alert
برنامهٔ Monit میتواند تغییرات PID والد پردازه (PPID) را بررسی کند. در صورتی
که PPID خارج از کنترل Monit تغییر کند، Monit یک هشدار ارسال خواهد کرد.
نحو دستور ppid به صورت زیر است:
IF CHANGED PPID THEN action
action یکی از گزینههای "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال:
check process myproc with pidfile /var/run/myproc.pid
if changed ppid then exec "/my/script"
آزمون UPTIME
دستور uptime تنها در بافتار سرویسهای نوع پردازه و سیستم قابل استفاده است.
نحو:
IF UPTIME [[operator] value [unit]] THEN action
operator یکی از موارد "<"، ">"، "!="، "==" در نشانهگذاری C، "GT"، "LT"، "EQ"، "NE" در نشانهگذاری پوستهٔ sh، و "GREATER"، "LESS"، "EQUAL"، "NOTEQUAL" در فرم خوانا برای انسان است (اگر مشخص نشود، پیشفرض EQUAL است).
value آستانهٔ uptime است.
unit یکی از موارد "SECOND"، "MINUTE"، "HOUR" یا "DAY" است (همچنین استفاده از "SECONDS"، "MINUTES"، "HOURS" یا "DAYS" نیز امکانپذیر است).
action یکی از گزینههای "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال برای راهاندازی مجدد پردازه در هر سه روز:
check process myapp with pidfile /var/run/myapp.pid start program = "/etc/init.d/myapp start" stop program = "/etc/init.d/myapp stop" if uptime > 3 days then restart
آزمون ویژگی امنیتی (SECURITY ATTRIBUTE)
دستور ویژگی امنیتی (security attribute) تنها در بافتار پردازه قابل استفاده است.
نحو:
IF SECURITY ATTRIBUTE <operator> <regex> THEN <action>
operator یکی از موارد زیر است: "=" برای تطابق کامل رشته، "!=" برای عدم تطابق کامل رشته، "=~" برای تطابق با عبارت باقاعده، یا "!=~" برای عدم تطابق با عبارت باقاعده.
regex رشتهای حاوی متن یا عبارت باقاعدهٔ گسترشیافته است. همچنین regex(7) را ببینید.
action یکی از گزینههای "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
برای سازگاری با نسخههای پیشین، نحو زیر پشتیبانی میشود و معادل با عدم تطابق کامل رشته است:
IF FAILED SECURITY ATTRIBUTE <string> THEN <action>
string مقدار مورد انتظار ویژگی امنیتی است.
action یکی از گزینههای "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال برای SELinux:
check process ntpd matching "ntpd" if security attribute != "system_u:system_r:ntpd_t:s0" then alert
مثال برای AppArmor:
check process ntpd matching "ntpd" if security attribute != "/usr/sbin/ntpd (enforce)" then alert
آزمون توصیفگرهای فایل در سطح سیستم و هر پردازه
برنامهٔ Monit میتواند میزان استفاده از توصیفگرهای فایل را در سطح سیستم و پردازه بررسی کند. شما میتوانید یک مقدار مطلق یا درصد استفاده از بیشینهٔ مجاز فعلی را بررسی کنید. استفاده از درصد به ازای هر پردازه تنها در صورتی ممکن است که سیستم، بیشینهٔ مجاز برای هر پردازه را ارائه دهد.
نحو:
IF FILEDESCRIPTORS <operator> <number> [%] THEN action
تنها برای پردازه، میتوانید تعداد تجمیعی توصیفگرها را برای پردازه و تمام فرزندان آن نیز بررسی کنید.
نحو:
IF TOTAL FILEDESCRIPTORS <operator> <number> THEN action
operator یکی از موارد "<"، ">"، "!="، "==" در نشانهگذاری C، "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh، و "greater"، "less"، "equal"، "notequal" در فرم خوانا برای انسان است (اگر مشخص نشود، پیشفرض EQUAL است).
number حد مجاز (محدودیت).
action یکی از گزینههای "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثالها:
check system $HOST
if filedescriptors >= 90% then alert
check process myproc with pidfile /var/run/myproc.pid
if filedescriptors >= 90% then alert
if filedescriptors >= 99% then restart
if total filedescriptors > 5000 then alert
شما میتوانید وضعیت خروج (exit status) یک برنامه یا یک اسکریپت را بررسی کنید. این آزمون تنها میتواند درون یک مدخل سرویس check program در فایل کنترلی Monit استفاده شود.
نحو بررسی یک مقدار خروج خاص:
IF STATUS operator value THEN action
نحو بررسی هرگونه تغییر در مقدار خروج:
IF CHANGED STATUS THEN action
operator انتخابی از بین "<"، ">"، "!="، "==" در نشانهگذاری زبان C، گزینههای "gt"، "lt"، "eq"، "ne" در نشانهگذاری شل sh، و "greater"، "less"، "equal"، "notequal" به صورت خوانا برای انسان است (در صورت عدم تعیین، پیشفرض EQUAL است).
action انتخابی از بین "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثال:
check program myscript with path /usr/local/bin/myscript.sh
if status != 0 then alert
اسکریپت نمونه برای مثال بالا (/usr/local/bin/myscript.sh):
#!/bin/sh echo test exit $?
همچنین میتوانید پارامترهایی را به همراه برنامه ارسال کنید:
check program list-files with path "/bin/ls -lrt /tmp/"
if status != 0 then alert
آرگومانهای برنامه یا اسکریپت توالیای از رشتههای جدا شده با فاصله (whitespace) هستند. در مثال بالا رشتههای '-lrt' و '/tmp/' آرگومانهای برنامه '/bin/ls' میباشند. اگر از آرگومانها استفاده میشود، توصیه میشود برای محصور کردن رشته از علامت نقلقول " استفاده کنید، در غیر این صورت، چنانچه آرگومانی به کار نرفته باشد، نیازی به نقلقول نیست.
نکات: اگر برنامه یک اسکریپت است، درج مفسر در خط اول الزامی است. برنامه یا اسکریپت باید قابل اجرا نیز باشد.
اگر Monit با دسترسی کاربر ریشه (superuser) اجرا شود، میتوانید به صورت اختیاری برنامه را با یک کاربر و/یا گروه دیگر اجرا کنید. در این مثال ما برنامه ls را با کاربر www و گروه staff اجرا میکنیم:
check program ls with path "/bin/ls /tmp"
as uid "www"
and gid "staff"
if status != 0 then alert
Monit برنامه را به صورت دورهای اجرا خواهد کرد و اگر وضعیت خروج برنامه با نتیجه مورد انتظار مطابقت نداشته باشد، Monit میتواند اقدامی را انجام دهد. در مثال بالا، اگر مقدار خروج مقداری غیر از 0 باشد، Monit یک هشدار صادر خواهد کرد. طبق قرارداد، 0 به این معنی است که برنامه به طور عادی خارج شده است.
بررسیهای برنامه غیرهمگام (asynchronous) هستند؛ بدین معنا که Monit منتظر خروج برنامه نخواهد ماند، بلکه در عوض برنامه را در پسزمینه اجرا کرده و بلافاصله بررسی مدخل سرویس بعدی را در monitrc ادامه میدهد. در چرخه بعدی، Monit بررسی خواهد کرد که آیا برنامه خاتمه یافته است یا خیر و در این صورت، وضعیت خروج برنامه را دریافت میکند. اگر وضعیت نشاندهنده یک خطا باشد، Monit یک پیام هشدار شامل خروجی خطای برنامه (stderr)، در صورت وجود، صادر خواهد کرد. اگر برنامه پس از چرخه اول خارج نشده باشد، Monit یک چرخه دیگر منتظر میماند و به همین ترتیب ادامه میدهد. اگر برنامه پس از 5 دقیقه همچنان در حال اجرا باشد، Monit آن را خاتمه داده (kill میکند) و یک رویداد اتمام مهلت زمانی برنامه (timeout) ایجاد خواهد کرد. بازنویسی این مهلت زمانی پیشفرض امکانپذیر است (نحو زیر را ببینید).
میتوان از چندین آزمون وضعیت استفاده کرد، برای مثال:
check program hwtest with path /usr/local/bin/hwtest.sh
with timeout 500 seconds
if status = 1 then alert
if status = 3 for 5 cycles then exec "/usr/local/bin/emergency.sh"
آزمون محتوای خروجی برنامه (PROGRAM OUTPUT CONTENT TEST)
دستور content میتواند هم برای بررسی محتوای خروجی یک برنامه با استفاده از عبارتهای باقاعده (regular expressions) و هم برای بررسی تغییرات در خروجی به کار رود.
نحو:
IF CONTENT <operator> <regex> THEN action IF CONTENT [NOT] CHANGED THEN action
operator یا "=" برای تطابق و یا "!=" برای عدم تطابق است.
regex رشتهای حاوی عبارت باقاعده تعمیمیافته (extended regular expression) است. همچنین ببینید regex(7).
action انتخابی از بین "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
به صورت پیشفرض بررسی خروجی تنها به 511 نویسه محدود است. میتوانید با استفاده از دستور set limits این محدودیت را افزایش دهید.
مثالها:
check program disk0_smart with path "/usr/sbin/nvme smart-log /dev/nvme0"
if content != "critical_warning[ ]+: 0" then alert
check program ip_route with path "/usr/bin/ip route"
if content changed then alert
Monit میتواند رابطهای شبکه را برای موارد زیر بررسی کند:
- وضعیت
- ظرفیت
- اشباع
- بارگذاری و بارگیری [بایت]
- بارگذاری و بارگیری [بسته]
وضعیت پیوند (Link status)
شما میتوانید وضعیت پیوند شبکه را بررسی کنید. این آزمون تنها میتواند درون یک مدخل سرویس check network در فایل کنترلی Monit استفاده شود.
نحو:
IF LINK <DOWN|UP> THEN action
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
آزمون DOWN در صورتی که پیوند/رابط قطع باشد یا خطاهای پیوند شناسایی شوند، شکست خواهد خورد.
ترکیب "link up" و "link down" در یک "check network" یکسان پشتیبانی نمیشود.
مثالها:
check network eth0 with interface eth0
if link down then alert
check network eth5 with interface eth5
if link up then exec "/usr/bin/monit start backup"
در صورتی که یک پیوند با شکست مواجه شود، میتوانید برنامههای start و stop را اضافه کنید تا رابط بهطور خودکار راهاندازی مجدد شود که ممکن است کارساز باشد. (آنها را با دستورهای شبکه مرتبط با سیستم خود جایگزین کنید)
check network eth0 with interface eth0
start program = '/sbin/ipup eth0'
stop program = '/sbin/ipdown eth0'
if link down then restart
ظرفیت پیوند (Link capacity)
شما میتوانید ظرفیت حالت پیوند شبکه را برای تغییرات بررسی کنید. این آزمون تنها میتواند درون یک مدخل سرویس check network در فایل کنترلی Monit استفاده شود.
نحو:
IF CHANGED LINK [CAPACITY] THEN action
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
اگر حالت پیوند تغییر کرده باشد (برای مثال حداکثر سرعت کاهش یافته باشد) یا حالت دوطرفه (duplex) تغییر کرده باشد، این آزمون مطابقت خواهد داشت.
نکته: همه انواع رابطها اجازه نظارت بر ظرفیت را نمیدهند. شبهرابطها مانند دستگاه loopback یا رابطهای VMWare ویژگی speed ندارند.
مثال:
check network eth0 with interface eth0
if changed link capacity then alert
اشباع پیوند (Link saturation)
شما میتوانید میزان اشباع پیوند شبکه را بررسی کنید. سپس Monit میزان بهرهوری از پیوند را بر اساس نرخ انتقال فعلی در برابر ظرفیت پیوند محاسبه میکند. این آزمون تنها میتواند درون یک مدخل سرویس check network در فایل کنترلی Monit استفاده شود.
نحو:
IF SATURATION operator value% THEN action
operator انتخابی از "<"، ">"، "!="، "==" در نشانهگذاری زبان c، "gt"، "lt"، "eq"، "ne" در نشانهگذاری شل sh، و "greater"، "less"، "equal"، "notequal" در قالب انسانخوان است (در صورت عدم تعیین، پیشفرض EQUAL است).
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
نکته: این آزمون به در دسترس بودن ویژگی speed بستگی دارد و همه انواع رابطها این ویژگی را ندارند. توضیحات آزمون LINK SPEED را ببینید.
مثال:
check network eth0 with interface eth0
if saturation > 90% then alert
بارگذاری و بارگیری پیوند [بایت]
شما میتوانید میزان مصرف پهنای باند بارگذاری و بارگیری، سرعت انتقال فعلی و کل دادههای منتقلشده در ۲۴ ساعت گذشته یک پیوند شبکه را بررسی کنید. این آزمون تنها میتواند در مدخل سرویس check network در فایل کنترلی Monit استفاده شود.
نحو آزمون سرعت بارگذاری (بر ثانیه):
IF UPLOAD operator value unit/S THEN action
نحو آزمون سرعت بارگیری (بر ثانیه):
IF DOWNLOAD operator value unit/S THEN action
نحو آزمون کل دادههای بارگذاریشده:
IF TOTAL UPLOADED operator value unit IN LAST number time-unit THEN action
نحو آزمون کل دادههای بارگیریشده:
IF TOTAL DOWNLOADED operator value unit IN LAST number time-unit THEN action
operator انتخابی از "<"، ">"، "!="، "==" در نشانهگذاری زبان c، "gt"، "lt"، "eq"، "ne" در نشانهگذاری شل sh، و "greater"، "less"، "equal"، "notequal" در قالب انسانخوان است (در صورت عدم تعیین، پیشفرض EQUAL است).
unit انتخابی از "B"، "KB"، "MB"، "GB" یا جایگزینهای کامل "byte"، "kilobyte"، "megabyte"، "gigabyte" است.
time-unit انتخابی از "MINUTE(S)"، "HOUR(S)"، "DAY" است. نکته: Monit شمارش چرخشی کل بایتهای بارگذاری و بارگیریشده را تنها برای ۲۴ ساعت گذشته نگهداری میکند. بنابراین مقدار time-unit نمیتواند بازهای بزرگتر از یک روز را مشخص کند.
action انتخابی از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
مثالها:
check network eth0 with interface eth0
if upload > 500 kB/s then alert
if total downloaded > 1 GB in last 2 hours then alert
if total downloaded > 10 GB in last day then alert
بارگذاری و بارگیری پیوند [بسته]
شما میتوانید تعداد بستههای بارگذاری و بارگیری پیوند شبکه، نرخ انتقال فعلی و کل دادههای منتقلشده در ۲۴ ساعت گذشته را بررسی کنید. این آزمون تنها میتواند در مدخل سرویس check network در فایل کنترلی Monit استفاده شود.
نحو آزمون نرخ پهنای باند فعلی بارگذاری:
IF UPLOAD operator value PACKETS/S THEN action
نحو آزمون نرخ پهنای باند فعلی بارگیری:
IF DOWNLOAD operator value PACKETS/S THEN action
نحو آزمون کل بارگذاری:
IF TOTAL UPLOADED operator value PACKETS IN LAST number time-unit THEN action نحو آزمون مجموع دریافت (Total download):
IF TOTAL DOWNLOADED operator value PACKETS IN LAST number time-unit THEN action
operator انتخابی است از "<"، ">"، "!="، "==" در نشانهگذاری c، "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh و "greater"، "less"، "equal"، "notequal" در قالب خوانا برای انسان (در صورت عدم تعیین، پیشفرض EQUAL است).
time-unit انتخابی است از "MINUTE(S)"، "HOUR(S)"، "DAY". نکته: Monit آمار کل بارگذاری/بارگیری را تنها برای ۲۴ ساعت گذشته نگهداری میکند. بنابراین مقدار time-unit نمیتواند بیش از یک روز را شامل شود.
action انتخابی است از "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR".
مثالها:
check network eth0 with interface eth0
if upload > 1000 packets/s then alert
if total uploaded > 900000 packets in last hour then alert
آزمون پینگ شبکه (NETWORK PING TEST)
برنامهٔ Monit میتواند با ارسال بستههای دیتاگرام echo request با پروتکل ICMP به یک میزبان و منتظر ماندن برای پاسخ، یک آزمون پینگ شبکه را انجام دهد. این آزمون تنها درون عبارت check host قابل استفاده است. همچنین Monit باید با کاربر root اجرا شود تا بتواند آزمون پینگ را انجام دهد (زیرا آزمون پینگ باید از سوکتهای raw استفاده کند که معمولاً فقط کاربر ارشد اجازهٔ استفاده از آن را دارد).
نحو:
IF <FAILED|SUCCEEDED> PING[4|6] [COUNT number] [SIZE number] [RESPONSETIME operator number <MILLISECONDS|SECONDS>] [TIMEOUT number SECONDS] [ADDRESS string] THEN action
اگر یک نام میزبان DNS در دستور check host استفاده شده باشد و نام میزبان به چند آدرس (خواه IPv4 یا IPv6) تحلیل شود، Monit نخستین آدرس در دسترس را پینگ میکند و به سراغ آدرس بعدی میرود تا زمانی که یک اتصال موفق شود یا آدرس دیگری برای آزمودن باقی نماند. میتوانید Monit را با استفاده از کلیدواژهٔ PING4 یا PING6 به جای PING مجبور کنید که تنها آدرسهای IPv4 یا IPv6 را پینگ کند.
پارامتر COUNT مشخص میکند که حداکثر چند درخواست پینگ متوالی در یک چرخه به میزبان ارسال شود. مقدار پیشفرض ۳ است.
پارامتر SIZE اندازهٔ بار دادهٔ (payload) درخواست پینگ را تعیین میکند. پیشفرض ۶۴ بایت، حداقل ۸ بایت و حداکثر ۱۴۹۲ بایت است.
پارامتر RESPONSETIME حد زمان پاسخ را تعیین میکند. operator انتخابی است از "<"، ">"، "!="، "==" در نشانهگذاری c، "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh و "greater"، "less"، "equal"، "notequal" در قالب خوانا برای انسان (در صورت عدم تعیین، پیشفرض EQUAL است).
اگر هیچ پاسخی در مدت TIMEOUT ثانیه نرسد، Monit یک خطا گزارش میکند. اگر حداقل یک پاسخ دریافت شود، آزمون پینگ موفقیتآمیز تلقی میشود.
پارامتر ADDRESS آدرس IP مبدأ را تعیین میکند.
برنامهٔ Monit به طور پیشفرض تا سه بستهٔ درخواست پینگ را در یک چرخه ارسال میکند تا از هشدارهای کاذب جلوگیری شود (یعنی تا ۶۶٪ افت بسته تحمل میشود). میتوانید گزینهٔ COUNT را روی مقداری بین ۱ تا ۲۰ تنظیم کنید تا بستههای بیشتر یا کمتری ارسال شوند. اگر به موفقیت ۱۰۰٪ در پینگ نیاز دارید، تعداد را روی ۱ تنظیم کنید (یعنی فقط یک درخواست ارسال میشود و در صورت مفقود شدن بسته، یک خطا گزارش خواهد شد).
توجه داشته باشید که امروزه بسیاری از ISPها شروع به فیلتر کردن بستههای پینگ یا ICMP کردهاند، که در این حالت هیچ پاسخی از میزبان دریافت نخواهد شد.
اگر از آزمون پینگ در یک مدخل check host استفاده شود، این آزمون در ابتدا اجرا میشود و در صورت شکست آن، فرض بر این خواهد بود که اتصال به میزبان قطع است و Monit هیچیک از آزمونهای درگاه بعدی را ادامه نخواهد داد.
مثال:
check host mmonit.com with address mmonit.com
if failed ping then alert # IPv4 or IPv6
check host mmonit.com with address 62.109.39.247
if failed ping then alert # Address is IPv4 so IPv4 is preferred
یا آزمودن اینکه سیستم به طور مشخص از طریق IPv4 و IPv6 قابل دسترسی است:
check host mmonit.com with address mmonit.com
if failed ping4 then alert # IPv4 only
if failed ping6 then alert # IPv6 only
یا با تمام پارامترها؛ ارسال پنج پینگ ۱۲۸ بایتی به mmonit.com و انتظار تا ۱۰ ثانیه برای پاسخ
check host mmonit.com with address mmonit.com
if failed ping count 5 size 128 with timeout 10 seconds then alert
همچنین میتوانید میزبانی را که فرض میشود آفلاین باشد نظارت کنید:
check host offlinehost with address 192.168.100.50
if succeeded ping then alert
آزمونهای اتصال (CONNECTION TESTS)
نرمافزار Monit میتواند آزمون اتصال را از طریق درگاههای شبکه یا از طریق سوکتهای Unix انجام دهد. یک آزمون اتصال تنها میتواند در زمینهٔ نوع سرویس process یا host استفاده شود.
اگر سرویسی روی یک یا چند سوکت به گوش باشد، Monit میتواند به آن درگاه متصل شده (با استفاده از TCP یا UDP) و صحت این موضوع را که سرویس اتصال را میپذیرد و امکان نوشتن و خواندن از سوکت وجود دارد، بررسی کند. اگر اتصالی پذیرفته نشود یا مشکلی در ورودی/خروجی سوکت وجود داشته باشد، Monit یک کنش مشخصشده را به اجرا درمیآورد.
برای درگاههای TCP/UDP، نرمافزار Monit میتواند در صورت موفقیت اتصال هشدار دهد؛ برای مثال هنگامی که سرویسی مانند mysql نباید به صورت عمومی در دسترس باشد.
نحو آزمون درگاه TCP/UDP:
IF <FAILED|SUCCEEDED>
[HOST string]
<PORT number>
[ADDRESS string]
[IPV4 | IPV6]
[TYPE <TCP|UDP>]
[<SSL|TLS> [with options {...}]
[CERTIFICATE CHECKSUM [MD5|SHA1|SHA256] string]
[CERTIFICATE VALID for number DAYS]
[PROTOCOL protocol | <SEND|EXPECT> "string",...]
[RESPONSETIME operator number <MILLISECONDS|SECONDS>]
[TIMEOUT number SECONDS]
[RETRY number]
THEN action
نحو آزمون سوکت Unix:
IF <FAILED|SUCCEEDED> <UNIXSOCKET path> [TYPE <TCP|UDP>] [PROTOCOL protocol | <SEND|EXPECT> "string",...] [RESPONSETIME operator number <MILLISECONDS|SECONDS>] [TIMEOUT number SECONDS] [RETRY number] THEN action
مثالها:
if failed port 80 then alert if failed port 53 type udp protocol dns then alert if succeeded host example.org port 3306 type tcp protocol mysql then alert if failed unixsocket /var/run/sophie then alert
گزینهها:
HOST hostname. به صورت اختیاری میزبان مورد نظر برای اتصال را مشخص میکند. اگر میزبان ارائه نشده باشد و این آزمون در یک مدخل process استفاده شده باشد، localhost فرض میشود. اگر این آزمون درون یک مدخل remote host استفاده شده باشد، میزبان دوردست آن مدخل فرض خواهد شد.
PORT number. شماره درگاهی که باید به آن متصل شد
UNIXSOCKET path. مسیر یک سوکت Unix را مشخص میکند (فقط ماشین محلی).
ADDRESS string. آدرس IP مبدأ برای استفاده.
IPV4 | IPV6 . به صورت اختیاری نسخهٔ IP را مشخص میکند که Monit هنگام تلاش برای اتصال به درگاه باید استفاده کند. در صورت عدم استفاده، Monit تلاش میکند به اولین آدرس در دسترس (IPv4 یا IPv6) وصل شود. اگر چندین آدرس موجود باشد و اتصال به یکی از آدرسها شکست بخورد، Monit آدرس بعدی را امتحان میکند و این کار ادامه مییابد تا زمانی که یک اتصال موفق شود یا دیگر آدرسی برای امتحان باقی نماند.
TYPE [TCP | UDP]. به صورت اختیاری نوع سوکتی را مشخص میکند که Monit باید هنگام تلاش برای اتصال به درگاه استفاده کند. انواع مختلف سوکت عبارتند از: TCP یا UDP، که در آن TCP یک سوکت معمولی بر پایهٔ جریان داده (stream) و UDP یک سوکت دیتاگرام است. نوع پیشفرض سوکت TCP است..PP [SSL | TLS] [with options {...}]. گزینههای SSL/TLS را تنظیم کرده و گزینههای سراسری/پیشفرض SSL را بازنویسی میکند. میتوانید نسخهٔ SSL/TLS مورد استفاده، بررسی گواهیها، اعتماد به گواهیهای خودامضاشده یا تنظیم فایل پایگاهدادهٔ گواهیهای کلاینت SSL را برای احراز هویت با گواهی کلاینت تعیین کنید.
CERTIFICATE CHECKSUM [MD5|SHA1|SHA256] hash. گواهی کارساز SSL را با بررسی جمع مقابلهای (checksum) آن اعتبارسنجی میکند. میتوانید از جمع مقابلهای MD5، SHA1 یا SHA256 استفاده کنید (اگر نوع را مشخص نکنید، Monit خلاصه را بر اساس طول هش تعیین خواهد کرد). استفاده از SHA256 برای امنیت رمزنگاری بهتر توصیه میشود. میتوانید از ابزار خط فرمان openssl برای بهدست آوردن مقدار جمع مقابلهای گواهی خود استفاده کنید، که سپس میتوانید آن را در فایل کنترلی Monit بهکار ببرید:
openssl x509 -fingerprint -sha256 -in server.crt | head -1 | cut -f2 -d'='
مثال:
if failed
port 443
protocol https
and certificate checksum = "1ED948A6F4258ACAB964227EF4EB19FCC453B0F8"
then alert
CERTIFICATE VALID for number DAYS. در صورتی که گواهی در تعداد روز مشخصشده منقضی شود، یک هشدار ارسال میکند. این آزمایش برای دریافت اعلان هنگام فرارسیدن زمان تمدید گواهی SSL بسیار مفید است.
مثال:
if failed
port 443
protocol https
and certificate valid > 30 days
then alert
PROTOCOL protocol.
بهصورت
اختیاری
پروتکلی را
که Monit باید پس
از برقراری
اتصال با آن
گفتگو کند،
مشخص
میکند. در
حال حاضر Monit
این
پروتکلها
را
میشناسد:
APACHE-STATUS
DNS
DWP
FAIL2BAN
FTP
GPS
HTTP
HTTPS
IMAP
IMAPS
CLAMAV
LDAP2
LDAP3
LMTP
MEMCACHE
MONGODB
MQTT
MYSQL
MYSQLS
NNTP
NTP3
PGSQL
POP
POPS
POSTFIX-POLICY
RADIUS
RDATE
REDIS
RSYNC
SIEVE
SIP
SMTP
SMTPS
SPAMASSASSIN
SSH
TNS
WEBSOCKET
اگر پروتکل سرور مقصد در این فهرست پیدا نشد، کافی است پروتکل را مشخص نکنید تا Monit از یک آزمایش اتصال پیشفرض استفاده کند.
پارامتر RESPONSETIME محدودیت زمان پاسخ را تعیین میکند. operator انتخابی از بین "<"، ">"، "!="، "==" در نشانهگذاری زبان c؛ "gt"، "lt"، "eq"، "ne" در نشانهگذاری پوستهٔ sh؛ و "greater"، "less"، "equal"، "notequal" در قالب قابلفهم برای انسان است (اگر مشخص نشود، پیشفرض EQUAL است).
TIMEOUT number SECONDS. بهطور اختیاری مهلت زمانی (timeout) اتصال و خواندن را برای اتصال مشخص میکند. اگر Monit نتواند ظرف این زمان به سرور متصل شود، فرض میکند اتصال ناموفق بوده و کنشِ تعیینشده را اجرا میکند. مهلت زمانی اتصال پیشفرض ۵ ثانیه است.
RETRY number. بهطور اختیاری تعداد تلاشهای مجدد پیاپی در همان چرخهٔ آزمایش را در صورتی که اتصال ناموفق باشد، مشخص میکند. مقدار پیشفرض، شکست در نخستین خطا است.
action انتخابی از بین "ALERT"، "RESTART"، "START"، "STOP"، "EXEC" یا "UNMONITOR" است.
گزینههای آزمون پروتکلهای خاص
GENERIC (SEND/EXPECT)
اگر Monit از پروتکل گفتگوی سرور پشتیبانی نمیکند، میتوانید آزمون پروتکل دلخواه خود را با استفاده از رشتههای send و expect بنویسید. عبارت SEND رشتهای را به درگاه (پورت) سرور ارسال میکند و عبارت EXPECT رشتهٔ خواندهشده از سرور را با رشتهٔ دادهشده در عبارت expect مقایسه میکند.
ساختار:
[<SEND|EXPECT> "string"]+
دستور Monit رشته را همانطور که هست ارسال خواهد کرد، و اگر پروتکل برای خاتمه دادن به رشته انتظار چنین نویسههایی را داشته باشد (بیشتر پروتکلهای متنی مورد استفاده در اینترنت اینگونهاند)، باید به یاد داشته باشید که CR و LF را در رشتهٔ ارسالی به سرور بگنجانید.
دستور Monit بهطور پیشفرض تا ۲۵۵ بایت از سرور میخواند و هنگام مقایسه با رشتهٔ EXPECT از این رشته استفاده میکند. میتوانید این مقدار پیشفرض را با استفاده از عبارت set limits بازنویسی کنید.
در صورت نیاز میتوانید از نویسههای غیرقابلچاپ در رشتهٔ SEND استفاده کنید. از نماد شانزدهشانزدهی (hex)، یعنی \0xHEXHEX برای ارسال هر نویسهای در محدودهٔ \0x00-\0xFF (یعنی ۰ تا ۲۵۵ در مبنای ده) استفاده کنید. برای نمونه، جهت آزمایش یک سرور Quake 3:
send "\0xFF\0xFF\0xFF\0xFFgetstatus" expect "sv_floodProtect|sv_maxPing"
اگر سیستم شما از عبارات باقاعدهٔ POSIX پشتیبانی میکند، میتوانید در رشتهٔ EXPECT از عبارات باقاعده استفاده کنید؛ برای کسب اطلاعات بیشتر دربارهٔ انواع عبارات باقاعدهای که میتوانید در رشتهٔ expect استفاده نمایید، به regex(7) مراجعه کنید.
از آنجا که هم regex و هم مقایسهٔ رشته روی رشتههای خاتمهیافته با صفر (zero-terminated) عمل میکنند، نمیتوانید وجود '\0' را در بافر EXPECT بررسی کنید چرا که این نویسه نشانهٔ پایان بافر است. با این حال، ما '\0' را در بافر expect بهصورت "\0" گریزدهی (escape) میکنیم که میتوانید آن را بیازمایید؛ یعنی '\' به همراه مقدار اسکی 0. برای نمونه، در اینجا نحوهٔ آزمایش برای یک رشتهٔ expect که با صفر و به دنبال آن هر تعداد نویسه شروع میشود نشان داده شده است:
expect "^[\\]0.*"
در اینجا یک مثال ساده از پروتکل SMTP آمده است:
if failed port 25 and expect "^220.*" send "HELO localhost.localdomain\r\n" expect "^250.*" send "QUIT\r\n" then alert
دستور SEND/EXPECT میتواند با هر نوع سوکتی، مانند سوکتهای TCP، سوکتهای UNIX و سوکتهای UDP استفاده شود.
HTTP
ساختار:
PROTO(COL) HTTP
[USERNAME "string"]
[PASSWORD "string"]
[REQUEST "string"]
[METHOD <GET|HEAD>]
[STATUS operator number]
[CHECKSUM checksum]
[HTTP HEADERS list of headers]
[CONTENT < "=" | "!=" > STRING]
USERNAME نام کاربری اختیاری برای احراز هویت Basic است.
PASSWORD گذرواژهٔ اختیاری برای احراز هویت Basic است.
گزینهٔ REQUEST میتواند یک رشتهٔ URL تعیینکنندهٔ سندی روی سرور HTTP را مشخص کند. اگر عبارت request تعیین نشود، صفحهٔ پیشفرض "/" درخواست خواهد شد..PP برای نمونه:
if failed port 80 protocol http request "/data/show?a=b&c=d" then restart
METHOD متد درخواست HTTP را مشخص میکند. اگر مشخص نشود، Monit متد درخواست HTTP GET را ترجیح میدهد که نسبت به متد HEAD رایجتر است. برای صرفهجویی در پهنایباند شبکه، میتوان متد را صراحتاً روی HEAD تنظیم کرد.
گزینهٔ STATUS میتواند برای بررسی صریح کد وضعیت HTTP بازگردانده شده توسط سرور HTTP به کار رود. در صورت عدم استفاده، اگر کد وضعیت بازگردانده شده بزرگتر یا مساوی ۴۰۰ باشد، آزمون پروتکل HTTP با شکست مواجه خواهد شد. میتوانید این رفتار را با استفاده از توصیفکنندهٔ status بازنویسی کنید.
برای نمونه، جهت بررسی این که صفحهای وجود ندارد (سرور HTTP در این حالت باید 404 بازگرداند):
if failed port 80 protocol http request "/non/existent.php" status = 404 then alert
CHECKSUM شما میتوانید چکسام اسناد بازگردانده شده توسط سرور HTTP را بررسی کنید. درهمسازهای MD5, SHA1, یا SHA256 میتوانند استفاده شوند. برای امنیت رمزنگاری بهتر، SHA256 توصیه میشود. اگر سرور هدر HTTP Content-Length را تنظیم نکند، Monit چکسام سند را بررسی نخواهد کرد. یک سرور HTTP هنگام ارائهٔ یک سند ایستا (مانند یک فایل) باید این هدر را تنظیم کند. هیچ محدودیتی در اندازهٔ سند وجود ندارد، اما به خاطر داشته باشید که Monit برای دانلود سند از بستر شبکه جهت محاسبهٔ چکسام، زمان صرف خواهد کرد.
مثال:
if failed port 80 protocol http request "/page.html" checksum 8f7f419955cefa0b33a2ba316cba3659 then alert
HTTP HEADERS میتواند برای ارسال فهرستی از هدرهای HTTP هنگام استفاده از آزمون پروتکل HTTP به کار رود؛ برای نمونه، هدر host. اگر هدر host تنظیم نشده باشد، Monit از hostname یا IP-address میزبان به همان صورتی که در گزارهٔ check host مشخص شده استفاده خواهد کرد. تعیین یک هدر host در صورتی مفید است که بخواهید به یک میزبان مجازی مبتنی بر نام (name-based virtual host) متصل شده و آن را بیازمایید. نحو تنظیم هدرهای HTTP به این صورت است:
http headers [name:value, name:value,..]
که در آن هر جفت name:value با «,» جدا میشود. اگر نیاز دارید از «:» در رشتهٔ مقدار استفاده کنید، برای نمونه جهت تنظیم شماره درگاه در یک هدر host، باید مقدار را داخل نقلقول قرار دهید. برای مثال،
http headers [Host: "mmonit.com:443"]
در زمینهٔ check host، استفاده از این گزاره ممکن است به این شکل باشد:
check host mmonit.com with address mmonit.com
if failed
port 80 protocol http
with http headers [Host: mmonit.com, Cache-Control: no-cache,
Cookie: csrftoken=nj1bI3CnMCaiNv4beqo8ZaCfAQQvpgLH]
and request /monit/ with content = "Monit [0-9.]+"
then alert
تنظیم هدرهای HTTP با آزمون پروتکل HTTP مرتبط است و همانطور که در مثال بالا نشان داده شده باید پیش از request قرار گیرد.
گزینهٔ CONTENT الگویی را مشخص میکند که انتظار میرود در دادههای بازگردانده شده توسط سرور وجود داشته باشد. اگر الگو تطابق نداشته باشد، آزمون با شکست مواجه میشود. در مثال بالا، اگر سرور صفحهای شامل نام Monit که به دنبال آن یک شماره نسخه آمده باشد بازنگرداند، آزمون شکست خواهد خورد.
بهطور پیشفرض، حداکثر ۱ مگابایت از محتوا بررسی میشود. میتوانید این حد را با استفاده از گزارهٔ set limits افزایش دهید.
برای نمونه:
if failed port 80 protocol http content = "foobar [0-9.]+" then alert
APACHE-STATUS
آزمون APACHE-STATUS امکان بررسی کارایی سرور را از طریق وارسی صفحهٔ وضعیت تولیدشده توسط mod_status آپاچی، که انتظار میرود در نشانی پیشفرض http://www.example.com/server-status باشد، فراهم میکند.
نحو:
PROTOCOL APACHE-STATUS [PATH <path>] [USERNAME <string>] [PASSWORD <string>] [<property> <operator> <number>]+
PATH مسیر اختیاری به وضعیت آپاچی است (بهطور پیشفرض "/server-status")
USERNAME نام کاربری اختیاری برای احراز هویت Basic است
PASSWORD گذرواژهٔ اختیاری برای احراز هویت Basic است
property کوتهنوشتی برای وضعیت پردازهٔ فرزند (child status) است:
(1) logging (loglimit) (2) closing connections (closelimit) (3) performing DNS lookups (dnslimit) (4) in keepalive with a client (keepalivelimit) (5) replying to a client (replylimit) (6) receiving a request (requestlimit) (7) initialising (startlimit) (8) waiting for incoming connections (waitlimit) (9) gracefully closing down (gracefullimit) (10) performing cleanup procedures (cleanuplimit)
operator یکی از "<"، "=" یا ">" است.
number محدودیت عددی درصدی است.
هر کدام از این محدودیتها میتوانند با مقداری متناسب با تعداد کل پردازههای فرزند فعال آپاچی مقایسه شوند.
میتوانید تمام این آزمونها را در یک عبارت ترکیب کنید یا فقط یک محدودیت خاص را بیازمایید. در صورت ترکیب محدودیتها، باید آنها را با استفاده از کلمهٔ کلیدی OR به یکدیگر متصل کنید.
مثال:
if failed port 80 protocol apache-status
loglimit > 10% or
dnslimit > 50% or
waitlimit < 20%
then alert
MQTT
نحو:
PROTOCOL MQTT [USERNAME string PASSWORD string]
USERNAME نام کاربری MQTT
PASSWORD گذرواژهٔ MQTT
نام کاربری و گذرواژه (اطلاعات هویتی) اختیاری هستند. در صورت عدم استفاده، Monit اتصال ناشناس (anonymous) را امتحان خواهد کرد که ممکن است خطای احراز هویت ایجاد کند => استفاده از اطلاعات هویتی پیشنهاد میشود، مگر اینکه سرور شما اتصال ناشناس را مجاز کرده باشد.
مثال:
check process mosquitto with pidfile /var/run/mosquitto.pid
start program = "/sbin/start mosquitto"
stop program = "/sbin/stop mosquitto"
if failed port 1883 protocol mqtt then alert
MYSQL
نحو:
PROTOCOL MYSQL[S] [USERNAME string PASSWORD string [RSAKEY CHECKSUM [MD5|SHA1|SHA256] string]]
USERNAME نام کاربری MySQL.
PASSWORD گذرواژهٔ MySQL (نویسههای خاص میتوانند استفاده شوند، اما برای نویسههای غیرالفبایی-عددی، گذرواژه باید داخل نقلقول قرار گیرد).
RSAKEY CHECKSUM اگر از اتصال ناامن (MYSQL ساده بدون TLS) استفاده میکنید، میتوانید چکسام مورد انتظار MD5, SHA1, یا SHA256 کلید RSA سرور را برای محافظت در برابر حملات مرد میانی (man-in-the-middle) تعیین کنید. برای امنیت رمزنگاری بهتر، SHA256 پیشنهاد میشود. Monit پیش از ارسال گذرواژه به سرور، اثرانگشت (fingerprint) کلید را بررسی خواهد کرد..PP نام کاربری و گذرواژه (اطلاعات احراز هویت) اختیاری هستند و اگر تنظیم نشوند، Monit آزمایش را با استفاده از ورود ناشناس (anonymous login) انجام خواهد داد. بسته به پیکربندی MySQL شما، این میتواند باعث ثبت یک خطای احراز هویت در گزارشهای (log) مربوط به MySQL شود.
اگر اطلاعات احراز هویت تنظیم شده باشند، Monit تلاش خواهد کرد تا وارد شود. Monit به هیچ مجوزی روی پایگاه داده نیاز ندارد، بلکه فقط به یک کاربر پایگاه داده احتیاج دارد. ممکن است بخواهید یک کاربر مجزا برای استفاده Monit در هنگام آزمایش ایجاد کنید، برای نمونه:
CREATE USER 'monit'@'host_from_which_monit_performs_testing' IDENTIFIED BY 'mysecretpassword'; FLUSH PRIVILEGES;
مثال:
check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/sbin/start mysql"
stop program = "/sbin/stop mysql"
if failed
port 3306
protocol mysql username "foo" password "bar"
then alert
یا با دستورهای شروع/توقف مبتنی بر unix-socket:
check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/usr/local/mysql/support-files/mysql.server start"
stop program = "/usr/local/mysql/support-files/mysql.server stop"
if failed
unixsocket /tmp/mysql.sock
protocol mysql username "foo" password "bar"
then alert
میتوانید رمزنگاری TLS را برای آزمایش با استفاده از MYSQLS به عنوان نام پروتکل فعال کنید:
if failed port 3306 protocol mysqls username "foo" password "bar" then alert
PGSQL
نحو:
PROTOCOL PGSQL [USERNAME string] [PASSWORD string] [DATABASE string]]
USERNAME نام کاربری PostgreSQL.
PASSWORD گذرواژه PostgreSQL (نویسههای خاص میتوانند استفاده شوند، اما برای نویسههای غیر الفبایی-عددی گذرواژه باید داخل نقلقول قرار گیرد).
DATABASE پایگاه داده PostgreSQL (در صورت تنظیم نشدن، پیشفرض پایگاه دادهای است که با نام کاربری مطابقت دارد).
نام کاربری و گذرواژه (اطلاعات احراز هویت) اختیاری هستند و اگر تنظیم نشوند، Monit آزمایش را با کاربر و پایگاه داده هاردکد شده user=root و database=root انجام میدهد، که ممکن است باعث ایجاد خطا در گزارشهای PostgreSQL شود.
اگر اطلاعات احراز هویت تنظیم شده باشند، Monit سعی خواهد کرد وارد شود. ممکن است بخواهید یک کاربر مجزا برای استفاده Monit در هنگام آزمایش ایجاد کنید.
در حال حاضر Monit فقط از روشهای احراز هویت 'password' و 'md5' در PostgreSQL پشتیبانی میکند. اگر سرور روشی برای احراز هویت درخواست کند که Monit از آن پشتیبانی نمیکند (مانند 'scram-sha-256')، آنگاه Monit اتصال را خاتمه داده و آزمایش موفقیتآمیز در نظر گرفته میشود (اگرچه Monit نمیتواند احراز هویت شود، اما سرور در حال برقراری ارتباط است).
برای مجاز کردن دسترسی Monit به منظور اهداف آزمایشی، میتوان یک حساب ایجاد کرد و دسترسی را برای نمونه مانند زیر مجاز نمود:
نمونه ورودی pg_hba.conf در PostgreSQL:
# TYPE DATABASE USER ADDRESS METHOD host test monit 127.0.0.1/32 md5
نمونه پیکربندیهای Monit:
check process postgresql with pidfile /var/run/postgresql/12-main.pid
start program = "/bin/systemctl postgresql start"
stop program = "/bin/systemctl postgresql stop"
if failed
port 5432
protocol pgsql username "monit" password "123456" database "test"
then alert
RADIUS
نحو:
PROTOCOL RADIUS [SECRET string]
SECRET میتوانید یک عبارت محرمانه (secret) جایگزین مشخص کنید، پیشفرض "testing123" است.
برای مثال:
check process radiusd with pidfile /var/run/radiusd.pid
start program = "/etc/init.d/freeradius start"
stop program = "/etc/init.d/freeradius stop"
if failed
host 127.0.0.1 port 1812 type udp protocol radius
secret pingpong
then alert
SIP
پروتکل SIP توسط سرورهای پلتفرم ارتباطی نظیر Asterisk و FreeSWITCH استفاده میشود.
نحو:
PROTOCOL SIP [TARGET valid@uri] [MAXFORWARD n]
TARGET با افزودن یک sip uri معتبر پس از این کلیدواژه، میتوانید یک گیرنده جایگزین برای پیام مشخص کنید.
MAXFORWARD محدود کردن تعداد پروکسیها یا درگاههایی (gateways) که میتوانند درخواست را به سرور بعدی فوروارد کنند. مقدار آن عددی صحیح در محدوده 0-255 است که به طور پیشفرض روی 70 تنظیم شده است. اگر max-forward = 0 باشد، سرور بعدی ممکن است با 200 OK پاسخ دهد (آزمایش موفقیتآمیز بود) یا پیام 483 Too Many Hops ارسال کند (آزمایش شکست خورد).
برای مثال:
check host openser_all with address 127.0.0.1
if failed
port 5060 type udp protocol sip
with target "localhost:5060" and maxforward 6
then alert
SMTP
نحو:
PROTOCOL SMTP[S] [USERNAME string PASSWORD string]
USERNAME نام کاربری SMTP.
PASSWORD گذرواژه SMTP (نویسههای خاص قابل استفاده هستند، اما برای نویسههای غیر الفبایی-عددی گذرواژه باید داخل نقلقول قرار گیرد).
اطلاعات احراز هویت اختیاری هستند و هنگام استفاده، احراز هویت در طول آزمایش انجام میشود تا بتوانید کارکرد صحیح احراز هویت را نیز بسنجید. اگر قرار است از احراز هویت استفاده شود، توصیه میکنیم برای رمزنگاری ارتباط از smtps استفاده کنید. اگر هیچ اطلاعات احراز هویتی تنظیم نشده باشد، Monit صرفاً یک آزمایش پایه پروتکل را انجام خواهد داد.
مثال:
check process postfix with pidfile /var/spool/postfix/pid/master.pid
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed
port 25
protocol smtp
then alert
مثال با استفاده از احراز هویت و STARTTLS/SMTPS:
check process postfix with pidfile /var/spool/postfix/pid/master.pid
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed
port 25
protocol smtps
username "foo"
password "bar"
then alert
WEBSOCKET
نحو:.PP
PROTOCOL WEBSOCKET
[REQUEST string]
[HOST string]
[ORIGIN string]
[VERSION number]
HOST میتوانید یک سرآیند Host جایگزین مشخص کنید
REQUEST میتوانید یک درخواست جایگزین مشخص کنید؛ مقدار پیشفرض "/" است
ORIGIN میتوانید یک مبدأ جایگزین مشخص کنید؛ مقدار پیشفرض "https://mmonit.com" است
VERSION میتوانید یک نسخهٔ جایگزین مشخص کنید؛ مقدار پیشفرض "0" است
برای مثال:
check host websocket.org with address "echo.websocket.org"
if failed
port 80 protocol websocket
host "echo.websocket.org"
request "/"
origin 'http://websocket.com'
version 13
then alert
مدیریت نمونههای MONIT (MANAGE YOUR MONIT INSTANCES)
M/Monit https://mmonit.com قابلیتهای Monit را گسترش داده و پایش و مدیریت تمام میزبانهای فعالشده با Monit شما را فراهم میکند.
M/Monit از Monit به عنوان یک کارگزار استفاده میکند. Monit در فواصل زمانی منظم، یک پیام وضعیت حاوی تصویری لحظهای از میزبانی که روی آن اجرا میشود را به M/Monit ارسال میکند.
M/Monit دادههای جمعآوریشده را در نمودارها و گزارش رویدادها نمایش میدهد و به شما امکان میدهد دادههای کلیدی عملکرد تمام میزبانهای خود را در یک واسط کاربری مدرن، تمیز و خوشساخت که روی دستگاههای همراه نیز کار میکند، مشاهده کنید.
از طریق M/Monit، همچنین میتوانید سرویسهای روی میزبانهای اجراکنندهٔ Monit را شروع، متوقف یا مجدداً راهاندازی کنید.
برای ارسال دادهها به M/Monit، عبارت زیر را به فایل کنترلی Monit خود بیفزایید:
SET MMONIT <url>
[TIMEOUT <number> SECONDS]
[REGISTER WITHOUT CREDENTIALS]
[[WITH] HOSTGROUPS '[' "name", ... ']' ]
مثال:
set mmonit https://monit:monit@192.168.1.10:8443/collector
Monit خود را در M/Monit ثبت خواهد کرد و ارسال پیامهای وضعیت و رویداد به M/Monit را آغاز میکند. ما استفاده از https را مطابق مثال بالا پیشنهاد میکنیم تا اطمینان حاصل شود که ارتباط بین Monit و M/Monit امن است.
اگر گذرواژه شامل نویسههای معنادار در URL نظیر ":"، "?" یا "@" است، باید با کدگذاری URL نوشته شود.
مهلت زمانی پیشفرض ۵ ثانیه است؛ میتوانید مهلت زمانی را با استفاده از گزینهٔ TIMEOUT سفارشیسازی کنید.
هنگامی که Monit خود را در M/Monit ثبت میکند، اطلاعات احراز هویت را ارسال مینماید تا برای انجام عملیات مربوط به سرویسها از طریق M/Monit به کار روند. میتوانید با استفاده از گزینهٔ REGISTER WITHOUT CREDENTIALS ارسال اطلاعات احراز هویت را غیرفعال کرده و به جای آن، این اطلاعات را به صورت دستی در M/Monit وارد کنید.
میتوانید به صورت اختیاری Monit را به یک یا چند گروه میزبان (hostgroup) در M/Monit اضافه کنید. اگر گروه میزبان وجود نداشته باشد، به طور خودکار ایجاد خواهد شد. مثال:
set mmonit
https://monit:monit@192.168.1.10:8443/collector
with hostgroups [ Oslo, "Mail servers" ]
مثالهای پیکربندی (CONFIGURATION EXAMPLES)
سادهترین شکل فقط عبارت check است. در این مثال بررسی میکنیم که آیا سرور وب ما در حال اجرا است یا خیر، و اگر نبود هشداری صادر میکنیم:
check process nginx with pidfile /var/run/nginx.pid
برای اینکه در صورت متوقف بودن سرور، Monit آن را شروع کند، یک عبارت start اضافه کنید:
check process nginx with pidfile /var/run/nginx.pid
start program = "/etc/init.d/nginx start"
در اینجا مثال پیشرفتهتری برای پایش یک وبسرور apache آورده شده است که روی درگاههای پیشفرض HTTP و HTTPS گوش میدهد. در این مثال، اگر apache روی شماره درگاهها اتصالی را نپذیرد، Monit آن را مجدداً راهاندازی خواهد کرد. روشی که Monit برای راهاندازی مجدد استفاده میکند این است که ابتدا stop-program را اجرا کند، سپس (حداکثر ۳۰ ثانیه) منتظر توقف فرایند بماند، و سپس start-program را اجرا کرده و (۳۰ ثانیه) منتظر شروع آن بماند. مدت زمان انتظار برای شروع یا توقف را میتوان با استفاده از گزینهٔ 'timeout' لغو و مقدار جدید تعیین کرد. اگر Monit نتواند سرویس را متوقف کند یا شروع نماید، در صورتی که درخواست دریافت پیامهای هشدار را ثبت کرده باشید، پیام هشدار خرابی ارسال خواهد شد.
check process apache with pidfile /var/run/httpd.pid
start program = "/etc/init.d/httpd start" with timeout 60 seconds
stop program = "/etc/init.d/httpd stop"
if failed port 80 for 2 cycles then restart
if failed port 443 for 2 cycles then restart
این مثال نشان میدهد که چگونه میتوانید یک برنامه را تحت یک کاربر مشخص (uid) و با یک گروه مشخص (gid) اجرا کنید. بسیاری از برنامههای دیمن میتوانند تعویض uid و gid را خودشان انجام دهند، اما برای برنامههایی که فاقد این توانایی هستند (مانند برنامههای Java)، قابلیت Monit در شروع برنامه به عنوان یک کاربر خاص میتواند بسیار سودمند باشد. در این مثال ما موتور پردازش Servlet جاوای Tomcat را با کاربر و گروه استاندارد nobody اجرا میکنیم. لطفاً توجه داشته باشید که Monit تنها در صورتی میتواند uid و gid برنامه را تغییر دهد که مدیر سیستم (superuser) در حال اجرای Monit باشد؛ در غیر این صورت Monit به سادگی درخواست تغییر uid و gid را نادیده خواهد گرفت.
check process tomcat with pidfile /var/run/tomcat.pid
start program = "/etc/init.d/tomcat start"
as uid "nobody" and gid "nobody"
stop program = "/etc/init.d/tomcat stop"
# You can also use id numbers instead and write:
as uid 99 and with gid 99
if failed port 8080 then alert
در این مثال ما از پروتکل udp برای آزمودن اتصال به منظور بررسی در حال اجرا بودن کارساز نام (name-server) استفاده میکنیم:
check process named with pidfile /var/run/named.pid
start program = "/etc/init.d/named start"
stop program = "/etc/init.d/named stop"
if failed port 53 use type udp protocol dns then restart
مثال زیر نشان میدهد که چگونه بررسی کنیم آیا سرویس 'sophie' به اتصالات روی سوکت دامنه یونیکس خود پاسخ میدهد یا خیر:
check process sophie with pidfile /var/run/sophie.pid
start program = "/etc/init.d/sophie start"
stop program = "/etc/init.d/sophie stop"
if failed unix /var/run/sophie then restart
در این مثال یک وبسرور apache در حال اجرا روی localhost را بررسی میکنیم که به چندین میزبان مجازی (vhost) مبتنی بر IP پاسخ میدهد؛ به همین دلیل عبارت host قبل از port قرار گرفته است:
check process apache with pidfile /var/run/httpd.pid
start "/etc/init.d/httpd start"
stop "/etc/init.d/httpd stop"
if failed host www.sol.no port 80 then alert
if failed host shop.sol.no port 443 then alert
if failed host chat.sol.no port 80 then alert
برای اطمینان از اینکه Monit با یک سرور HTTP ارتباط برقرار میکند، میتوان یک آزمون پروتکل افزود:
check process apache with pidfile /var/run/httpd.pid
start "/etc/init.d/httpd start"
stop "/etc/init.d/httpd stop"
if failed
host www.sol.no port 80 protocol http
then alert
این مثال روش دیگری را برای بررسی یک وبسرور با استفاده از سازوکار send/expect نمایش میدهد:
check process apache with pidfile /var/run/httpd.pid
start "/etc/init.d/httpd start"
stop "/etc/init.d/httpd stop"
if failed
host www.sol.no port 80 and
send "GET / HTTP/1.1\r\nHost: www.sol.no\r\n\r\n"
expect "HTTP/[0-9\.]{3} 200.*"
then alert
در اینجا یک میزبان دوردست را پینگ میکنیم تا فعال بودن آن را بررسی کنیم و اگر فعال نبود، هشداری ارسال گردد:.PP
check host www.tildeslash.com with address www.tildeslash.com
if failed ping then alert
در مثال زیر، از Monit میخواهیم که چکسام باینری پایهای apache را که توسط برنامههای start و stop استفاده میشود، محاسبه و بررسی کند. اگر آزمون چکسام با شکست مواجه شود، پایش غیرفعال خواهد شد تا از راهاندازی مجدد احتمالی یک باینری دستکاریشده جلوگیری شود:
check process apache with pidfile /var/run/httpd.pid
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if failed host www.tildeslash.com port 80 then restart
depends on apache_bin
check file apache_bin with path /usr/local/apache/bin/httpd
if failed checksum then unmonitor
در این مثال، از Monit میخواهیم چکسام یک سند را روی یک سرور دوردست بیازماید. اگر چکسام تغییر کرده باشد، یک هشدار ارسال میکنیم:
check host mmonit.com with address mmonit.com
if failed
port 80 protocol http and
request "/monit/dist/monit-5.7.tar.gz"
with checksum f9d26b8393736b5dfad837bb13780786
then alert
در اینجا چند آزمون برای برخی از سرورهای ارتباطی پرکاربرد با استفاده از پروتکل SIP آورده شده است. ابتدا یک سرور FreeSWITCH و سپس یک سرور Asterisk را میآزماییم.
check process freeswitch
with pidfile /usr/local/freeswitch/log/freeswitch.pid
start program = "/usr/local/freeswitch/bin/freeswitch -nc -hp"
stop program = "/usr/local/freeswitch/bin/freeswitch -stop"
if total memory > 1000.0 MB for 5 cycles then alert
if total memory > 1500.0 MB for 5 cycles then alert
if total memory > 2000.0 MB for 5 cycles then restart
if cpu > 60% for 5 cycles then alert
if failed
port 5060 type udp protocol SIP
target me@foo.bar and maxforward 10
then restart
check process asterisk
with pidfile /var/run/asterisk/asterisk.pid
start program = "/usr/sbin/asterisk"
stop program = "/usr/sbin/asterisk -r -x 'shutdown now'"
if total memory > 1000.0 MB for 5 cycles then alert
if total memory > 1500.0 MB for 5 cycles then alert
if total memory > 2000.0 MB for 5 cycles then restart
if cpu > 60% for 5 cycles then alert
if failed
port 5060 type udp protocol SIP
and target me@foo.bar maxforward 10
then restart
برخی از سرورها راهاندازی کندی دارند، مانند سرورهای کاربردی (Application Servers) مبتنی بر Java. اگر بخواهیم چرخهٔ بررسی (poll-cycle) را کوتاه نگه داریم (یعنی کمتر از ۶۰ ثانیه)، اما به برخی سرویسها فرصت دهیم تا راهاندازی شوند، عبارت every بسیار کارآمد است:
check process dynamo with pidfile /etc/dynamo.pid every 2 cycles
start program = "/etc/init.d/dynamo start"
stop program = "/etc/init.d/dynamo stop"
if failed port 8840 then alert
در اینجا مثالی آورده شده است که در آن دو مدخل پایگاهداده را گروهبندی میکنیم تا بتوانید آنها را با یکدیگر مدیریت کنید؛ برای نمونه: 'Monit -g database start all'. دستور mode نیز در مدخل نخست نشان داده شده است و این اثر را دارد که اگر سرویس در حال اجرا نباشد، Monit تلاشی برای راهاندازی (مجدد) آن نخواهد کرد:
check process sybase with pidfile /var/run/sybase.pid
start = "/etc/init.d/sybase start"
stop = "/etc/init.d/sybase stop"
mode passive
group database
check process oracle with pidfile /var/run/oracle.pid
start program = "/etc/init.d/oracle start"
stop program = "/etc/init.d/oracle stop"
if failed
port 9001 protocol tns
then restart
group database
این مثال بررسی منابع، در صورتی که مصرف CPU دیمن HTTP آپاچی و فرایندهای فرزند آن برای ۲ چرخه از ۶۰٪ فراتر رود، هشداری ارسال خواهد کرد. اگر مصرف CPU برای ۵ چرخه بیش از ۸۰٪ باشد یا مصرف حافظه برای ۵ چرخه بیش از 100Mb باشد، Apache مجدداً راهاندازی میشود:
check process apache with pidfile /var/run/httpd.pid
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if cpu > 40% for 2 cycles then alert
if total cpu > 60% for 2 cycles then alert
if total cpu > 80% for 5 cycles then restart
if mem > 100 MB for 5 cycles then stop
این مثالها دستور timestamp را همراه با exec نشان میدهند و بیان میکنند که چگونه میتوانید در صورت تغییر فایل پیکربندی apache، آن را مجدداً راهاندازی کنید.
check file httpd.conf with path /etc/httpd/httpd.conf
if changed timestamp
then exec "/etc/init.d/httpd graceful"
در این مثال، نحوهٔ استفاده از دستور توسعهیافتهٔ alert و وابستگی بررسی فایل را نشان میدهیم:
check process apache with pidfile /var/run/httpd.pid
start = "/etc/init.d/httpd start"
stop = "/etc/init.d/httpd stop"
alert admin@bar on {nonexist, timeout}
with mail-format {
from: bofh@$HOST
subject: apache $EVENT - $ACTION
message: This event occurred on $HOST at $DATE.
Your faithful employee,
monit
}
if failed host www.tildeslash.com port 80 then restart
depend httpd_bin
group apache
check file httpd_bin with path /usr/local/apache/bin/httpd
alert security@bar on {checksum, timestamp,
permission, uid, gid}
with mail-format {subject: Alaaarrm! on $HOST}
if failed checksum
and expect 8f7f419955cefa0b33a2ba316cba3659
then unmonitor
if failed permission 755 then unmonitor
if failed uid "root" then unmonitor
if failed gid "root" then unmonitor
if changed timestamp then alert
group apache
در این مثال، استفاده از دستور depend را نشان میدهیم. در این حالت، میخواهیم oracle و apache را راهاندازی کنیم. با این حال، apache را به گونهای پیکربندی کردهایم که از oracle به عنوان بکاند استفاده کند، و اگر oracle مجدداً راهاندازی شود، apache نیز باید مجدداً راهاندازی شود.
check process apache with pidfile /var/run/httpd.pid
start = "/etc/init.d/httpd start"
stop = "/etc/init.d/httpd stop"
depends on oracle
check process oracle with pidfile /var/run/oracle.pid
start = "/etc/init.d/oracle start"
stop = "/etc/init.d/oracle stop"
if failed port 9001 for 5 cycles then restart
در ادامه، دو سرویس oracle-import و oracle-export را داریم که در صورت راهاندازی مجدد oracle باید مجدداً راهاندازی شوند، اما مستقل از یکدیگر هستند.
check process oracle with pidfile /var/run/oracle.pid
start = "/etc/init.d/oracle start"
stop = "/etc/init.d/oracle stop"
if failed port 9001 for 3 cycles then restart
check process oracle-import
with pidfile /var/run/oracle-import.pid
start = "/etc/init.d/oracle-import start"
stop = "/etc/init.d/oracle-import stop"
depends on oracle
check process oracle-export
with pidfile /var/run/oracle-export.pid
start = "/etc/init.d/oracle-export start"
stop = "/etc/init.d/oracle-export stop"
depends on oracle
~/.monitrc
فایل پیکربندی کنترلی پیشفرض
/etc/monitrc اگر فایل پیکربندی در مکان پیشفرض یافت نشود و دایرکتوری /etc حاوی فایل monitrc باشد، بهجای آن از این فایل استفاده خواهد شد.
./monitrc اگر فایل پیکربندی در هیچیک از دو مکان پیشین یافت نشود، و دایرکتوری کاری فعلی حاوی فایل monitrc باشد، بهجای آن از این فایل استفاده میشود.
~/.monit.pid فایل قفل برای جلوگیری از اجرای همزمان (در حالت غیرریشه).
/run/monit.pid فایل قفل برای جلوگیری از اجرای همزمان (در حالت ریشه، سیستمهای لینوکس، در صورت در دسترس بودن دایرکتوری /run).
/var/run/monit.pid فایل قفل برای جلوگیری از اجرای همزمان (در حالت ریشه، سیستمهای لینوکس).
/etc/monit.pid فایل قفل برای جلوگیری از اجرای همزمان (در حالت ریشه، سیستمهای فاقد /var/run).
~/.monit.state برنامهٔ Monit وضعیت خود را در این فایل ذخیره کرده و از اطلاعات موجود در آن برای بازیابی پس از خرابی استفاده میکند. این یک فایل دودویی است و محتوای آن تنها برای monit اهمیت دارد. میتوانید مکان این فایل را در فایل پیکربندی Monit یا با استفاده از گزینهٔ -s هنگام شروع بهکار Monit تعیین کنید.
~/.monit.id
برنامهٔ Monit شناسهٔ یکتای خود را در این فایل ذخیره میکند.
محیط (ENVIRONMENT)
هیچ متغیر محیطیای توسط Monit استفاده نمیشود. با این حال، هنگامی که Monit یک برنامهٔ start/stop/restart یا یک کنش exec را اجرا میکند، چندین متغیر محیطی را مقداردهی خواهد کرد که میتوانند توسط فایل اجرایی برای دریافت اطلاعات دربارهٔ رویدادی که موجب راهاندازی کنش شده است، استفاده شوند.
متغیر محیطی زیر برای هر برنامهای که توسط monit اجرا شود، از جمله check program، تنظیم میگردد:
- MONIT_SERVICE
- نام سرویسی (از monitrc) که برنامه برای آن اجرا شده است.
متغیرهای محیطی زیر تنها در بافتار برنامهٔ start/stop/restart سرویس و کنش exec در دسترس هستند:
- MONIT_EVENT
- رویدادی که روی سرویس رخ داده است
- MONIT_DESCRIPTION
- شرحی از وضعیت خطا
- MONIT_DATE
- زمان و تاریخ (به سبک RFC 822) وقوع رویداد
- MONIT_HOST
- میزبانی که رویداد روی آن رخ داده است
متغیرهای محیطی زیر تنها در بافتار برنامهٔ start/stop/restart مربوط به check process و کنش exec در دسترس هستند:
- MONIT_PROCESS_PID
- شناسه فرایند (PID). اگر فرایند (دوباره) راهاندازی شده باشد، ممکن است این مقدار 0 باشد،
- MONIT_PROCESS_MEMORY
- حافظه فرایند. اگر فرایند (دوباره) راهاندازی شده باشد، ممکن است این مقدار 0 باشد،
- MONIT_PROCESS_CHILDREN
- فرایندهای فرزند. اگر فرایند (دوباره) راهاندازی شده باشد، ممکن است این مقدار 0 باشد،
- MONIT_PROCESS_CPU_PERCENT
- درصد پردازنده (cpu%) فرایند. اگر فرایند (دوباره) راهاندازی شده باشد، ممکن است این مقدار 0 باشد،
متغیرهای محیطی زیر تنها برای بافتار برنامهٔ start/stop/restart مربوط به check program و کنش exec در دسترس هستند:
- MONIT_PROGRAM_STATUS
- وضعیت برنامه (مقدار خروج).
متغیرهای محیطی زیر میتوانند برای اشکالزدایی استفاده شوند:
- SSLKEYLOGFILE
- برای اشکالزدایی اتصالات SSL/TLS، برنامهٔ Monit از متغیر محیطی SSLKEYLOGFILE=<path> در حالت اشکالزدایی (با گزینهٔ -v) پشتیبانی میکند. از این فایل لاگ میتوان همراه با Wireshark برای رمزگشایی ارتباطات SSL/TLS استفاده کرد (مسیر فایل لاگ را در بخش "Settings -> Protocols -> TLS -> (Pre)-Master-Secret log filename" در نرمافزار Wireshark تنظیم کنید).
سیگنالها (SIGNALS)
اگر یک دیمن Monit در حال اجرا باشد، SIGUSR1 آن را از فاز خواب بیدار کرده و بررسی دورهای اجباری تمام سرویسها را اجرا میکند. سیگنالهای SIGTERM و SIGINT دیمن Monit را بهصورت تمیز خاتمه میدهند. در صورتی که Monit با آرگومان کنشی quit آغاز شود، سیگنال SIGTERM به دیمن Monit ارسال میگردد.
ارسال سیگنال SIGHUP به یک دیمن در حال اجرای Monit، آن را وادار به مقداردهی اولیهٔ مجدد میکند؛ بهویژه، پیکربندی را دوباره خوانده و فایلهای لاگ را میبندد و دوباره باز میکند.
اجرای Monit در پیشزمینه هنگامی که یک دیمن پسزمینهٔ Monit در حال اجرا است، موجب بیدار شدن آن دیمن خواهد شد.
نکات (NOTES)
این یک برنامهٔ بسیار کمخروجی و ساکت است. اگر میخواهید ببینید Monit چه کاری انجام میدهد، از گزینهٔ -v استفاده کرده و فایل لاگ را با tail -f مشاهده کنید. بهعنوان یک امکان اختیاری برای مقاصد آزمایشی، میتوانید Monit را با گزینهٔ -Iv آغاز کنید. در این صورت Monit اطلاعات اشکالزدایی را روی کنسول چاپ میکند؛ برای متوقف کردن monit در این حالت، کافی است در همان کنسول کلیدهای CTRL^C (یعنی SIGINT) را فشار دهید.
نحو (و تجزیهکنندهٔ) فایل پیکربندی از برنامهٔ عالی fetchmail نوشتهٔ Eric S. Raymond و دیگران الهام گرفته شده است. بخشهایی از این صفحهٔ راهنما نیز از همان نویسندگان الهام گرفته است..SH "کپیرایت و تکثیر (COPYRIGHT)" کپیرایت (C) 2001-2026 متعلق به Tildeslash Ltd. تمامی حقوق محفوظ است. این محصول با این امید که مفید واقع شود توزیع شده است، اما بدون هرگونه ضمانتی؛ حتی بدون ضمانت ضمنی قابلیت فروش یا تناسب برای یک هدف خاص.
همچنین ببینید (SEE ALSO)
GNU text utilities؛ md5sum(1)؛ sha1sum(1)؛ openssl(1)؛ glob(7)؛ regex(7)؛ https://mmonit.com
| www.mmonit.com | 6.0.0 |