.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "MONIT 1" .TH MONIT 1 "www.mmonit.com" "6.0.0" "دستورهای کاربر" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh.SH "نام (NAME)" Monit \- ابزاری برای پایش خدمات در سامانه‌های یونیکس .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" \&\fBmonit\fR [options] .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" \&\fBMonit\fR ابزاری برای مدیریت و پایش فرایندها، برنامه‌ها، فایل‌ها، دایرکتوری‌ها و سیستم‌های فایل در سامانه‌های یونیکس است. Monit نگهداری و تعمیر خودکار را انجام می‌دهد و می‌تواند در وضعیت‌های خطا، اقدامات علّی معناداری را اجرا کند. برای نمونه، Monit می‌تواند در صورتی که فرایندی در حال اجرا نباشد آن را آغاز کند، اگر فرایندی پاسخ ندهد آن را بازراه‌اندازی کند، و اگر فرایندی بیش از حد منابع مصرف کند، آن را متوقف سازد. می‌توانید از Monit برای پایش فایل‌ها، دایرکتوری‌ها و سیستم‌های فایل برای تغییراتی نظیر تغییرات برچسب زمانی، تغییرات جمع مقابله‌ای (checksum) یا تغییرات اندازه استفاده کنید. .PP Monit از طریق یک فایل کنترلی با پیکربندی آسان و مبتنی بر نحو آزاد‌قالب (free-format) و توکن‌محور هدایت می‌شود. Monit گزارش‌ها را در syslog یا فایل گزارش اختصاصی‌اش ثبت می‌کند و شرایط خطا را از طریق پیام‌های هشدار قابل سفارشی‌سازی به شما اطلاع می‌دهد. Monit می‌تواند بررسی‌های گوناگون شبکهٔ \s-1TCP/IP\s0 و بررسی‌های پروتکل را انجام دهد و قادر است برای چنین بررسی‌هایی از \s-1SSL\s0 بهره ببرد. Monit یک رابط \s-1HTTP\s0(S) ارائه می‌دهد و می‌توانید برای دسترسی به برنامهٔ Monit از یک مرورگر استفاده کنید. .SH "چه چیزی پایش شود؟ (WHAT TO MONITOR?)" .IX Header "WHAT TO MONITOR?" می‌توانید از Monit برای پایش \fBفرایندها\fRی دیمن یا برنامه‌های مشابه در حال اجرا روی localhost استفاده کنید. Monit به‌ویژه برای پایش فرایندهای دیمن سودمند است، مانند فرایندهایی که در زمان بالا آمدن سامانه آغاز می‌شوند؛ برای نمونه sendmail، sshd، apache و mysql. در مقایسه با بسیاری از دیگر سامانه‌های پایش، Monit می‌تواند در صورت بروز وضعیت خطا وارد عمل شود؛ برای نمونه، اگر sendmail در حال اجرا نباشد، Monit می‌تواند دوباره sendmail را به‌طور خودکار آغاز کند، یا اگر apache بیش از حد از منابع استفاده کند (مثلاً هنگام رخ دادن حملهٔ DoS)، Monit می‌تواند apache را متوقف یا بازراه‌اندازی کرده و یک پیام هشدار برای شما ارسال کند. Monit همچنین می‌تواند ویژگی‌های فرایند را پایش کند، مانند این‌که فرایند چه مقدار حافظه یا چرخه‌های پردازنده (CPU) مصرف می‌کند. .PP شما همچنین می‌توانید از Monit برای پایش \fBفایل‌ها\fR، \fBدایرکتوری‌ها\fR و \&\fBسیستم‌های فایل\fR روی localhost استفاده کنید. Monit می‌تواند این موارد را از نظر تغییراتی چون تغییرات برچسب زمانی، تغییرات جمع مقابله‌ای یا تغییرات اندازه پایش کند. این امر به دلایل امنیتی نیز مفید است \- می‌توانید جمع مقابله‌ای md5، sha1 یا sha256 فایل‌هایی را که نباید تغییر کنند پایش نموده و در صورت تغییر یافتن آن‌ها، هشدار دریافت کرده یا اقدامی را به انجام رسانید. برای امنیت رمزنگاری بهتر، استفاده از \s-1SHA256\s0 توصیه می‌شود. .PP Monit می‌تواند \fBاتصالات شبکه\fR به کارگزارهای گوناگون را، چه روی localhost و چه روی میزبان‌های دوردست، پایش نماید. پروتکل‌های \s-1TCP، UDP\s0 و Unix Domain Sockets پشتیبانی می‌شوند. آزمون شبکه می‌تواند در سطح پروتکل انجام شود؛ Monit دارای آزمون‌های داخلی برای پروتکل‌های اصلی اینترنت مانند \s-1HTTP، SMTP\s0 و غیره است. حتی اگر پروتکلی پشتیبانی نشود، شما همچنان می‌توانید کارگزار را بیازمایید، زیرا می‌توانید Monit را برای ارسال هرگونه داده و بررسی پاسخ دریافتی از کارگزار پیکربندی کنید. .PP Monit می‌تواند برای آزمودن \fBبرنامه‌ها\fR یا اسکریپت‌ها در زمان‌های معین، بسیار شبیه به cron استفاده شود، اما افزون بر این، می‌توانید مقدار خروجی (exit value) یک برنامه را بررسی کنید و در صورتی که مقدار خروجی نشان‌دهندهٔ خطا باشد، اقدامی انجام دهید یا هشداری بفرستید. این بدان معناست که می‌توانید از Monit برای انجام هر نوع بررسی که امکان نوشتن اسکریپت برای آن وجود داشته باشد، بهره ببرید. .PP در نهایت، Monit می‌تواند برای پایش منابع عمومی \fBسامانه\fR روی localhost مانند مصرف کلی \s-1CPU\s0، حافظه و بار سامانه (System Load) به کار رود. .SH "عملکرد کلی (GENERAL OPERATION)" .IX Header "GENERAL OPERATION" رفتار Monit توسط گزینه‌های خط فرمان \&\fIو\fR یک فایل کنترل اجرا به نام monitrc کنترل می‌شود که نحو آن در بخشی در ادامه شرح داده شده است. گزینه‌های خط فرمان بر تعاریف فایل \fI.monitrc\fR ارجحیت داشته و آن‌ها را لغو می‌کنند. .PP مکان پیش‌فرض برای \fImonitrc\fR مسیر \fI~/.monitrc\fR است. اگر این فایل وجود نداشته باشد، Monit مسیر \fI/etc/monitrc\fR و چند جای دیگر را امتحان خواهد کرد. برای جزئیات به \s-1فایل‌ها (FILES)\s0 مراجعه کنید. همچنین می‌توانید فایل کنترل را مستقیماً با استفاده از سوئیچ خط فرمان \fI\-c\fR در monit مشخص کنید. برای نمونه، .PP .Vb 1 \& $ monit \-c /var/monit/monitrc .Ve .PP پیش از آنکه Monit برای نخستین بار آغاز شود، می‌توانید فایل کنترل را برای خطاهای نحوی بررسی کنید: .PP .Vb 2 \& $ monit \-t \& $ Control file syntax OK .Ve .PP اگر خطایی وجود داشت، Monit پیام خطایی را در کنسول نمایش می‌دهد که شامل شماره خطی از فایل کنترل است که خطا در آن یافت شده است. .PP هنگامی که یک فایل کنترل کارآمد برای Monit داشتید، به سادگی Monit را از کنسول اجرا کنید، به این صورت: .PP .Vb 1 \& $ monit .Ve .PP می‌توانید برخی از دستورالعمل‌های پیکربندی را از طریق سوئیچ‌های خط فرمان تغییر دهید، اما برای سادگی پیشنهاد می‌شود که آن‌ها را درون فایل کنترل قرار دهید. .PP Monit از ترمینال جدا شده و به صورت یک فرایند پس‌زمینه، یعنی به عنوان یک فرایند دیمن اجرا خواهد شد. Monit به عنوان یک دیمن، در چرخه‌ها اجرا می‌شود؛ خدمات را پایش می‌کند، سپس به مدت زمان پیکربندی‌شده به خواب می‌رود، و پس از آن بیدار شده و پایش را دوباره در یک حلقهٔ بی‌پایان از سر می‌گیرد. .SS "گزینه‌ها (Options)" .IX Subsection "Options" گزینه‌های زیر توسط Monit شناخته می‌شوند. با این حال، توصیه می‌شود که گزینه‌ها را (در صورت امکان) مستقیماً درون فایل کنترل \fI.monitrc\fR تنظیم کنید. .PP \&\fB\-c\fR \fIfile\fR استفاده از این فایل کنترل .PP \&\fB\-d\fR \fIn\fR اجرای Monit به عنوان دیمن هر \fIn\fR ثانیه یک‌بار. یا استفاده از \fI\*(L"set daemon\*(R"\fR در monitrc. .PP \&\fB\-g\fR \fIname\fR تنظیم نام گروه برای اقدامات start،‏ stop،‏ restart،‏ monitor،‏ unmonitor، status و summary. .PP \&\fB\-l\fR \fIfile\fR چاپ اطلاعات گزارش در این فایل. یا استفاده از \fI\*(L"set log\*(R"\fR در monitrc. .PP \&\fB\-p\fR \fIpidfile\fR استفاده از این فایل قفل در حالت دیمن. یا استفاده از \fI\*(L"set pidfile\*(R"\fR در monitrc. .PP \&\fB\-s\fR \fIstatefile\fR نوشتن اطلاعات وضعیت در این فایل. یا استفاده از \fI\*(L"set statefile\*(R"\fR در monitrc. .PP \&\fB\-B\fR حالت خط فرمان دسته‌ای (بدون خروجی جدول‌بندی‌شده و بدون رنگ). یا استفاده از \fI\*(L"set terminal batch\*(R"\fR در monitrc. .PP \&\fB\-I\fR عدم اجرا در حالت پس‌زمینه (برای اجرا از طریق init لازم است). یا استفاده از \fI\*(L"set init\*(R"\fR در monitrc. .PP \&\fB\-i\fR چاپ شناسهٔ یکتای Monit (\s-1ID\s0) .PP \&\fB\-r\fR بازنشانی شناسهٔ یکتای Monit (\s-1ID\s0). با احتیاط استفاده شود .PP \&\fB\-t\fR اجرای بررسی نحوی برای فایل کنترل .PP \&\fB\-v\fR حالت پرگو (verbose)، عملکرد همراه با پیام‌های تشخیصی (خروجی عیب‌یابی) .PP \&\fB\-vv\fR حالت بسیار پرگو، همانند \-v به‌همراه ثبت ردگیری پشته (stack-trace) هنگام بروز خطا .PP \&\fB\-H\fR \fI[filename]\fR چاپ درهم‌سازهای \s-1MD5\s0، \s-1SHA1\s0 و \s-1SHA256\s0 فایل یا ورودی استاندارد (stdin) در صورت مشخص نشدن نام فایل؛ پس از آن Monit خارج خواهد شد .PP \&\fB\-V\fR چاپ شماره نگارش و سطح وصله (patch level) .PP \&\fB\-h\fR چاپ یک متن راهنما.SS "آرگومان‌ها (Arguments)" .IX Subsection "Arguments" هنگامی که Monit به عنوان یک پردازه دیمن در حال اجرا است، می‌توانید Monit را با یکی از آرگومان‌های زیر فراخوانی کنید. سپس Monit به دیمن Monit (به‌طور پیش‌فرض روی درگاه \s-1TCP\s0 به نشانی 127.0.0.1:2812) متصل شده و از دیمن Monit می‌خواهد تا اقدام درخواستی را انجام دهد. به بیان دیگر؛ فراخوانی monit بدون آرگومان، دیمن Monit را آغاز می‌کند، و فراخوانی monit \fIهمراه با\fR آرگومان‌ها به شما امکان می‌دهد تا با پردازه دیمن Monit ارتباط برقرار کنید. .IP "start all" 4 .IX Item "start all" آغاز تمام سرویس‌های فهرست‌شده در فایل کنترلی و فعال‌سازی پایش برای آن‌ها. اگر گزینه گروه تنظیم شده باشد (\fI\-g\fR)، تنها سرویس‌های موجود در گروه نام‌برده را آغاز و پایش آن‌ها را فعال می‌کند (در این حالت نیازی به درج \*(L"all\*(R" نیست). .IP "start " 4 .IX Item "start " آغاز سرویس نام‌برده و فعال‌سازی پایش برای آن. نام، یک شناسه سرویس از فایل monitrc است. همچنین می‌توانید از یک الگوی عبارت باقاعده (regex) نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست). .IP "stop all" 4 .IX Item "stop all" توقف تمام سرویس‌های فهرست‌شده در فایل کنترلی و غیرفعال‌سازی پایش آن‌ها. اگر گزینه گروه تنظیم شده باشد، تنها سرویس‌های موجود در گروه نام‌برده را متوقف و پایش آن‌ها را غیرفعال می‌کند (در این حالت نیازی به درج \*(L"all\*(R" نیست). .IP "stop " 4 .IX Item "stop " توقف سرویس نام‌برده و غیرفعال‌سازی پایش آن. نام، یک شناسه سرویس از فایل monitrc است. همچنین می‌توانید از یک الگوی regex نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست). .IP "restart all" 4 .IX Item "restart all" توقف و آغاز مجدد \fIتمام\fR سرویس‌ها. اگر گزینه گروه تنظیم شده باشد، تنها سرویس‌های موجود در گروه نام‌برده را مجدداً راه‌اندازی می‌کند (در این حالت نیازی به درج \*(L"all\*(R" نیست). .IP "restart " 4 .IX Item "restart " راه‌اندازی مجدد سرویس نام‌برده. نام، یک شناسه سرویس از فایل monitrc است. همچنین می‌توانید از یک الگوی regex نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست). .IP "monitor all" 4 .IX Item "monitor all" فعال‌سازی پایش تمام سرویس‌های فهرست‌شده در فایل کنترلی. اگر گزینه گروه تنظیم شده باشد، تنها پایش سرویس‌های موجود در گروه نام‌برده را آغاز می‌کند (در این حالت نیازی به درج \*(L"all\*(R" نیست). .IP "monitor " 4 .IX Item "monitor " فعال‌سازی پایش سرویس نام‌برده. نام، یک شناسه سرویس از فایل monitrc است. Monit همچنین پایش تمام سرویس‌هایی را که این سرویس به آن‌ها وابسته است فعال خواهد کرد. می‌توانید از یک الگوی regex نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست). .IP "unmonitor all" 4 .IX Item "unmonitor all" غیرفعال‌سازی پایش تمام سرویس‌های فهرست‌شده در فایل کنترلی. اگر گزینه گروه تنظیم شده باشد، تنها پایش سرویس‌های موجود در گروه نام‌برده را غیرفعال می‌کند (در این حالت نیازی به درج \*(L"all\*(R" نیست). .IP "unmonitor " 4 .IX Item "unmonitor " غیرفعال‌سازی پایش سرویس نام‌برده. نام، یک شناسه سرویس از فایل monitrc است. Monit همچنین پایش تمام سرویس‌هایی را که به این سرویس وابسته هستند غیرفعال خواهد کرد. می‌توانید از یک الگوی regex نیز استفاده کنید (توجه داشته باشید که به بزرگی و کوچکی حروف حساس نیست). .IP "status [name|pattern]" 4 .IX Item "status [name|pattern]" چاپ اطلاعات وضعیت سرویس. .IP "summary [name|pattern]" 4 .IX Item "summary [name|pattern]" چاپ خلاصه‌ای کوتاه از وضعیت. .IP "report [up | down | initialising | unmonitored | total]" 4 .IX Item "report [up | down | initialising | unmonitored | total]" گزارش وضعیت سرویس‌ها. خروجی می‌تواند به آسانی توسط اسکریپت‌ها تجزیه شود. بدون گزینه‌ها، یک نمای کلی کوتاه از وضعیت تمام سرویس‌های مدیریت‌شده توسط Monit را چاپ می‌کند. گزینه \fIup\fR تعداد تمام سرویس‌های موجود در این وضعیت را چاپ می‌کند، گزینه \fIdown\fR نیز به همین ترتیب و الی آخر. .IP "reload" 4 .IX Item "reload" راه‌اندازی اولیه مجدد دیمن در حال اجرای Monit؛ دیمن پیکربندی خود را دوباره می‌خواند، و فایل‌های گزارش (log) را بسته و مجدداً باز می‌کند. .IP "quit" 4 .IX Item "quit" خاتمه دادن به پردازه دیمن Monit (kill). .IP "validate" 4 .IX Item "validate" بررسی تمام سرویس‌های فهرست‌شده در فایل کنترلی. این کنش همچنین رفتار پیش‌فرض هنگام اجرای Monit در حالت دیمن است. .IP "procmatch " 4 .IX Item "procmatch " امکان آزمایش آسان الگو را برای بررسی تطابق پردازه فراهم می‌کند. این دستور یک عبارت باقاعده را به عنوان آرگومان دریافت کرده و تمام پردازه‌های در حال اجرایی را که با الگو مطابقت دارند نمایش می‌دهد. .SH "فایل کنترلی MONIT (THE MONIT CONTROL FILE)" .IX Header "THE MONIT CONTROL FILE" برنامه Monit از طریق یک فایل کنترلی با نام \fImonitrc\fR پیکربندی و کنترل می‌شود. مکان پیش‌فرض این فایل ‎~/.monitrc است. اگر این فایل وجود نداشته باشد، Monit مسیر /etc/monitrc، سپس \f(CW@sysconfdir\fR@/monitrc و در نهایت \&./monitrc را بررسی می‌کند. اگر Monit را از کد منبع بسازید، مقدار \&\f(CW@sysconfdir\fR@ را می‌توان در زمان پیکربندی به صورت \&./configure \-\-sysconfdir تعیین کرد. برای نمونه، استفاده از \&\fI./configure \-\-sysconfdir /var/monit/etc\fR سبب می‌شود Monit به دنبال \&\fImonitrc\fR در \fI/var/monit/etc\fR بگردد. .PP برای محافظت از امنیت فایل کنترلی و گذرواژه‌هایتان، فایل کنترلی باید دارای مجوزهای خواندن و نوشتن \fIحداکثر 0700\fR (u=xrw,g=,o=) باشد؛ در غیر این صورت Monit اخطار داده و خارج می‌شود. .PP هنگامی که تعارضی میان آرگومان‌های خط فرمان و آرگومان‌های موجود در این فایل وجود داشته باشد، آرگومان‌های خط فرمان اولویت دارند. .PP نرم‌افزار Monit از زبان اختصاصی دامنه (\s-1DSL\s0) خود استفاده می‌کند؛ فایل کنترلی شامل مجموعه‌ای از مدخل‌های سرویس و دستورات گزینه‌های سراسری است. .PP توضیحات (کامنت‌ها) با یک \f(CW\*(Aq#\*(Aq\fR آغاز شده و تا انتهای خط ادامه می‌یابند. در غیر این صورت، فایل شامل مجموعه‌ای از مدخل‌های سرویس یا دستورات گزینه‌های سراسری در یک نحو آزادِ مبتنی بر نشانه (token) است. .PP می‌توانید از کلیدواژه‌های بی‌اثر (noise keywords) مانند \f(CW\*(Aqif\*(Aq\fR، \&\f(CW\*(Aqand\*(Aq\fR، \f(CW\*(Aqwith(in)\*(Aq\fR، \f(CW\*(Aqhas\*(Aq\fR، \&\f(CW\*(Aqus(ing|e)\*(Aq\fR، \f(CW\*(Aqon(ly)\*(Aq\fR، \f(CW\*(Aqthen\*(Aq\fR، \&\f(CW\*(Aqfor\*(Aq\fR و \f(CW\*(Aqof\*(Aq\fR در هر کجای مدخل استفاده کنید تا آن را به زبان انگلیسی شبیه‌تر سازید. آن‌ها نادیده گرفته می‌شوند، اما می‌توانند خواندن مدخل‌ها را در یک نگاه بسیار آسان‌تر کنند. کلیدواژه‌ها نسبت به بزرگی و کوچکی حروف حساس نیستند. .PP سه نوع نشانه (token) وجود دارد: \fIدستور زبان (grammar)\fR، \fIاعداد\fR (یعنی دنباله‌ای از ارقام دهدهی) و \fIرشته‌ها\fR. رشته‌ها می‌توانند درون گیومه یا بدون آن باشند. یک رشته درون گیومه توسط گیومه دوتایی محصور شده و می‌تواند حاوی فاصله‌های سفید باشد (و ارقام درون گیومه نیز به عنوان رشته در نظر گرفته می‌شوند). یک رشته بدون گیومه هر نشانه‌ای است که با فاصله سفید محدود شده و حاوی نویسه‌ها و/یا ارقام است. .PP در سطح معنایی، فایل کنترلی از سه نوع مدخل تشکیل شده است: .IP "1. Global set-statements" 4 .IX Item "1. Global set-statements" یک دستور سراسری set با کلیدواژه \f(CW\*(C`set\*(C'\fR و موردی که باید پیکربندی شود آغاز می‌گردد. .IP "2. Global include-statement" 4 .IX Item "2. Global include-statement" دستور include شامل کلیدواژه \f(CW\*(C`include\*(C'\fR و یک رشته الگو (glob) است. این دستور برای گنجاندن دستورالعمل‌های پیکربندی از فایل‌های جداگانه به کار می‌رود. .IP "3. One or more service entry statements." 4 .IX Item "3. One or more service entry statements.".SS "بررسی‌های سرویس (Service checks)" .IX Subsection "Service checks" هر مدخل سرویس شامل کلیدواژهٔ \f(CW\*(C`check\*(C'\fR و به دنبال آن نوع سرویس است. هر مدخل نیازمند یک نام توصیفی \fBیکتا (unique)\fR است که می‌تواند آزادانه انتخاب شود. این نام توسط Monit برای ارجاع داخلی به سرویس و در تمام تعاملات با کاربر استفاده می‌شود. این نام به بزرگی و کوچکی حروف حساس نیست. .PP در حال حاضر، نه نوع عبارت بررسی پشتیبانی می‌شود: .PP \fIفرآیند (Process)\fR .IX Subsection "Process" .PP .Vb 1 \& CHECK PROCESS | MATCHING > .Ve .PP مسیر مطلق به pid-file برنامه است. یک pid-file فایلی حاوی شناسهٔ یکتای یک فرآیند (\s-1ID\s0) است. اگر pid-file وجود نداشته باشد یا حاوی شمارهٔ \s-1PID\s0 یک فرآیند در حال اجرا نباشد، Monit در صورت تعریف شدن، متد start مدخل را فراخوانی خواهد کرد. .PP جایگزینی برای استفاده از فایل‌های \s-1PID\s0 است و از تطبیق الگوی نام فرآیند برای یافتن فرآیند مد نظر جهت پایش استفاده می‌کند. بالاترین والد منطبق با بیشترین زمان بالا بودن (uptime) انتخاب می‌شود، بنابراین این نوع بررسی زمانی بیشترین کاربرد را دارد که نام فرآیند یکتا باشد. در صورت امکان باید از pid-file استفاده شود، زیرا \s-1PID\s0 مورد انتظار را دقیقاً مشخص می‌کند. می‌توانید با استفاده از دستور \f(CW\*(C`monit procmatch "regex\-pattern"\*(C'\fR در خط فرمان بررسی کنید که آیا فرآیندی با الگو مطابقت دارد یا خیر. این کار تمام فرآیندهایی را که با الگوی regex مطابقت دارند یا ندارند، فهرست می‌کند. .PP \fIفایل (File)\fR .IX Subsection "File" .PP .Vb 1 \& CHECK FILE PATH .Ve .PP مسیر مطلق به فایل است. اگر فایل وجود نداشته باشد، Monit در صورت تعریف شدن متد start مدخل، آن را فراخوانی خواهد کرد؛ اگر به یک نوع فایل معمولی (برای نمونه یک دایرکتوری) اشاره نکند، Monit پایش این مدخل را غیرفعال می‌کند. اگر Monit در حالت منفعل (passive) اجرا شود یا متد start تعریف نشده باشد، Monit در هنگام بروز خطا صرفاً یک هشدار ارسال خواهد کرد. .PP \fIFifo (صف)\fR .IX Subsection "Fifo" .PP .Vb 1 \& CHECK FIFO PATH .Ve .PP مسیر مطلق به fifo است. اگر fifo وجود نداشته باشد، Monit در صورت تعریف شدن متد start مدخل، آن را فراخوانی خواهد کرد؛ اگر به نوع fifo (برای نمونه یک دایرکتوری) اشاره نکند، Monit پایش این مدخل را غیرفعال خواهد کرد. اگر Monit در حالت منفعل اجرا شود یا متد start تعریف نشده باشد، Monit در هنگام بروز خطا صرفاً یک هشدار ارسال خواهد کرد. .PP \fIسیستم‌فایل (Filesystem)\fR .IX Subsection "Filesystem" .PP .Vb 1 \& CHECK FILESYSTEM PATH .Ve .PP مسیر به دستگاه/دیسک، نقطهٔ اتصال (mount point) یا رشتهٔ اتصال \s-1NFS/CIFS/FUSE\s0 است. اگر سیستم‌فایل از دسترس خارج شود، Monit در صورت تعریف شدن، متد start سرویس را فراخوانی می‌کند. اگر Monit در حالت منفعل اجرا شود یا متد start تعریف نشده باشد، Monit در هنگام بروز خطا صرفاً یک هشدار ارسال خواهد کرد. .PP \fIدایرکتوری (Directory)\fR .IX Subsection "Directory" .PP .Vb 1 \& CHECK DIRECTORY PATH .Ve .PP مسیر مطلق به دایرکتوری است. اگر دایرکتوری وجود نداشته باشد، Monit در صورت تعریف شدن متد start مدخل، آن را فراخوانی می‌کند. اگر به یک دایرکتوری اشاره نکند، monit پایش این مدخل را غیرفعال خواهد کرد. اگر Monit در حالت منفعل اجرا شود یا متدهای start تعریف نشده باشند، Monit در هنگام بروز خطا صرفاً یک هشدار ارسال خواهد کرد. .PP \fIمیزبان راه‌دور (Remote host)\fR .IX Subsection "Remote host" .PP .Vb 1 \& CHECK HOST ADDRESS .Ve .PP آدرس میزبان می‌تواند به عنوان یک رشتهٔ نام میزبان (hostname) یا رشتهٔ آدرس IP در قالب ده‌دهی نقطه‌دار مشخص شود؛ مانند \&\*(L"tildeslash.com\*(R" یا \*(L"64.87.72.95\*(R". .PP \fIسیستم (System)\fR .IX Subsection "System" .PP .Vb 1 \& CHECK SYSTEM .Ve .PP مقدار \fIunique name\fR معمولاً نام میزبان محلی است، اما از هر نام توصیفی دیگری نیز می‌توان استفاده کرد. اگر از متغیر \f(CW$HOST\fR به عنوان نام استفاده کنید، به نام میزبان بسط می‌یابد. این بررسی امکان پایش منابع عمومی سیستم مانند مصرف \s-1CPU\s0، کل حافظهٔ مصرفی یا میانگین بار (load average) را فراهم می‌آورد. مقدار \&\fIunique name\fR به عنوان نام میزبان سیستم در هشدارهای ایمیلی و به عنوان نام اولیهٔ مدخل میزبان در M/Monit استفاده می‌شود. .PP \fIبرنامه (Program)\fR .IX Subsection "Program" .PP .Vb 1 \& CHECK PROGRAM PATH [TIMEOUT SECONDS] .Ve .PP مسیر مطلق به برنامه یا اسکریپت اجرایی است. آزمون وضعیت امکان بررسی وضعیت خروج (exit status) برنامه را فراهم می‌آورد. اگر اجرای برنامه ظرف ثانیه به پایان نرسد، Monit آن را خاتمه خواهد داد. مهلت زمانی (timeout) پیش‌فرض برنامه ۳۰۰ ثانیه (۵ دقیقه) است. خروجی برنامه ثبت شده و در رابط کاربری و در هشدارها در دسترس قرار می‌گیرد که به‌طور پیش‌فرض تا ۵۱۲ بایت است. شما می‌توانید با استفاده از دستور set limits این محدودیت خروجی را تغییر دهید). .PP \fIشبکه (Network)\fR .IX Subsection "Network" .PP .Vb 1 \& CHECK NETWORK
| INTERFACE > .Ve .PP آدرس IPv4 یا IPv6 رابط شبکهٔ تحت پایش است. همچنین امکان استفاده از نام رابط، مانند \*(L"eth0\*(R" در لینوکس، وجود دارد..SH "ثبت گزارش‌ها (LOGGING)" .IX Header "LOGGING" برنامه Monit پیام‌های وضعیت و خطا را در یک فایل یا از طریق syslog ثبت می‌کند. از دستور \fIset log\fR در فایل کنترل monitrc استفاده کنید. .PP برای تنظیم Monit جهت ثبت گزارش در فایل اختصاصی خودش، به عنوان مثال از \fIset log /var/log/monit.log\fR استفاده کنید. توجه داشته باشید که دستور قبلی \fIset logfile\fR منسوخ شده است، اما همچنان می‌توان از آن به عنوان جایگزین استفاده کرد. .PP اگر \fBsyslog\fR به عنوان مقدار سوئیچ خط فرمان \f(CW\*(C`\-l\*(C'\fR مشخص شود یا عبارت کلیدی \fIset log syslog\fR در فایل کنترل وجود داشته باشد، Monit از دیمن سیستمی \fBsyslog\fR برای ثبت پیام‌ها با اولویتی که بر اساس زمینه به هر پیام اختصاص می‌یابد، استفاده خواهد کرد. .PP برای غیرفعال کردن ثبت گزارش، کافی است log را در فایل کنترل تنظیم نکنید (و البته، از سوئیچ \-l نیز استفاده نکنید). .PP قالب یک مدخل در فایل گزارش به این صورت است: .PP .Vb 1 \& [date] priority : message .Ve .PP برای مثال: .PP .Vb 1 \& [2020\-08\-12T16:35:00+0200] info : \*(Aqlocalhost\*(Aq Monit started .Ve .SH "خروجی ترمینال (TERMINAL OUTPUT)" .IX Header "TERMINAL OUTPUT" در صورتی که ترمینال از رنگ‌ها پشتیبانی کند، Monit از دنباله‌های گریز \s-1ANSI\s0 برای رنگ‌آمیزی بخش‌های مهم خروجی خط فرمان، و از نویسه‌های جعبه‌ای \s-1UTF\-8\s0 برای خروجی‌های جدول‌بندی‌شده استفاده می‌کند. .PP اگر می‌خواهید خروجی \s-1CLI\s0 مانیت را در یک اسکریپت پردازش کنید، می‌توانید از گزینه \-B استفاده کنید یا عبارت زیر را در فایل پیکربندی monit برای غیرفعال کردن کامل خروجی جدولی و رنگ‌ها قرار دهید: .PP .Vb 1 \& SET TERMINAL BATCH .Ve .SH "حالت دیمن (DAEMON MODE)" .IX Header "DAEMON MODE" از .PP .Vb 2 \& SET DAEMON \& [[WITH] START DELAY ] .Ve .PP برای تعیین طول چرخه پایش Monit و اجرای آن در حالت دیمن استفاده کنید. شما باید یک آرگومان عددی را که فاصله زمانی پایش بر حسب ثانیه است مشخص کنید. .PP در حالت دیمن، Monit از کنسول جدا شده، به پس‌زمینه می‌رود و به طور مداوم اجرا می‌شود؛ هر سرویس تعیین‌شده را پایش می‌کند و سپس برای فاصله پایش مشخص‌شده به خواب می‌رود، بیدار می‌شود و پایش را دوباره در یک چرخه بی‌پایان از سر می‌گیرد. .PP به عنوان جایگزین، می‌توانید از سوئیچ خط فرمان \f(CW\*(C`\-d\*(C'\fR برای تنظیم بازه پایش استفاده کنید، اما اکیداً توصیه می‌شود که بازه پایش را در فایل \fI~/.monitrc\fR خود با استفاده از \fIset daemon\fR تنظیم نمایید. .PP در این صورت Monit همیشه در حالت دیمن شروع به کار خواهد کرد. اگر از این عبارت استفاده نکنید و monit را با گزینه \-d اجرا نکنید، Monit تنها یک بار بررسی‌های سرویس را انجام داده و سپس خارج می‌شود. این حالت ممکن است در برخی شرایط مفید باشد، اما Monit اساساً برای اجرا به عنوان یک پردازه دیمن طراحی شده است. .PP فراخوانی \f(CW\*(C`monit\*(C'\fR در حالی که دیمن Monit در پس‌زمینه در حال اجرا است، یک سیگنال بیدارباش به دیمن ارسال کرده و آن را مجبور می‌کند سرویس‌ها را فوراً بررسی کند. فراخوانی \f(CW\*(C`monit\*(C'\fR با آرگومان quit به جای بیدار کردن، پردازه دیمن در حال اجرای Monit را خاتمه می‌دهد. .PP گزینه تأخیر در شروع (start delay) می‌تواند برای یک بار درنگ قبل از شروع بررسی سرویس‌ها پس از راه‌اندازی مجدد سیستم استفاده شود. Monit به طور پیش‌فرض بلافاصله پس از راه‌اندازی، پایش سرویس‌ها را آغاز می‌کند. .SH "پشتیبانی از INIT (INIT SUPPORT)" .IX Header "INIT SUPPORT" عبارت \f(CW\*(C`set init\*(C'\fR مانع از تبدیل Monit به یک پردازه دیمن می‌شود. در عوض Monit به عنوان یک پردازه در پیش‌زمینه اجرا خواهد شد (همچنان باید از \f(CW\*(C`set daemon\*(C'\fR برای تعیین چرخه پایش استفاده کنید). .PP این کار برای اجرای Monit از طریق init ضروری است. اجرای Monit از طریق init احتمالاً بهترین روش برای اجرای Monit است اگر می‌خواهید اطمینان حاصل کنید که همیشه یک دیمن Monit در حال اجرا در سیستم خود دارید. گزینه دیگر، اجرای Monit از طریق crontab است. در هر حال، قبل از اینکه Monit را از طریق init یا crontab اجرا کنید، باید مطمئن شوید که فایل کنترل هیچ خطای نحوی ندارد (از \f(CW\*(C`monit \-t\*(C'\fR برای بررسی استفاده کنید). .PP برای تنظیم Monit جهت اجرا از طریق init، می‌توانید از عبارت \f(CW\*(C`set init\*(C'\fR در فایل کنترل Monit یا از گزینه \f(CW\*(C`\-I\*(C'\fR در خط فرمان استفاده کنید. در اینجا کدهایی که باید به \f(CW\*(C`/etc/inittab\*(C'\fR اضافه کنید آمده است: .PP .Vb 2 \& # Run Monit in standard run\-levels \& mo:2345:respawn:/usr/local/bin/monit \-Ic /etc/monitrc .Ve .PP پس از ویرایش فایل پیکربندی init، می‌توانید دستور زیر را برای بررسی مجدد /etc/inittab و شروع Monit اجرا کنید: .PP .Vb 1 \& telinit q .Ve .PP برای سیستم‌های فاقد telinit: .PP .Vb 1 \& kill \-1 1 .Ve .PP اگر از Monit برای نظارت بر سرویس‌هایی استفاده می‌شود که هم‌زمان در زمان بوت سیستم راه‌اندازی می‌شوند (مانند سرویس‌هایی که از طریق اسکریپت‌های rc مربوط به \s-1SYSV\s0 init یا از طریق inittab شروع می‌شوند)، در برخی موارد ممکن است یک شرایط رقابتی (race condition) رخ دهد؛ بدین معنی که اگر راه‌اندازی یک سرویس کُند باشد، Monit ممکن است فرض کند که سرویس اجرا نشده است و احتمالاً تلاش کند آن را راه‌اندازی کرده و هشداری ایجاد نماید، در حالی که در واقع سرویس در آستانه راه‌اندازی است یا در مرحله توالی آغازین خود قرار دارد. لطفاً برای راه‌حل این مشکل به \s-1FAQ\s0 مراجعه کنید. خلاصه راه‌حل این است که Monit را در یک run-level بالاتر، پس از پردازه‌های سیستمی راه‌اندازی کنید..SH "فایل‌های ضمیمه (INCLUDE FILES)" .IX Header "INCLUDE FILES" فایل کنترلی Monit، یعنی \f(CW\*(C`monitrc\*(C'\fR، می‌تواند فایل‌های پیکربندی اضافی را ضمیمه کند. این قابلیت در صورتی که مایل باشید، کمک می‌کند تا پیکربندی را به جای تجمیع همه چیز در یک فایل، در چندین فایل مجزا سازماندهی کنید. عبارت‌های Include را می‌توان تقریباً در هر کجای \f(CW\*(C`monitrc\*(C'\fR قرار داد، هرچند طبق عرف معمولاً در انتهای آن قرار می‌گیرند. ساختار نحوی به صورت زیر است: .PP .Vb 1 \& INCLUDE .Ve .PP مقدار globstring هر نوع رشته‌ای است که در \f(CWglob(7)\fR تعریف شده باشد. بنابراین، می‌توانید به یک فایل منفرد ارجاع دهید یا چندین فایل را به صورت هم‌زمان بارگذاری نمایید. اگر می‌خواهید در رشته‌ی خود از فاصله‌ی خالی (whitespace) استفاده کنید، globstring باید درون علامت‌های نقل‌قول تکی (\(aq) یا دوتایی (") قرار گیرد. در صورتی که globstring به جای یک فایل با یک دایرکتوری مطابقت داشته باشد، بدون اعلام هشدار نادیده گرفته می‌شود. .PP هر دستور \fIinclude\fR درون یک فایل ضمیمه‌شده نیز دقیقاً همانند فایل کنترلی اصلی پردازش و تجزیه می‌شود. .PP اگر globstring با چندین نتیجه مطابقت داشته باشد، فایل‌ها بدون ترتیب خاصی ضمیمه خواهند شد. چنانچه لازم است بر ترتیب مشخصی تکیه کنید، باید از الگوهای تطبیق کاراکترهای عمومی (wild-card globbing) خودداری نموده و در عوض مسیر کامل فایل‌های ضمیمه‌شده را مشخص کنید. .PP یک مثال: .PP .Vb 1 \& include /etc/monit.d/*.cfg .Ve .PP این دستور هر فایلی را که با globstring مطابقت داشته باشد بارگذاری می‌کند؛ یعنی تمامی فایل‌های موجود در دایرکتوری \fI/etc/monit.d\fR که به \fI.cfg\fR ختم می‌شوند. .PP تا حداکثر ۱۰۲۴ فایل include پشتیبانی می‌شود. در صورت فراتر رفتن از این محدودیت، Monit یک خطا گزارش خواهد داد. .SH "گزینه‌های SSL (SSL OPTIONS)" .IX Header "SSL OPTIONS" گزینه‌های عمومی \s-1SSL/TLS\s0 را می‌توان با استفاده از عبارت زیر تعیین کرد و این تنظیمات بر تمامی اتصالات \s-1SSL\s0 برقرار شده از طریق Monit اعمال خواهند شد: .PP .Vb 12 \& SET [OPTIONS] { \& VERSION: , ... \& VERIFY: \& SELFSIGNED: \& CIPHERS: \& PEMFILE: \& PEMCHAIN: \& PEMKEY: \& CLIENTPEMFILE: \& CACERTIFICATEFILE: \& CACERTIFICATEPATH: \& } .Ve .PP \&\fI\s-1VERSION\s0\fR نسخه‌ی خاص \s-1SSL/TLS\s0 مورد استفاده را تعیین می‌کند. به صورت پیش‌فرض Monit از \s-1AUTO\s0 استفاده می‌کند. در حالت \s-1AUTO\s0، تنها \s-1TLS 1.2\s0 و 1.3 مجاز هستند و سایر پروتکل‌ها منسوخ در نظر گرفته می‌شوند. اگر می‌خواهید از پروتکل‌های منسوخ استفاده کنید، باید نسخه را صریحاً مشخص نمایید. می‌توانید با استفاده از پیشوند \*(L"\-\*(R" پروتکل مورد نظر را مستثنی کنید. مثال برای فهرست استثناها (Exclude): set ssl { version: auto \-sslv2 \-sslv3 \-tlsv1 \-tlsv11 } مثال برای فهرست پروتکل‌های مجاز: set ssl { version: tlsv12 tlsv13 } .PP \&\fI\s-1VERIFY\s0\fR اعتبارسنجی گواهی سرور \s-1SSL\s0 را فعال می‌کند. این گزینه گواهی را اعتبارسنجی کرده و در صورتی که گواهی سرور غیرقابل اعتماد یا نامعتبر بوده یا منقضی شده باشد، خطا گزارش می‌دهد. اعتبارسنجی گواهی به صورت پیش‌فرض غیرفعال است، اگرچه فعال‌سازی آن توصیه می‌شود؛ در غیر این صورت هیچ تضمینی وجود ندارد که Monit با همان سروری ارتباط برقرار می‌کند که شما مد نظر دارید. .PP \&\fI\s-1SELFSIGNED\s0\fR گواهی‌های خودامضا (self-signed) به‌طور پیش‌فرض رد می‌شوند. از این گزینه برای مجاز ساختن گواهی‌های خودامضا استفاده کنید. هشدار: به دلایل امنیتی استفاده از این گزینه در محیط عملیاتی توصیه نمی‌شود، چرا که در این وضعیت کلاینت قادر به تأیید هویت سرور واقعی نبوده و حملاتی مانند مرد میانی (man-in-the-middle) یا سرقت دی‌ان‌اس (\s-1DNS\s0 hijacking) امکان‌پذیر خواهند بود. .PP \&\fI\s-1CIPHERS\s0\fR الگوریتم‌های رمزنگاری (ciphers) پیش‌فرض \s-1SSL/TLS\s0 را بازنویسی می‌کند. .PP \&\fI\s-1PEMFILE\s0\fR مسیر \*(L"فایل پایگاه‌داده‌ی\*(R" گواهی سرور \s-1SSL\s0 را با قالب \s-1PEM\s0 تعیین می‌کند. این گزینه تنها بر رابط \s-1HTTP\s0 در Monit تأثیر دارد. .PP به عنوان جایگزینی برای تنظیم \fI\s-1PEMFILE\s0\fR با یک فایل ادغام‌شده از زنجیره و کلید، گزینه‌های \&\fI\s-1PEMCHAIN\s0\fR و \fI\s-1PEMKEY\s0\fR به ترتیب مسیر فایل زنجیره گواهی \s-1SSL\s0 و کلید خصوصی سرور را با قالب \s-1PEM\s0 مشخص می‌کنند. این گزینه‌ها تنها بر رابط \s-1HTTP\s0 در Monit تأثیر دارند. .PP \&\fI\s-1CLIENTPEMFILE\s0\fR مسیر فایل پایگاه‌داده‌ی گواهی‌های کلاینت \s-1SSL\s0 کدگذاری‌شده با \s-1PEM\s0 را تعیین می‌کند. در صورت تنظیم این گزینه، احراز هویت با گواهی کلاینت فعال خواهد شد. .PP \&\fI\s-1CACERTIFICATEFILE\s0\fR مسیر فایل کدگذاری‌شده با \s-1PEM\s0 حاوی گواهی‌های مرجع صدور گواهی (\s-1CA\s0) را تعیین می‌کند. در صورت عدم استفاده از این گزینه، Monit از گواهی‌های \s-1CA\s0 پیش‌فرض OpenSSL استفاده می‌کند (می‌توان با اجرای دستور \fIopenssl version \-d\fR گواهی‌های پیش‌فرض \s-1CA\s0 را به دست آورد). در بسیاری از توزیع‌ها، تنظیمات گواهی‌های \s-1SSL\s0 و \s-1CA\s0 از پیش انجام شده است و معمولاً نیازی به استفاده از این گزینه نیست. .PP \&\fI\s-1CACERTIFICATEPATH\s0\fR مسیر دایرکتوری حاوی گواهی‌های مرجع صدور گواهی (\s-1CA\s0) را مشخص می‌کند. در صورت عدم استفاده از این گزینه، Monit از گواهی‌های \s-1CA\s0 پیش‌فرض OpenSSL استفاده خواهد کرد. در بسیاری از توزیع‌ها، تنظیمات گواهی‌های \s-1SSL\s0 و \s-1CA\s0 از پیش پیکربندی شده است و معمولاً نیازی به استفاده از این گزینه نیست. .PP عبارت گزینه‌های \s-1SSL\s0 به طور سراسری بر تمام اتصالات \s-1SSL/TLS\s0 برقرار شده از طریق Monit اعمال می‌شود. همچنین گزینه‌های \s-1SSL\s0 را می‌توان درون یک بررسی محلی، در تنظیمات \fImailserver\fR یا در عبارت \fImmonit\fR نیز تنظیم کرد که در این صورت تنظیمات سراسری را بازنویسی یا گسترش خواهند داد. .PP برای تعیین گزینه‌های سراسری \s-1SSL\s0، این عبارت را نزدیک به ابتدای فایل \fI.monitrc\fR خود قرار دهید: .PP .Vb 1 \& set ssl options {...} .Ve .PP در اینجا مثالی از تنظیم هم‌زمان گزینه‌های سراسری و محلی \s-1SSL\s0 ارائه شده است: .PP .Vb 5 \& # 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\*(Aqs certificate (override global setting) \& check host example2 with address example2.com \& if failed \& port 443 \& protocol https \& with ssl options {verify: disable} \& then alert .Ve.SH "حالت FIPS (FIPS MODE)" .IX Header "FIPS MODE" برای فعال‌سازی حالت \s-1FIPS\s0 (به شرطی که کتابخانهٔ OpenSSL شما از آن پشتیبانی کند)، این دستور را به فایل کنترلی Monit اضافه کنید: .PP .Vb 1 \& SET FIPS .Ve .SH "سرویس MONIT HTTPD (MONIT HTTPD)" .IX Header "MONIT HTTPD" در صورت تعیین در فایل کنترلی، Monit با پشتیبانی از \s-1HTTP\s0 شروع به کار خواهد کرد. سپس می‌توانید از \s-1CLI\s0 مربوط به Monit برای شروع و متوقف کردن سرویس‌ها، غیرفعال یا فعال کردن پایش سرویس‌ها و همچنین مشاهده وضعیت هر سرویس استفاده کنید. .PP اگر پشتیبانی از \s-1HTTP\s0 به‌جای سوکت یونیکس (Unix Socket) بر بستر \s-1TCP\s0 فعال شده باشد، می‌توانید داشبورد اطلاعاتی Monit را در مرورگر وب خود نیز مشاهده کنید. .PP توجه داشته باشید که در صورت غیرفعال بودن پشتیبانی از \s-1HTTP\s0، عملکرد رابط \s-1CLI\s0 مربوط به Monit کاهش خواهد یافت، زیرا بیشتر دستورات \s-1CLI\s0 (مانند \*(L"monit status\*(R") برای ارتباط با فرایند پس‌زمینهٔ Monit به رابط \s-1HTTP\s0 نیاز دارند. اکیداً توصیه می‌کنیم پشتیبانی از \s-1HTTP\s0 را فعال بگذارید. اگر نگران مسائل امنیتی هستید، رابط \s-1HTTP\s0 را تنها به localhost متصل (bind) کنید یا از Unix Socket استفاده نمایید تا Monit از خارج سیستم در دسترس نباشد. .SS "سوکت یونیکس (\s-1UNIX SOCKET\s0)" .IX Subsection "UNIX SOCKET" ساختار دستوری برای Unix Socket: .PP .Vb 5 \& SET HTTPD UNIXSOCKET \& [UID ] \& [GID ] \& [PERMISSION ] \& ALLOW + .Ve .PP مثال: .PP .Vb 2 \& set httpd unixsocket /var/run/monit.sock \& allow username:password .Ve .PP \&\fB\s-1UNIXSOCKET\s0\fR مسیری به Unix Socket که Monit باید به آن متصل شده (bind) و روی آن گوش دهد (listen) را تنظیم می‌کند. .PP \&\fB\s-1UID\s0\fR مالک سوکت (اختیاری، به‌طور پیش‌فرض کاربری است که Monit را اجرا می‌کند). .PP \&\fB\s-1GID\s0\fR گروه سوکت (اختیاری، به‌طور پیش‌فرض گروه اصلی کاربری است که Monit را اجرا می‌کند). .PP \&\fB\s-1PERMISSION\s0\fR مجوزهای دسترسی سوکت \- حالت هشت‌هشتی (octal) مطلق (اختیاری، به‌طور پیش‌فرض \s-1UMASK\s0 فرایند اعمال می‌شود). .SS "درگاه TCP (\s-1TCP PORT\s0)" .IX Subsection "TCP PORT" ساختار دستوری برای درگاه \s-1TCP\s0: .PP .Vb 4 \& SET HTTPD PORT \& [ADDRESS ] \& [[with] SSL {pemfile: }] \& ALLOW + .Ve .PP \&\fB\s-1PORT\s0\fR درگاهی را تنظیم می‌کند که Monit باید به آن متصل شده و روی آن گوش دهد. Monit معمولاً روی درگاه 2812 راه‌اندازی می‌شود. مثال: .PP .Vb 2 \& set httpd port 2812 \& allow username:password .Ve .PP اکنون می‌توانید پس از وارد کردن نام کاربری و گذرواژه به‌عنوان اطلاعات احراز هویت، از برای دسترسی به رابط وب Monit از طریق مرورگر استفاده کنید. چنانچه گذرواژه شامل نویسه‌های خاصی مانند \*(L"p@ssw:r#\*(R" باشد، ممکن است نیاز باشد آن را داخل گیومه دوتایی قرار دهید. .PP \&\fB\s-1ADDRESS\s0\fR باعث می‌شود Monit تنها روی یک رابط شبکهٔ خاص گوش دهد. برای مثال، اگر \fIنمی‌خواهید\fR رابط وب Monit را در معرض شبکه قرار دهید، آن را تنها به localhost متصل کنید. در صورت استفاده نشدن از گزینهٔ \s-1ADDRESS\s0، نرم‌افزار Monit اتصال‌ها را روی تمام آدرس‌ها خواهد پذیرفت: .PP .Vb 4 \& set httpd \& port 2812 \& use address 127.0.0.1 \& allow username:password .Ve .PP بخش \s-1HTTP\s0 در Monit روی \s-1TCP\s0 از هر دو پروتکل \s-1IP\s0 نسخهٔ 4 و 6 پشتیبانی می‌کند. این پشتیبانی شفاف بوده و نیازی به هیچ پیکربندی خاصی ندارد. اگر \fIaddress\fR برای اتصال مشخص \fBنشده\fR باشد، مانند این مثال: .PP .Vb 3 \& set httpd \& port 2812 \& allow ... .Ve .PP نرم‌افزار Monit روی همهٔ رابط‌ها، در صورت دردسترس بودن هم IPv4 و هم IPv6، به درگاه 2812 متصل شده و به آن گوش خواهد داد. برای وادار کردن \s-1HTTP\s0 در Monit به این‌که تنها روی \s-1IP\s0 نسخهٔ 6 گوش دهد و اتصالات آن را بپذیرد، یک آدرس IPv6 مشخص کنید: .PP .Vb 4 \& set httpd \& port 2812 \& use address "fe80::222:19ff:fe53:6c59" \& allow ... .Ve .PP مشابهاً، برای وادار کردن \s-1HTTP\s0 در Monit به این‌که تنها روی \s-1IP\s0 نسخهٔ 4 گوش دهد و اتصالات آن را بپذیرد، یک آدرس IPv4 مشخص کنید: .PP .Vb 4 \& set httpd \& port 2812 \& use address 62.109.39.247 \& allow ... .Ve .PP \fIتنظیمات \s-1SSL\s0\fR .IX Subsection "SSL settings" .PP \&\fB\s-1SSL\s0\fR قابلیت \s-1SSL/TLS\s0 را برای رابط وب Monit فعال می‌کند. برای فهرست کامل گزینه‌های \s-1SSL\s0، بخش گزینه‌ها را ببینید. .PP \&\fI\s-1PEMFILE\s0\fR مسیر فایل با کدگذاری \s-1PEM\s0 را تعیین می‌کند که شامل کلید خصوصی و گواهی کارساز (سرور) است. این فایل باید در مکانی امن روی سیستم‌فایل ذخیره شود و مجوزهای سخت‌گیرانه‌ای داشته باشد (نه بیشتر از 0700). .PP به‌عنوان جایگزین، \fI\s-1PEMCHAIN\s0\fR و \fI\s-1PEMKEY\s0\fR مسیر زنجیرهٔ گواهی و فایل کلید خصوصی مجزا با کدگذاری \s-1PEM\s0 را مشخص می‌کنند. فایل کلید باید در مکانی امن روی سیستم‌فایل ذخیره شود و مجوزهای دسترسی سخت‌گیرانه‌ای داشته باشد (نه بیشتر از 0700). .PP مثال برای استفاده از pemfile: .PP .Vb 6 \& set httpd \& port 2812 \& with ssl { \& pemfile: /etc/ssl/certs/monit.pem \& } \& allow myuser:mypassword .Ve .PP مثال برای استفاده از زنجیره گواهی و کلید مجزا: .PP .Vb 7 \& set httpd \& port 2812 \& with ssl { \& pemchain: /etc/ssl/certs/monit.chain.pem \& pemkey: /etc/ssl/certs/monit.key.pem \& } \& allow myuser:mypassword .Ve .PP اکنون می‌توانید از برای دسترسی به کارساز وب Monit از طریق یک اتصال رمزنگاری‌شده با \s-1TLS\s0 استفاده کنید. .PP نکتهٔ گواهی‌های کارساز خودامضاشده (self-signed): رابط \s-1CLI\s0 در Monit بر پایهٔ ساختار کلاینت-سرور عمل می‌کند و از \s-1HTTP GUI\s0 در Monit برای دریافت وضعیت از دیمن Monit و ارسال دستوراتی مانند start/stop به آن بهره می‌برد. از آن‌جا که گواهی‌های خودامضاشده به‌طور پیش‌فرض به دلایل امنیتی رد می‌شوند، \s-1CLI\s0 کار نخواهد کرد مگر آن‌که با استفاده از گزینهٔ \fI\s-1SELFSIGNED: ALLOW\s0\fR صراحتاً اجازه آن را صادر کنید: .PP .Vb 7 \& set httpd \& port 2812 \& with ssl { \& pemfile: /etc/ssl/certs/monit.pem \& selfsigned: allow \& } \& allow myuser:mypassword .Ve .PP \&\fB\s-1CLIENTPEMFILE\s0\fR احراز هویت مبتنی بر گواهی کلاینت را فعال کرده و مسیر فایل پایگاه‌داده با کدگذاری \s-1PEM\s0 را مشخص می‌کند که شامل فهرستی از گواهی‌های مجاز کلاینت است. کلاینت متصل‌شونده باید گواهی شناخته‌شده‌ای برای Monit (فهرست‌شده در \fIclientpemfile\fR) ارائه دهد، در غیر این صورت رد خواهد شد. این فایل همچنین باید شامل تمامی گواهی‌های \s-1CA\s0 لازم باشد. به‌طور پیش‌فرض گواهی‌های کلاینت خودامضاشده به دلایل امنیتی \fBرد می‌شوند\fR؛ اگر می‌خواهید به گواهی‌های کلاینت خودامضاشده اجازه دهید (فقط برای آزمایش توصیه می‌شود)، باید با استفاده از گزینهٔ \fB\s-1SELFSIGNED: ALLOW\s0\fR صراحتاً اجازهٔ آن را صادر کنید (مثال بالا را ببینید). برای نحوهٔ وارد کردن گواهی کلاینت به مرورگر خود، به مستندات مرورگرتان مراجعه کنید. .PP مثال: .PP .Vb 6 \& set httpd \& port 2812 \& with SSL { \& pemfile: /etc/ssl/certs/monit.pem \& clientpemfile: /etc/ssl/certs/monit\-client.pem \& } .Ve.SS "امضای نسخه Monit (Monit version signature)" .IX Subsection "Monit version signature" از \&\fB\s-1SIGNATURE\s0\fR می‌توان برای پنهان کردن نسخه Monit از سرآیند پاسخ \&\s-1HTTP\s0 و صفحه‌های خطا استفاده کرد. برای مثال: .PP .Vb 4 \& set httpd \& port 2812 \& signature disable \& allow myuser:mypassword .Ve .SS "احراز هویت (Authentication)" .IX Subsection "Authentication" دسترسی به رابط وب Monit اساساً از طریق گزینهٔ \&\fB\s-1ALLOW\s0\fR کنترل می‌شود که برای تعیین احراز هویت و مجاز کردن اتصال کلاینت‌های بخصوص به کار می‌رود. .PP در صورت استفاده از رابط خط فرمان Monit، حداقل یک گذرواژهٔ متن آشکار (cleartext) لازم است (به زیر مراجعه کنید)، در غیر این صورت رابط خط فرمان Monit قادر نخواهد بود به رابط وب Monit متصل شود. .PP کلاینت‌هایی که برای اتصال به Monit تلاش می‌کنند، اما نام کاربری و/یا گذرواژهٔ نادرستی ارائه می‌دهند، همراه با نشانی IP آن‌ها ثبت (log) می‌شوند. .PP \fIگواهی‌های کلاینت (Client certificates)\fR .IX Subsection "Client certificates" .PP این روش، یک سازوکار احراز هویت قوی است و از گواهی‌های کلاینت \s-1HTTPS\s0 برای بررسی اصالت کلاینت متصل‌شونده استفاده می‌کند. کلاینت‌ها باید یک گواهی کلید عمومی داشته باشند که برای Monit شناخته‌شده باشد. کلاینت باید روی بستر \s-1SSL\s0 به Monit متصل شود و Monit از کلاینت درخواست ارسال گواهی‌اش را می‌کند. پس از دریافت گواهی، Monit آن را با گواهی‌های موجود در فایل \&\fI\s-1CLIENTPEMFILE\s0\fR مقایسه می‌کند. در صورت وجود گواهی کلاینت در این فایل، دسترسی داده می‌شود. برای جزئیات به تنظیمات \s-1SSL\s0 مراجعه کنید. .PP \fIاحراز هویت پایه (Basic Authentication)\fR .IX Subsection "Basic Authentication" .PP نرم‌افزار Monit از Basic Authentication همان‌طور که در \s-1RFC 2617\s0 شرح داده شده، پشتیبانی می‌کند. .PP به طور خلاصه؛ یک سرور، کلاینت (مثلاً یک مرورگر) را به چالش می‌کشد تا اطلاعات احراز هویت (نام کاربری و گذرواژه) را ارسال کند و در صورت پذیرش، سرور اجازهٔ دسترسی کلاینت به سند درخواستی را صادر می‌کند. .PP بزرگ‌ترین نقطه ضعف Basic Authentication این است که نام کاربری و گذرواژه به صورت متن آشکار روی شبکه ارسال می‌شوند (یعنی با کدگذاری base64). از این رو توصیه می‌شود از این روش احراز هویت استفاده نکنید مگر اینکه Monit را همراه با پشتیبانی از \fIssl\fR اجرا کنید. با ssl، استفاده از Basic Authentication ایمن است زیرا \fIتمام\fR داده‌های \s-1HTTP\s0، از جمله سرآیندهای Basic Authentication، رمزگذاری خواهند شد. .PP نام کاربری و گذرواژهٔ متن آشکار (Cleartext user and password) .IX Subsection "Cleartext user and password" .PP اگر یک عبارت allow شامل نام کاربری و گذرواژه‌ای باشد که با یک نویسهٔ ':' از هم جدا شده‌اند، Monit از Basic Authentication استفاده خواهد کرد. .PP نکته: نویسه‌های خاص قابل استفاده هستند، اما برای نویسه‌های غیرالفبایی-عددی، گذرواژه باید داخل گیومه قرار گیرد. .PP شیوه‌نگارش: .PP .Vb 1 \& ALLOW : .Ve .PP \fIفهرست مجاز میزبان‌ها و شبکه‌ها (Host and network allow list)\fR .IX Subsection "Host and network allow list" .PP نرم‌افزار Monit یک فهرست کنترل دسترسی از میزبان‌ها و شبکه‌های مجاز برای اتصال را نگهداری می‌کند. شما می‌توانید هر تعداد میزبان که مایلید بیفزایید، اما فقط میزبان‌هایی با یک نام دامنهٔ معتبر یا نشانی \s-1IP\s0 آن مجاز هستند. .PP نرم‌افزار Monit برای بررسی هر میزبانی که سعی در اتصال دارد، از یک نام‌کارساز (name server) استعلام می‌گیرد. اگر میزبانی (کلاینت) برای اتصال تلاش کند، اما در فهرست دسترسی یافت نشود یا نام آن تحلیل نشود، Monit فوراً اتصال به کلاینت را قطع خواهد کرد. .PP مثال فایل کنترلی: .PP .Vb 6 \& 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 .Ve .PP کلاینت‌هایی که در فهرست allow ذکر نشده‌اند و برای اتصال به Monit تلاش کنند، دسترسی‌شان رد شده و همراه با نشانی IP آن‌ها ثبت می‌شوند. .PP \s-1PAM\s0 .IX Subsection "PAM" .PP از \&\s-1PAM\s0 در سکوهایی که \&\s-1PAM\s0 را ارائه می‌دهند (مانند Linux،‏ macOS،‏ FreeBSD و NetBSD) پشتیبانی می‌شود. .PP شیوه‌نگارش: .PP .Vb 1 \& ALLOW @ .Ve .PP که در آن \f(CW\*(C`group\*(C'\fR نام گروهی است که اجازهٔ دسترسی به رابط وب Monit را دارد. نرم‌افزار Monit از یک سرویس \s-1PAM\s0 به نام \fImonit\fR برای احراز هویت \s-1PAM\s0 استفاده می‌کند؛ برای دستورالعمل‌های دقیق دربارهٔ نحوهٔ تنظیم سرویس \s-1PAM\s0 و افزایه‌های احراز هویت \s-1PAM\s0، به صفحهٔ راهنمای \s-1PAM\s0 مراجعه کنید. .PP نمونه سرویس \s-1PAM\s0 برای Monit در macOS (ذخیره به عنوان فایل \&\*(L"/etc/pam.d/monit\*(R"): .PP .Vb 8 \& # 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 .Ve .PP و سرویس مشابه \s-1PAM\s0 برای Monit در Linux (ذخیره به عنوان فایل \&\*(L"/etc/pam.d/monit\*(R"): .PP .Vb 6 \& # 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 .Ve .PP یک پیکربندی \f(CW\*(C`monitrc\*(C'\fR که تنها به گروه‌های \f(CW\*(C`admin\*(C'\fR و \f(CW\*(C`staff\*(C'\fR که از طریق \&\s-1PAM\s0 احراز هویت شده‌اند، اجازهٔ دسترسی به رابط وب را می‌دهد: .PP .Vb 4 \& set httpd \& port 2812 \& allow @admin \& allow @staff readonly .Ve .PP فایل htpasswd .IX Subsection "htpasswd file" .PP به‌عنوان جایگزین می‌توانید اطلاعات کاربری را در یک فایل با قالب‌بندی \f(CW\*(C`htpasswd\*(C'\fR ذخیره کنید (یک ورودی \fIuser:passwd\fR در هر سطر)، به این صورت: \fIallow [cleartext|crypt|md5] /path [users]\fR. حالت پیش‌فرض، گذرواژه‌های متن آشکار است. در صورتی که گذرواژه‌ها چکیده‌سازی (digest) شده باشند، مشخص کردن روش رمزنگاری ضروری است. اگر مایل نیستید تمام کاربران فایل گذرواژه به Monit دسترسی داشته باشند، می‌توانید فقط کاربرانی را که باید دسترسی داشته باشند در عبارت allow مشخص کنید. در غیر این صورت، تمام کاربران اضافه می‌شوند. .PP مثال ۱: .PP .Vb 2 \& set httpd port 2812 \& allow md5 /etc/httpd/htpasswd john paul ringo george .Ve .PP اگر از این روش همراه با یک فهرست میزبان استفاده کنید، تنها کلاینت‌های متعلق به میزبان‌های فهرست‌شده مجاز به اتصال به کارساز \s-1HTTP\s0 در Monit خواهند بود و از هر کلاینت خواسته می‌شود یک نام کاربری و گذرواژه ارائه دهد. .PP مثال ۲: .PP .Vb 4 \& set httpd port 2812 \& allow localhost \& allow 10.1.1.1 \& allow hauk:"passw@rd" .Ve .PP اگر تنها می‌خواهید از Basic Authentication استفاده کنید، کافی است ورودی‌های allow را با نام کاربری و گذرواژه یا فایل‌های گذرواژه همان‌طور که در مثال ۱ بالا آمده مشخص کنید. .PP کاربران فقط‌خواندنی (Read-only users) .IX Subsection "Read-only users" .PP علاوه بر این، امکان تعریف برخی کاربران به عنوان فقط‌خواندنی (read-only) وجود دارد. یک کاربر فقط‌خواندنی می‌تواند صفحات وب Monit را بخواند، اما به دکمه‌ها دسترسی \fIنخواهد داشت\fR و نمی‌تواند سرویسی را از طریق رابط وب تغییر دهد. .PP .Vb 5 \& set httpd port 2812 \& allow admin:password \& allow hauk:password read\-only \& allow @admins \& allow @users read\-only .Ve .PP یک کاربر با استفاده از کلیدواژهٔ \fIread-only\fR در \fBبعد\fR از username:password به عنوان فقط‌خواندنی تنظیم می‌شود. در مثال بالا، کاربر \fIhauk\fR به عنوان یک کاربر فقط‌خواندنی تعریف شده است، در حالی که کاربر \fIadmin\fR تمام حقوق دسترسی را دارد..PP سرور http فقط‌خواندنی .IX Subsection "Read-only http server" .PP در نهایت این امکان وجود دارد که کل رابط وب را به حالت فقط‌خواندنی محدود کنید. تمام کاربران، صرف‌نظر از اینکه با کلیدواژهٔ \fIread-only\fR یا بدون آن تعریف شده باشند، تنها مجوزهایی را خواهند داشت که در بالا شرح داده شد. هنگام استفاده از این تنظیم، توصیه می‌شود یک \fB\s-1UNIXSOCKET\s0\fR نیز پیکربندی کنید؛ در غیر این صورت، \s-1CLI\s0 مربوط به Monit کار \fBنخواهد\fR کرد. .PP .Vb 5 \& set httpd \& port 2812 \& read\-only \& unixsocket /run/monit.socket \& allow @users .Ve .SH "پیام‌های هشدار (ALERT MESSAGES)" .IX Header "ALERT MESSAGES" برنامهٔ Monit در شرایط زیر هشدار صادر خواهد کرد: .PP .Vb 10 \& 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) شود .Ve .PP برای دریافت هشدار از طریق رایانامه، مقصد هشدار را با استفاده از دستور سراسری \f(CW\*(C`set alert\*(C'\fR (برای همهٔ سرویس‌ها) یا دستور \f(CW\*(C`alert\*(C'\fR در زمینهٔ مدخل یک سرویس (برای یک سرویس منفرد) مشخص کنید. .SS "تنظیم گیرندهٔ هشدار (Setting an alert recipient)" .IX Subsection "Setting an alert recipient" در صورت وقوع یک رویداد، Monit هشداری ارسال خواهد کرد. دو نوع دستور هشدار وجود دارد: سراسری و محلی. .PP نحو دستور سراسری: .PP .Vb 1 \& SET ALERT mail\-address [[NOT] {event, ...}] [REMINDER cycles] .Ve .PP مثال: .PP .Vb 1 \& set alert foo@bar .Ve .PP در صورت وقوع هر رویدادی در هر سرویسی، یک رایانامهٔ پیش‌فرض به نشانی foo@bar ارسال خواهد کرد. .PP اگر می‌خواهید پیام‌های هشدار را به نشانی‌های رایانامهٔ بیشتری ارسال کنید، برای هر نشانی یک دستور \f(CW\*(C`set alert \*(Aqemail\*(Aq\*(C'\fR اضافه نمایید. .PP همچنین می‌توان از دستور هشدار محلی در زمینهٔ بررسی یک سرویس برای فعال‌سازی هشدار تنها برای همان سرویس استفاده کرد: .PP .Vb 1 \& ALERT mail\-address [[NOT] {event, ...}] [REMINDER cycles] .Ve .PP مثال هشدار محلی: .PP .Vb 4 \& 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 .Ve .PP می‌توانید دستورهای هشدار سراسری و محلی را با یکدیگر ترکیب کنید. در صورت وجود تعارض، هشدار محلی اولویت داشته و دستور سراسری را لغو (override) می‌کند. .PP \fIتنظیم فیلتر رویداد (Setting an event filter)\fR .IX Subsection "Setting an event filter" .PP اگر می‌خواهید پیام هشدار فقط برای رویدادهای خاصی ارسال شود، آن‌ها را در یک بلوک \f(CW\*(C`{event, ...}\*(C'\fR فهرست کنید، مانند: .PP .Vb 1 \& set alert foo@bar only on { timeout, nonexist } .Ve .PP همچنین می‌توان با قرار دادن کلمهٔ \f(CW\*(C`not\*(C'\fR در ابتدای فهرست، آن را نفی کرد تا هشدارها برای همهٔ رویدادها \fIبه‌جز\fR موارد فهرست‌شده ارسال شوند. برای نمونه، جهت دریافت تمام هشدارها به‌جز اعلان مربوط به شروع و توقف برنامهٔ Monit: .PP .Vb 1 \& set alert foo@bar but not on { instance } .Ve .PP در اینجا فهرستی از تمام انواع رویدادهای ممکن که توسط Monit صادر می‌شوند آورده شده است. مقادیر ستون اول را می‌توان در فهرست فیلتر رویداد که در بالا به آن اشاره شد استفاده کرد: .PP .Vb 10 \& 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" .Ve .PP هر گیرندهٔ هشدار می‌تواند فیلتر مخصوص به خود را داشته باشد، برای نمونه: .PP .Vb 3 \& set alert foo@bar { nonexist, timeout, resource, icmp, connection } \& set alert security@bar on { checksum, permission, uid, gid } \& set alert admin@bar .Ve .PP \fIتنظیم یادآور خطا (Setting an error reminder)\fR .IX Subsection "Setting an error reminder" .PP برنامهٔ Monit به‌طور پیش‌فرض در صورت شکست یک سرویس تنها \fIیک\fR اعلان، و در هنگام بازیابی آن نیز اعلان دیگری ارسال می‌کند. اگر می‌خواهید از باقی ماندن سرویس در وضعیت شکست‌خورده مطلع شوید، می‌توانید از گزینهٔ reminder در دستور هشدار استفاده کنید: .PP .Vb 1 \& SET ALERT mail\-address [WITH] REMINDER [ON] number [CYCLES] .Ve .PP برای نمونه، اگر می‌خواهید در صورت تداوم وضعیت شکست‌خوردهٔ یک سرویس در هر دهمین چرخه به شما اطلاع داده شود، می‌توانید از دستور زیر استفاده کنید: .PP .Vb 1 \& alert foo@bar with reminder on 10 cycles .Ve .PP به همین ترتیب، اگر می‌خواهید در هر چرخهٔ ناموفق اعلان دریافت کنید، می‌توانید از این دستور استفاده نمایید: .PP .Vb 1 \& alert foo@bar with reminder on 1 cycle .Ve.SS "غیرفعال‌سازی هشدارها برای برخی سرویس‌ها" .IX Subsection "Disabling alerts for some service" برای نادیده گرفتن هشدارها برای یک کاربر و سرویس مشخص، عبارت \f(CW\*(C`noalert\*(C'\fR را در بافت بررسی سرویس اضافه کنید. .PP .Vb 1 \& NOALERT mail\-address .Ve .PP مثال (ارسال تمام هشدارها به foo@bar به‌جز برای سرویس p3): .PP .Vb 1 \& 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 .Ve .SS "قالب پیام" .IX Subsection "Message format" قالب پیام هشدار را می‌توان با استفاده از عبارت \f(CW\*(C`set mail\-format\*(C'\fR تغییر داد: .PP .Vb 1 \& SET MAIL\-FORMAT {mail\-format} .Ve .PP مثال: .PP .Vb 8 \& set mail\-format { \& from: Monit Support \& reply\-to: support@domain.com \& subject: $SERVICE $EVENT at $DATE \& message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION. \& Yours sincerely, \& monit \& } .Ve .PP گزینهٔ \fIfrom:\fR نشانی ایمیل فرستنده برای هشدارهای Monit است. نام فرستنده اختیاری است، اما در صورت استفاده، مستلزم آن است که نشانی ایمیل پس از آن همانند مثال بالا در براکت‌های زاویه‌دار (<>) محصور شود. .PP گزینهٔ \fIreply-to:\fR می‌تواند برای تنظیم هدر ایمیل reply-to، به‌طور اختیاری همراه با یک نام، استفاده شود. .PP گزینهٔ \fIsubject:\fR موضوع پیام را تعیین می‌کند و باید تنها در \&\fIیک\fR خط باشد. .PP گزینهٔ \fImessage:\fR متن اصلی ایمیل را تعیین می‌کند. این گزینه همیشه باید آخرین گزینه در یک عبارت mail-format باشد. متن ایمیل می‌تواند هر چقدر که لازم است طولانی باشد، اما \fIنباید\fR شامل نویسهٔ بستن بلوک یعنی \(aq}\(aq باشد. .PP نیازی به استفاده از تمام گزینه‌ها نیست، تنها گزینه‌ای که می‌خواهید بازنویسی شود کفایت می‌کند. به عنوان مثال، برای تغییر سراسری تنها نشانی فرستنده: .PP .Vb 1 \& set mail\-format { from: bofh@foo.bar } .Ve .PP موضوع و بدنه می‌توانند شامل متغیرهای \f(CW$NAME\fR باشند که توسط Monit بسط داده می‌شوند. در اینجا فهرستی از متغیرهایی که می‌توان هنگام ساخت یک پیام هشدار استفاده کرد آورده شده است: .IP "\(bu" 4 \&\fI\f(CI$EVENT\fI\fR .Sp رشته‌ای که رویداد رخ‌داده را شرح می‌دهد. .IP "\(bu" 4 \&\fI\f(CI$SERVICE\fI\fR .Sp نام سرویس .IP "\(bu" 4 \&\fI\f(CI$DATE\fI\fR .Sp زمان و تاریخ کنونی (به سبک تاریخ \s-1RFC 822\s0). .IP "\(bu" 4 \&\fI\f(CI$HOST\fI\fR .Sp نام میزبانی که Monit روی آن در حال اجرا است .IP "\(bu" 4 \&\fI\f(CI$ACTION\fI\fR .Sp نام کنشی که توسط Monit انجام شده است. .IP "\(bu" 4 \&\fI\f(CI$DESCRIPTION\fI\fR .Sp شرح شرایط خطا .SS "تنظیم سرور ایمیل برای تحویل هشدارها" .IX Subsection "Setting a mail server for alert delivery" سرور ایمیلی که Monit باید برای ارسال پیام‌های هشدار از آن استفاده کند با یک عبارت \f(CW\*(C`set mailserver\*(C'\fR تعریف می‌شود: .PP .Vb 9 \& SET MAILSERVER \& \& [PORT number] \& [USERNAME string] [PASSWORD string] \& [using SSL [with options {...}] \& [CERTIFICATE CHECKSUM [MD5|SHA1|SHA256] ], \& ... \& [with TIMEOUT X SECONDS] \& [using HOSTNAME hostname] .Ve .PP می‌توان چند سرور ایمیل را با استفاده از یک فهرست جداشده با کاما تعیین کرد. اگر Monit نتواند به سرور اول متصل شود، سرور بعدی در فهرست را امتحان می‌کند و به همین ترتیب ادامه می‌دهد. .PP عبارت port امکان بازنویسی درگاه پیش‌فرض \s-1SMTP\s0 را فراهم می‌کند (465 برای \s-1SSL،\s0 یا 25 برای \s-1TLS\s0 و اتصالات غیرامن). .PP برنامهٔ Monit از \s-1AUTH PLAIN\s0 و \s-1AUTH LOGIN\s0 برای احراز هویت \s-1SMTP\s0 پشتیبانی می‌کند. می‌توانید با استفاده از گزینه‌های \s-1USERNAME\s0 و \&\s-1PASSWORD\s0 نام کاربری و گذرواژه را تعیین کنید. .PP می‌توانید گزینه‌های \s-1SSL/TLS\s0 را برای اتصال تنظیم کرده و همچنین چک‌سام گواهی \s-1SSL\s0 را بررسی نمایید. .PP مهلت زمانی پیش‌فرض اتصال ۳۰ ثانیه است. می‌توانید این محدودیت را با استفاده از گزینهٔ \s-1TIMEOUT\s0 تغییر دهید. .PP مثال (تنظیم دو سرور ایمیل برای failover): .PP .Vb 1 \& set mailserver smtp.gmail.com, smtp.other.host .Ve .PP به‌طور پیش‌فرض، Monit از نام میزبان محلی در \s-1SMTP HELO/EHLO\s0 و در هدر Message-ID استفاده می‌کند. می‌توانید با استفاده از گزینهٔ \s-1HOSTNAME\s0 این مورد را بازنویسی کنید..SS "صف رویداد (Event queue)" .IX Subsection "Event queue" اگر هیچ سرور ایمیلی در دسترس نباشد، Monit \fIمی‌تواند\fR رویدادها را برای تلاش مجدد تا زمان بازیابی سرور ایمیل، در فایل‌سیستم محلی صف‌بندی کند. .PP اگر Monit همراه با M/Monit استفاده شود، صف رویداد در صورت بروز مشکلات موقت، یک ذخیره‌ساز امن رویداد را برای M/Monit فراهم می‌آورد. .PP صف رویداد در برابر راه‌اندازی‌های مجدد Monit پایدار است و به شرطی که فایل‌سیستم زیرین نیز پایدار باشد، با راه‌اندازی مجدد سیستم نیز حفظ می‌شود. .PP به‌طور پیش‌فرض، این صف غیرفعال است و اگر مدیریت‌کنندهٔ هشدار ناموفق باشد، Monit پیام هشدار را نادیده گرفته و رها می‌کند. .PP برای فعال‌سازی صف رویداد، عبارت زیر را اضافه کنید: .PP .Vb 1 \& SET EVENTQUEUE BASEDIR [SLOTS ] .Ve .PP مقدار مسیر دایرکتوری‌ای است که رویدادها در آن ذخیره خواهند شد. .PP در صورت تمایل به محدود کردن اندازهٔ صف، می‌توانید از گزینهٔ slots برای ذخیرهٔ حداکثر تا \fInumber\fR پیام رویداد استفاده کنید. .PP مثال: .PP .Vb 1 \& set eventqueue basedir /var/monit slots 5000 .Ve .PP اگر بیش از یک نمونه از Monit را روی یک ماشین اجرا می‌کنید، \fBباید\fR از دایرکتوری‌های صف رویداد مجزا استفاده کنید. .SH "روش‌های سرویس (SERVICE METHODS)" .IX Header "SERVICE METHODS" هر سرویس می‌تواند متدهای \fIstart\fR، \fIstop\fR و \fIrestart\fR مرتبطی داشته باشد که Monit از آن‌ها برای اجرای عملیات روی سرویس استفاده کند. .PP نحو: .PP .Vb 4 \& [PROGRAM] = "program" \& [[AS] UID ] \& [[AS] GID ] \& [[WITH] TIMEOUT SECOND(S)] .Ve .PP اگر \f(CW\*(C`program\*(C'\fR یک اسکریپت شل باشد، باید با \f(CW\*(C`#!\*(C'\fR آغاز شود و ادامهٔ خط اول باید یک مفسر را برای برنامه مشخص کند؛ مانند \f(CW\*(C`#!/bin/sh\*(C'\fR. .PP همچنین \f(CW\*(C`program\*(C'\fR باید قابل اجرا باشد (برای مثال با حالت دسترسی 0755). .PP نوشتن مستقیم اسکریپت‌ها در \fIprogram\fR به این روش نیز امکان‌پذیر است: .PP .Vb 1 \& stop = "/bin/sh \-c \*(Aqkill \-s SIGTERM \`cat /var/run/process.pid\`\*(Aq" .Ve .PP به‌طور پیش‌فرض، برنامه با همان کاربری اجرا می‌شود که Monit تحت آن در حال اجرا است. اگر Monit با دسترسی ریشه (root) اجرا می‌شود، می‌توانید به صورت اختیاری \fI\s-1UID\s0\fR و \fI\s-1GID\s0\fR مورد نظر را که برنامهٔ اجراشده باید به آن‌ها تغییر یابد مشخص کنید. .PP مثال: .PP .Vb 3 \& 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" .Ve .PP در مورد بررسی فرایند، Monit حداکثر تا ۳۰ ثانیه برای پایان عملیات start/stop منتظر می‌ماند و پس از آن متوقف شده و خطایی گزارش می‌کند. می‌توانید این مهلت زمانی را با استفاده از گزینهٔ \fI\s-1TIMEOUT\s0\fR یا به‌طور سراسری با دستور set limits بازنویسی کنید. .PP مثال: .PP .Vb 3 \& 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" .Ve .SH "زمان بررسی سرویس (SERVICE POLL TIME)" .IX Header "SERVICE POLL TIME" سرویس‌ها به صورت منظم در بازهٔ زمانی تعریف‌شده توسط عبارت \f(CW\*(C`set daemon n\*(C'\fR بررسی می‌شوند. بررسی‌ها به همان ترتیبی که در فایل \f(CW\*(C`.monitrc\*(C'\fR نوشته شده‌اند انجام می‌گیرند، مگر این‌که وابستگی‌هایی بین سرویس‌ها تعریف شده باشد که در آن صورت سرویس‌های پیش‌نیاز ابتدا آزمایش می‌شوند. .PP امکان تغییر زمان‌بندی بررسی یک سرویس با استفاده از عبارت \&\f(CW\*(C`every\*(C'\fR وجود دارد. .PP سه حالت مختلف وجود دارد: .IP "۱. مضربی از چرخهٔ بررسی (A poll cycle multiple)" 4 .IX Item "1. A poll cycle multiple" .Vb 1 \& EVERY [number] CYCLES .Ve .IP "۲. سبک کران (Cron-style)" 4 .IX Item "2. Cron-style" .Vb 1 \& EVERY [cron] .Ve .IP "۳. سبک کران منفی یا عدم بررسی (Negative Cron-style)" 4 .IX Item "3. Negative Cron-style (do-not-check)" .Vb 1 \& NOT EVERY [cron] .Ve .PP یک رشته به سبک کران (cron-style) از ۵ فیلد تشکیل شده است که با فاصله‌های خالی از هم جدا می‌شوند. تمام فیلدها الزامی هستند: .PP .Vb 7 \& نام فیلد: | مقادیر مجاز: | نویسه‌های خاص: \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& 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) | * \- , / .Ve .PP نویسه‌های خاص: .PP .Vb 10 \& نویسه: | توضیحات: \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& * (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. .Ve .PP مثال ۱: بررسی یک‌بار به ازای هر دو چرخه .PP .Vb 2 \& check process nginx with pidfile /var/run/nginx.pid \& every 2 cycles .Ve .PP مثال ۲: اجرای یک گزارش (یک‌بار) در هر دوشنبه ساعت 08:15 .PP .Vb 4 \& check program weekly_report with \& path /var/monit/programs/weekly_report.sh \& every "15 8 * * 1" \& if status != 0 then alert .Ve .PP مثال ۳: بررسی در هر ۵ دقیقه .PP .Vb 2 \& check process app with pidfile /var/run/app.pid \& every "*/5 * * * *" .Ve .PP مثال ۴: بررسی هر ۱۵ دقیقه در طول ساعات کاری (۹ صبح تا ۵ بعدازظهر) در روزهای کاری هفته .PP .Vb 2 \& check process webapp with pidfile /var/run/webapp.pid \& every "*/15 9\-17 * * 1\-5" .Ve .PP مثال ۵: عدم اجرای بررسی‌ها در طول بازهٔ پشتیبان‌گیری (یکشنبه‌ها از ساعت ۰ تا ۳ بامداد). نکته: توصیه می‌کنیم به جای دقت در سطح دقیقه، از \*(L"not every\*(R" همراه با بازه‌های ساعتی/روزانه استفاده کنید؛ چرا که بررسی‌ها در خارج از بازهٔ استثنا، در هر چرخهٔ بررسی اجرا خواهند شد. .PP .Vb 2 \& check process mysqld with pidfile /var/run/mysqld.pid \& not every "* 0\-3 * * 0" .Ve .PP نکته دربارهٔ بسامد اجرا: .PP عبارت \*(L"every\*(R" با زمان‌بندی به سبک کران، از معناشناسی crontab پیروی می‌کند: Monit صرف‌نظر از تنظیم چرخهٔ بررسی، در زمان زمان‌بندی‌شده این بررسی را حداکثر یک‌بار در دقیقه اجرا خواهد کرد. برای مثال، اگر چرخهٔ بررسی ۳۰ ثانیه باشد و بررسی با عبارت \&\*(L"every '15 8 * * 1'\*(R" زمان‌بندی شده باشد، تنها یک‌بار در ساعت 08:15 روز دوشنبه اجرا می‌شود، نه دو بار در آن دقیقه. این رفتار یک‌بار-در-دقیقه برای وظایف زمان‌بندی‌شده‌ای که باید در زمان مشخصی اجرا شوند، مانند گزارش هفتگی در مثال ۲ بالا، ایده‌آل است..PP در مقابل، عبارت \*(L"not every\*(R" در هر چرخهٔ نظرسنجی (poll cycle) ارزیابی می‌شود که آن را برای تعریف بازه‌های نگهداری یا پشتیبان‌گیری ایده‌آل می‌سازد. برای نمونه، \*(L"not every '* 2\-5 * * *'\*(R" بررسی‌ها را در بازهٔ زمانی ۲ تا ۵ صبح نادیده می‌گیرد و در هر چرخهٔ نظرسنجی بررسی می‌کند که آیا باید صرف‌نظر کند یا ادامه دهد. این روش نسبت به زمان‌بندی cron در سطح دقیقه برای بازه‌های استثنا، کارآمدتر است. .PP ترکیب زمان‌بندی مبتنی بر چرخه و سبک cron: .PP اگر برای برخی سرویس‌ها از زمان‌بندی \f(CW\*(C`every\*(C'\fR به سبک cron استفاده می‌کنید، آگاه باشید که این کار ممکن است بر زمان‌بندی سرویس‌هایی که از \f(CW\*(C`every [number] cycles\*(C'\fR استفاده می‌کنند تأثیر بگذارد. تطابق با یک الگوی cron باعث بیدار شدن Monit برای اجرای بررسی زمان‌بندی‌شده می‌شود و این چرخهٔ نظرسنجی اضافی، شمارندهٔ چرخه را برای \fIتمام\fR سرویس‌ها به جلو می‌برد. برای نمونه، اگر سرویسی روی \&\f(CW\*(C`every "* * * * *"\*(C'\fR تنظیم شده باشد (بررسی در هر دقیقه)، Monit هر دقیقه بیدار می‌شود و سرویسی که با \f(CW\*(C`every 10 cycles\*(C'\fR پیکربندی شده است، سریع‌تر از حد انتظار به شمارش چرخهٔ خود می‌رسد. اگر به زمان‌بندی دقیق مبتنی بر زمان نیاز دارید، به جای \f(CW\*(C`every\*(C'\fR مبتنی بر چرخه، از \f(CW\*(C`every\*(C'\fR به سبک cron استفاده کنید. .SH "گروه‌های سرویس (SERVICE GROUPS)" .IX Header "SERVICE GROUPS" مدخل‌های سرویس در فایل پیکربندی کنترلی، \fImonitrc\fR، می‌توانند با عبارت \fIgroup\fR گروه‌بندی شوند. نحو آن به سادگی به صورت زیر است (کلمهٔ کلیدی با حروف بزرگ): .PP .Vb 1 \& GROUP groupname .Ve .PP با این عبارت می‌توان مدخل‌های سرویس مشابه را گروه‌بندی کرد و آن‌ها را به صورت یکپارچه مدیریت نمود. Monit توابعی را برای راه‌اندازی (start)، متوقف کردن (stop)، راه‌اندازی مجدد (restart)، پایش (monitor) و لغو پایش (unmonitor) یک گروه از سرویس‌ها به صورت زیر فراهم می‌کند: .PP برای شروع به کار یک گروه از سرویس‌ها از خط فرمان: .PP .Vb 1 \& monit \-g start .Ve .PP برای متوقف کردن یک گروه از سرویس‌ها: .PP .Vb 1 \& monit \-g stop .Ve .PP برای راه‌اندازی مجدد یک گروه از سرویس‌ها: .PP .Vb 1 \& monit \-g restart .Ve .PP یک سرویس می‌تواند با استفاده از بیش از یک عبارت group به چندین گروه افزوده شود: .PP .Vb 2 \& group www \& group filesystem .Ve .SH "حالت پایش سرویس (SERVICE MONITORING MODE)" .IX Header "SERVICE MONITORING MODE" برنامهٔ Monit از دو حالت پایش پشتیبانی می‌کند: \fIactive\fR و \fIpassive\fR. .PP نحو: .PP .Vb 1 \& MODE .Ve .PP در حالت \fIactive\fR، برنامهٔ Monit به صورت پیش‌کنشگر سرویس را پایش می‌کند و در صورت بروز مشکل، هشدار ارسال کرده و سرویس را مجدداً راه‌اندازی می‌نماید. حالت Active حالت پیش‌فرض است. .PP حالت \fIpassive\fR مشابه حالت \fIactive\fR است، با این تفاوت که در صورت خرابی سرویس، monit سعی \fBنخواهد کرد\fR با راه‌اندازی مجدد سرویس مشکل را حل کند و تنها هشدار صادر می‌کند. .SH "راه‌اندازی مجدد سیستم و شروع به کار سرویس (SYSTEM REBOOT AND SERVICE STARTUP)" .IX Header "SYSTEM REBOOT AND SERVICE STARTUP" برنامهٔ Monit از سه حالت راه‌اندازی مجدد پشتیبانی می‌کند: \fIstart\fR، \fInostart\fR و \fIlaststate\fR. .PP نحو: .PP .Vb 1 \& ONREBOOT .Ve .PP در حالت \fIstart\fR، برنامهٔ Monit همیشه پس از راه‌اندازی مجدد سیستم، سرویس را به صورت خودکار شروع می‌کند، حتی اگر پیش از راه‌اندازی مجدد متوقف شده باشد. این حالت پیش‌فرض است و زمانی که \fIonreboot\fR مشخص نشده باشد استفاده می‌شود. .PP در حالت \fInostart\fR، سرویس \fIهرگز\fR پس از راه‌اندازی مجدد سیستم به صورت خودکار شروع به کار نمی‌کند. این حالت برای راهکارهای با دسترسی‌پذیری بالا (HA) با کلاسترهای active/passive طراحی شده است. برای مثال، گروه سرویس \s-1HA،\s0 متشکل از یک نام مستعار \s-1IP\s0 متحرک و یک سرور برنامه، روی میزبان H1 اجرا شده است، میزبان H2 پشتیبان است و سازوکار ضربان قلب (heartbeat) بین هر دو میزبان فعال است. گروه سرویس \fI\s-1HA\s0\fR باید تنها روی یکی از گره‌ها راه‌اندازی شود. اگر H1 از کار بیفتد، H2 مدیریت گروه \s-1HA\s0 را بر عهده می‌گیرد. چنانچه H1 مجدداً راه‌اندازی شود، بسیار مهم است که تلاش نکند گروه \s-1HA\s0 را نیز راه‌اندازی کند؛ حتی با وجود اینکه این گروه پیش از خرابی روی H1 فعال بوده است، زیرا اکنون \s-1HA\s0 روی H2 در حال اجراست. .PP در حالت \fIlaststate\fR، وضعیت پایش سرویس پس از راه‌اندازی مجدد سیستم ماندگار خواهد بود. برای نمونه، اگر سرویسی پیش از راه‌اندازی مجدد فعال بوده باشد، پس از راه‌اندازی مجدد نیز فعال خواهد شد؛ اگر پیش از راه‌اندازی مجدد متوقف بوده باشد، پس از آن نیز شروع به کار نخواهد کرد و به همین ترتیب. .PP حالت پیش‌فرض \s-1ONREBOOT START\s0 می‌تواند به صورت سراسری لغو شود: .PP .Vb 1 \& SET ONREBOOT .Ve .SH "محدودیت راه‌اندازی مجدد سرویس (SERVICE RESTART LIMIT)" .IX Header "SERVICE RESTART LIMIT" برنامهٔ \&\fBMonit\fR یک سازوکار محدودیت راه‌اندازی مجدد را برای شرایطی که یک سرویس برای مدتی طولانی از شروع به کار یا پاسخ‌دهی سر باز می‌زند، فراهم می‌کند. .PP سازوکار محدودیت راه‌اندازی مجدد بر اساس تعداد دفعات راه‌اندازی مجدد سرویس و تعداد چرخه‌های نظرسنجی کار می‌کند. برای مثال، اگر یک سرویس \fIx\fR بار در طول \fIy\fR چرخهٔ نظرسنجی (که در آن \fIx\fR <= \fIy\fR) راه‌اندازی مجدد شده باشد، آنگاه Monit عملی را انجام خواهد داد (برای مثال لغو پایش سرویس). در صورت وقوع اتمام مهلت زمانی (timeout)، اگر دریافت این رویداد را ثبت کرده باشید، Monit یک پیام هشدار ارسال خواهد کرد. .PP نحو عبارت timeout به صورت زیر است (کلمات کلیدی با حروف بزرگ هستند): .PP .Vb 1 \& IF RESTART CYCLE(S) THEN .Ve .PP مقدار \fIaction\fR یا یکی از اقدامات عمومی است یا \&\s-1TIMEOUT\s0 (برای حفظ سازگاری با نسخه‌های گذشته، معادل اقدام \s-1UNMONITOR\s0 است). .PP در اینجا مثالی آورده شده است که در آن اگر سرویس ۲ بار در طول ۳ چرخه مجدداً راه‌اندازی شود، Monit پایش آن را لغو می‌کند: .PP .Vb 1 \& if 2 restarts within 3 cycles then unmonitor .Ve .PP برای اینکه Monit پس از غیرفعال شدن پایش، مجدداً سرویس را بررسی کند، دستور \f(CW\*(C`monit monitor servicename\*(C'\fR را از خط فرمان اجرا کنید. .PP مثالی برای تنظیم اجرای دستور سفارشی (exec) هنگام اتمام مهلت زمانی: .PP .Vb 1 \& if 5 restarts within 5 cycles then exec "/foo/bar" .Ve .PP مثالی برای متوقف کردن سرویس: .PP .Vb 1 \& if 7 restarts within 10 cycles then stop .Ve.SH "وابستگی‌های سرویس (SERVICE DEPENDENCIES)" .IX Header "SERVICE DEPENDENCIES" در صورت مشخص شدن در فایل پیکربندی، Monit می‌تواند پیش از آغاز (start)، توقف (stop)، پایش (monitoring) یا توقف پایش (unmonitoring) سرویس‌ها، وابستگی‌ها را بررسی کند. دستور وابستگی می‌تواند درون هر یک از مدخل‌های سرویس در فایل پیکربندی Monit به کار رود. .PP دستور زبان برای عبارت depend بسیار ساده است: .PP .Vb 1 \& DEPENDS on service[, service [,...]] .Ve .PP که در آن \fBservice\fR نام یک مدخل سرویسِ مورد بررسی است که در فایل \f(CW\*(C`.monitrc\*(C'\fR شما استفاده شده است، مانند \fBapache\fR یا \fBdatafs\fR. .PP می‌توانید بیش از یک نام سرویس از هر نوعی اضافه کنید یا بیش از یک دستور depend را در یک مدخل به کار ببرید. .PP سرویس‌های مشخص‌شده در دستور \fIdepend\fR در طول عملیات‌های stop/start/monitor/unmonitor بررسی خواهند شد. .PP اگر سرویسی متوقف شده یا پایش آن متوقف شود، هر سرویسی را که به آن وابسته است نیز متوقف کرده یا از حالت پایش خارج می‌کند. .PP اگر سرویس آغاز به کار کند، تمام سرویس‌هایی که این سرویس به آن‌ها وابسته است پیش از شروع این سرویس آغاز خواهند شد. اگر آغاز به کار سرویسی با شکست مواجه شود، سرویسِ دارای پیش‌نیاز آغاز \s-1نخواهد\s0 شد، اما به خاطر خواهد سپرد که باید آغاز شود و در چرخهٔ بعدی مجدداً تلاش خواهد کرد. .PP اگر سرویسی راه‌اندازی مجدد (restart) شود، ابتدا تمام سرویس‌های فعالی را که به آن وابسته هستند متوقف می‌کند و پس از این که خودش آغاز به کار کرد، دوباره تمام سرویس‌های وابسته‌ای را که پیش از راه‌اندازی مجدد فعال بودند آغاز می‌نماید. .PP در اینجا مثالی آورده شده است که در آن مدخل سرویس apache را طوری تنظیم می‌کنیم که به فایل باینری زیربنایی apache وابسته باشد. اگر این فایل باینری تغییر کند، یک هشدار ارسال شده و apache دیگر پایش نمی‌شود. دلیل این کار امنیت است و این‌که Monit نباید فایل باینریِ احتمالاً دستکاری‌شدهٔ apache را اجرا کند. .PP .Vb 6 \& (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 .Ve .PP مدخل نخست، مدخل فرایند برای apache است. خط دوم یک وابستگی میان این مدخل و مدخل سرویسی با نام httpd در خط ۵ برقرار می‌سازد. یک درخت وابستگی به این صورت عمل می‌کند: اگر اقدامی در شاخه‌ای پایین‌تر انجام شود، در درخت به سمت بالا انتشار می‌یابد و برای هر مدخل وابسته همان اقدام را اجرا می‌کند. در این حالت، اگر checksum در خط ۶ با شکست روبرو شود، یک اقدام stop اجرا شده و فایل باینری apache دیگر بررسی نخواهد شد. اما از آنجا که مدخل فرایند apache به مدخل httpd وابسته است، این مدخل نیز اقدام stop را اجرا خواهد کرد. به‌طور خلاصه، اگر آزمون checksum برای فایل باینری httpd شکست بخورد، هم مدخل check file httpd و هم مدخل check process apache متوقف می‌شوند. .PP درخت وابستگی یک ساختار عمومی است و می‌تواند میان تمام انواع مدخل‌های سرویس استفاده شود، چندین سطح را در بر گیرد و هر اقدام پشتیبانی‌شده‌ای را انتشار دهد (به‌جز اقدام exec که به دلایل مشخص، در یک درخت وابستگی به سمت بالا انتشار نمی‌یابد). .PP در اینجا یک مثال متفاوت دیگر آورده شده است. پیکربندی سرور رایج زیر را در نظر بگیرید: .PP .Vb 2 \& WEB\-SERVER \-> APPLICATION\-SERVER \-> DATABASE \-> FILESYSTEM \& (a) (b) (c) (d) .Ve .PP می‌توانید وابستگی‌ها را طوری تنظیم کنید که وب‌سرور وابسته به اجرای سرور برنامه (application server) پیش از آغاز وب‌سرور باشد، سرور برنامه به سرور پایگاه‌داده وابسته باشد و پایگاه‌داده پیش از آغاز به کار، وابسته به سوار شدن (mount) سامانهٔ فایل باشد. همچنین برای مشاهدهٔ مثال‌های استفاده از دستور depend بخش مثال‌ها را در زیر ببینید. .PP در اینجا نحوهٔ عملکرد Monit با وابستگی‌های فوق شرح داده شده است: .IP "اگر هیچ سرویسی در حال اجرا نباشد" 4 .IX Item "If no services are running" Monit سرورها را با این ترتیب آغاز خواهد کرد: \fId\fR، \fIc\fR، \&\fIb\fR، \fIa\fR .IP "اگر همهٔ سرورها در حال اجرا باشند" 4 .IX Item "If all servers are running" هنگامی که دستور \(aqmonit stop all\(aq را اجرا می‌کنید، ترتیب توقف به این صورت است: \fIa\fR، \fIb\fR، \&\fIc\fR، \fId\fR. اگر \(aqmonit stop d\(aq را اجرا کنید، آن‌گاه \fIa\fR، \fIb\fR و \fIc\fR نیز متوقف می‌شوند زیرا به \fId\fR وابسته هستند و در نهایت \fId\fR متوقف می‌شود. .IP "اگر \fIa\fR اجرا نشود" 4 .IX Item "If a does not run" Monit سرویس \fIa\fR را آغاز خواهد کرد. .IP "اگر \fIb\fR اجرا نشود" 4 .IX Item "If b does not run" Monit ابتدا \fIa\fR را متوقف کرده، سپس \fIb\fR را آغاز می‌کند و در نهایت اگر \&\fIb\fR مجدداً بالا آمد، \fIa\fR را آغاز می‌نماید. .IP "اگر \fIc\fR اجرا نشود" 4 .IX Item "If c does not run" Monit ابتدا \fIa\fR و \fIb\fR را متوقف می‌کند، سپس \fIc\fR را آغاز کرده و در نهایت \&\fIb\fR و سپس \fIa\fR را آغاز می‌نماید. .IP "اگر \fId\fR اجرا نشود" 4 .IX Item "If d does not run" Monit ابتدا \fIa\fR، \fIb\fR و \fIc\fR را متوقف کرده، سپس \fId\fR را آغاز می‌کند و در نهایت \&\fIc\fR، \fIb\fR و سپس \fIa\fR را آغاز می‌نماید. .IP "اگر فایل پیکربندی دارای یک حلقهٔ وابستگی باشد." 4 .IX Item "If the control file contains a depend loop." یک حلقهٔ وابستگی برای نمونه به شکل a\->b و b\->a یا a\->b\->c\->a است. .Sp هنگامی که Monit آغاز به کار می‌کند، چنین حلقه‌هایی را بررسی کرده و در صورت یافتن حلقه، با نمایش خطا خارج می‌شود. همچنین اگر از دستور depend به گونه‌ای استفاده شده باشد که به هیچ سرویسی در فایل پیکربندی اشاره نکند، با اعلام خطا خارج خواهد شد. .SH "آزمون‌های سرویس (SERVICE TESTS)" .IX Header "SERVICE TESTS" .SS "محدودیت‌ها (\s-1LIMITS\s0)" .IX Subsection "LIMITS" می‌توانید محدودیت‌های گوناگونی را پیکربندی و تنظیم کنید تا اندازهٔ بافرها و مهلت‌های زمانی (timeouts) مورد استفاده توسط Monit را تغییر دهید. در بیشتر شرایط مقادیر پیش‌فرض مناسب هستند. در صورت نیاز، محدودیت‌هایی که در حال حاضر می‌توانید در Monit تغییر دهید در زیر آورده شده‌اند. .PP دستور زبان: .PP .Vb 12 \& SET LIMITS { \& PROGRAMOUTPUT: , \& SENDEXPECTBUFFER: , \& FILECONTENTBUFFER: , \& HTTPCONTENTBUFFER: , \& NETWORKTIMEOUT: \& PROGRAMTIMEOUT: \& STOPTIMEOUT: \& STARTTIMEOUT: \& RESTARTTIMEOUT: \& EXECTIMEOUT: \& } .Ve .PP که در آن: \fIunit\fR برابر است با \*(L"B\*(R" (بایت)، \*(L"kB\*(R" (کیلوبایت) یا \*(L"\s-1MB\*(R"\s0 (مگابایت) \fItimeunit\fR برابر است با \*(L"\s-1MS\*(R"\s0 (میلی‌ثانیه) یا \*(L"S\*(R" (ثانیه) .PP راهنمای گزینه‌ها: .PP .Vb 10 \& --------------------------------------------------------------------------------- \& | 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 | \& --------------------------------------------------------------------------------- .Ve.SS "\s-1ساختار دستوری کلی (GENERAL SYNTAX)\s0" .IX Subsection "GENERAL SYNTAX" برنامهٔ Monit چندین آزمون if ارائه می‌دهد که می‌توانید از آن‌ها در یک دستور \(aqcheck\(aq برای ارزیابی جنبه‌های گوناگون یک سرویس استفاده کنید. .PP می‌توانید هم برای یک مقدار از پیش تعیین‌شده و هم برای یک محدوده آزمون انجام دهید و در صورت تغییر مقدار، اقداماتی (actions) را به اجرا درآورید. .PP ساختار دستوری کلی برای آزمودن یک مقدار یا محدوده مشخص: .PP .Vb 1 \& IF THEN [ELSE ] .Ve .PP عملیات (action) هر بار که شرط <\s-1TEST\s0> برقرار باشد، ارزیابی می‌شود. اقدام در صورت موفقیت اختیاری است و تنها زمانی اجرا می‌شود که وضعیت از شکست به موفقیت تغییر یابد. اگر اقدام موفقیت تنظیم نشده باشد، Monit به‌طور پیش‌فرض یک هشدار بازیابی (recovery alert) ارسال خواهد کرد. .PP ساختار دستوری کلی برای آزمون تغییر مقدار: .PP .Vb 1 \& IF CHANGED THEN .Ve .PP این اقدام هر بار که مقدار تغییر کند اجرا می‌شود. Monit مقدار جدید را به خاطر می‌سپارد و در صورت تغییر مجدد آن، رویدادی را فعال می‌کند. .SS "\s-1اقدام (ACTION)\s0" .IX Subsection "ACTION" هر آزمون می‌تواند با متدهای \fIalert\fR، \fIstart\fR، \fIstop\fR، \fIrestart\fR، \&\fIunmonitor\fR یا \fIexec\fR مرتبط شود که Monit می‌تواند از آن‌ها برای اجرای اقدامات یا برنامه‌ها روی سرویس استفاده کند. اقدام موفقیت‌آمیز از متد \fIignore\fR نیز پشتیبانی می‌کند. .PP ساختار دستوری: .PP .Vb 1 \& ALERT | IGNORE | START | STOP | RESTART | UNMONITOR .Ve .PP یا: .PP .Vb 5 \& EXEC "program" \& [[AS] UID ] \& [[AS] GID ] \& [[WITH] TIMEOUT SECOND(S)] \& [REPEAT EVERY [] CYCLE(S)] .Ve .PP در هر آزمون باید اقدام مورد نظر برای اجرا را از این فهرست انتخاب کنید: .IP "\(bu" 4 \&\fB\s-1ALERT\s0\fR با هر بار تغییر وضعیت، رویداد هشداری را برای کاربر ارسال می‌کند. .IP "\(bu" 4 \&\fB\s-1RESTART\s0\fR سرویس را مجدداً راه‌اندازی می‌کند \fBو\fR هشداری می‌فرستد. راه‌اندازی مجدد با فراخوانی متد ثبت‌شدهٔ restart برای سرویس، یا در صورت تنظیم نشدن آن، ابتدا با فراخوانی متد stop و سپس متد start انجام می‌شود. .IP "\(bu" 4 \&\fB\s-1START\s0\fR سرویس را با فراخوانی متد ثبت‌شدهٔ start آغاز می‌کند \fBو\fR هشداری می‌فرستد. .IP "\(bu" 4 \&\fB\s-1STOP\s0\fR سرویس را با فراخوانی متد ثبت‌شدهٔ stop متوقف می‌کند \fBو\fR هشداری می‌فرستد. اگر Monit سرویسی را متوقف کند، دیگر توسط Monit بررسی نخواهد شد و بعداً نیز دوباره راه‌اندازی نمی‌شود. برای فعال‌سازی مجدد پایش سرویس، باید صراحتاً پایش را از طریق رابط وب یا از طریق کنسول فعال کنید. .IP "\(bu" 4 \&\fB\s-1EXEC\s0\fR می‌تواند برای اجرای یک برنامهٔ دلخواه \fBو\fR ارسال هشدار استفاده شود. در صورت انتخاب این اقدام، باید برنامهٔ اجرایی را مشخص کنید و اگر برنامه نیاز به آرگومان دارد، باید برنامه و آرگومان‌های آن را داخل یک رشته نقل‌قول‌شده قرار دهید. همچنین می‌توانید به صورت اختیاری uid و gid را تعیین کنید تا برنامهٔ اجراشده پس از شروع به آن‌ها تغییر یابد. اگر آزمون با شکست مواجه شود، برنامه تنها \fIیک بار\fR اجرا می‌شود. در صورتی که خطا برای تعداد چرخه‌های مشخصی ادامه یابد، می‌توانید تکرار اجرا را فعال کنید. به عنوان مثال: .Sp .Vb 3 \& if failed then exec "/usr/local/bin/sms.sh" \& as uid "nobody" and gid "nobody" \& repeat every 5 cycles .Ve .Sp به یاد داشته باشید، اگر Monit توسط کاربر ریشه (root) اجرا شود، تمام برنامه‌های اجرا شده توسط Monit با مجوزهای مدیر سیستم (superuser) شروع خواهند شد مگر اینکه از افزونه‌های uid و gid استفاده شده باشد. .IP "\(bu" 4 \&\fB\s-1UNMONITOR\s0\fR پایش سرویس را غیرفعال می‌کند \fBو\fR هشداری می‌فرستد. سرویس دیگر توسط Monit بررسی نخواهد شد و بعداً نیز دوباره راه‌اندازی نمی‌شود. برای فعال‌سازی مجدد پایش سرویس باید صراحتاً پایش را از رابط وب یا از کنسول فعال کنید. .IP "\(bu" 4 \&\fB\s-1IGNORE\s0\fR می‌تواند در بخش اقدام استفاده شود تا زمانی که بررسی مجدداً وارد این وضعیت می‌شود، هشداری ایجاد نشود. .SS "\s-1تحمل خطا (FAULT TOLERANCE)\s0" .IX Subsection "FAULT TOLERANCE" به‌طور پیش‌فرض، اگر شرطی برقرار باشد اقدام اجرا شده و سرویس مربوطه در وضعیت خطا قرار می‌گیرد. با این حال، می‌توانید تعیین کنید که آزمون بیش از یک بار با شکست مواجه شود تا رویداد خطا فعال گردد و وضعیت سرویس به failed تغییر یابد. این قابلیت برای جلوگیری از دریافت هشدارهای ناشی از خطاهای گذرا و کاذب، به ویژه در آزمون‌های شبکه، بسیار مفید است. .PP ساختار دستوری: .PP .Vb 1 \& FOR CYCLES ... .Ve .PP یا: .PP .Vb 1 \& [TIMES WITHIN] CYCLES ... .Ve .PP این شرط می‌تواند هم برای اقدام مربوط به شکست (failure) و هم اقدام موفقیت (success) استفاده شود. .PP قالب اول که ساده‌تر و قالب پیشنهادی است، نیازمند \f(CW\*(C`X\*(C'\fR رویداد متوالی پیش از تغییر وضعیت است: .PP .Vb 4 \& if failed \& port 80 \& for 3 cycles \& then alert .Ve .PP قالب دوم پیشرفته‌تر است و امکان تحمل مشکلات مقطعی را فراهم می‌آورد، در حالی که همچنان مشکلات حاد—که در آن سرویس به طور مکرر بین وضعیت خطا و موفقیت در نوسان است—را شناسایی می‌کند. .PP به عنوان مثال، اگر سرویس یکی در میان در چرخه‌ها شکست بخورد (1\-0\-1\-0\-1\-0\-...)، شرط \*(L"for 2 cycles\*(R" با وجود مشکل داشتن سرویس هرگز برقرار نخواهد شد. عبارت زیر چنین وضعیتی را پوشش می‌دهد: .PP .Vb 4 \& if failed \& port 80 \& for 3 times within 5 cycles \& then alert .Ve .PP نمونه‌ای که چندین سطح خطا و اقدامات را تعیین می‌کند: .PP .Vb 3 \& 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 \*(Aq/try/to/free/the/space\*(Aq .Ve .PP نکته: بیشینهٔ مقدار برای چرخه‌ها (cycles) عدد 64 است..SS "\s-1آزمون‌های وجود (EXISTENCE TESTS)\s0" .IX Subsection "EXISTENCE TESTS" این آزمون امکان راه‌اندازی یک کنش را بر اساس وجود شیء تحت نظارت فراهم می‌کند. این قابلیت برای سرویس‌های \fIprocess\fR، \fIfile\fR، \fIdirectory\fR، \&\fIfilesystem\fR و \fIfifo\fR پشتیبانی می‌شود. .PP اگر هیچ آزمون وجودی تعریف نشده باشد، آزمون ضمنی عدم وجود با کنش راه‌اندازی مجدد فعال می‌شود؛ بنابراین به عنوان مثال اگر فرآیند متوقف شود، Monit آن را دوباره راه‌اندازی خواهد کرد. .PP دو نوع آزمون وجود دردسترس است: .PP \fINON-EXIST\fR .IX Subsection "NON-EXIST" .PP این آزمون در صورتی که شیء وجود نداشته باشد کنشی را اجرا می‌کند. برای نمونه می‌توان از آن برای اطمینان از در حال اجرا بودن apache، مانت بودن سیستم‌فایل داده و غیره استفاده کرد. .PP .Vb 1 \& IF [DOES] NOT EXIST THEN .Ve .PP مقدار \&\fIaction\fR انتخابی از بین \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \&\*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال: اجرای یک اسکریپت در صورتی که سیستم‌فایل وجود \s-1نداشته\s0 باشد: .PP .Vb 2 \& check filesystem disk1 with path /dev/sda1 \& if does not exist then exec "/sbin/mount..." .Ve .PP \fI\s-1EXIST\s0\fR .IX Subsection "EXIST" .PP این آزمون معکوس آزمون عدم وجود است: در صورتی که شیء وجود \s-1داشته\s0 باشد، کنشی را آغاز می‌کند. به عنوان مثال می‌تواند برای متوقف کردن (kill) فرآیندی که نباید در حال اجرا باشد به کار رود. .PP .Vb 1 \& IF [DOES] EXIST THEN .Ve .PP مقدار \&\fIaction\fR انتخابی از بین \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \&\*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال: کشتن فرآیندی که نباید اجرا شود: .PP .Vb 2 \& check process vmware matching "vmware" \& if exist then exec "/usr/bin/pkill \-9 vmware" .Ve .PP مثال: ارسال هشدار در صورت وجود فایلی که نباید موجود باشد: .PP .Vb 2 \& check file x with path /some/path/x \& if exist then alert .Ve .SS "\s-1آزمون‌های منابع (RESOURCE TESTS)\s0" .IX Subsection "RESOURCE TESTS" برنامه Monit می‌تواند میزان مصرف منابع توسط یک سرویس را بررسی کند. این آزمون تنها می‌تواند درون یک مدخل سرویس system یا process در فایل پیکربندی Monit استفاده شود. .PP بسته به ویژگی‌های سیستم یا فرآیند، سرویس‌ها می‌توانند متوقف شده یا مجدداً راه‌اندازی شوند و هشدارهایی ایجاد گردد. بدین ترتیب امکان بهره‌برداری از سیستم‌های بیکار و محافظت از سیستم تحت بار سنگین فراهم می‌شود. .PP نحو (Syntax): .PP .Vb 1 \& IF THEN .Ve .PP مقدار \&\fIoperator\fR انتخابی از بین \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری C، \&\*(L"gt\*(R"، \*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوسته sh و \*(L"greater\*(R"، \&\*(L"less\*(R"، \*(L"equal\*(R"، \*(L"notequal\*(R" در شکل انسان‌خوان است (در صورت مشخص نشدن، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP مقدار \&\fIvalue\fR یک عدد صحیح یا یک عدد حقیقی است. .PP مقدار \&\fIaction\fR انتخابی از بین \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مجموعه \&\fIresource\fR به نوع سرویس بستگی دارد: .PP \fIآزمون‌های منابع سیستم (System resource tests)\fR .IX Subsection "System resource tests" .PP عبارت \&\fI\s-1LOADAVG\s0([1min|5min|15min]) [\s-1PER CORE\s0]\fR به میانگین بار (load average) سیستم اشاره دارد. میانگین بار برابر است با تعداد فرآیندهای موجود در صف اجرای سیستم به‌ازای هر هسته \s-1CPU\s0، که در دوره زمانی مشخص میانگین‌گیری شده است. مثال: .PP .Vb 3 \& 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 .Ve .PP اگر گزینه \fIper core\fR را حذف کنید، آزمون بدون در نظر گرفتن تعداد هسته‌های \s-1CPU\s0 میانگین بار کل را بررسی خواهد کرد. .PP عبارت \&\fI\s-1CPU\s0([user|system|wait|nice|hardirq|softirq|steal|guest|guestnice])\fR درصد زمانی است که سیستم صرف نوع مشخصی از وظایف می‌کند: .IP "user" 4 .IX Item "user" پردازنده (\s-1CPU\s0) در حال اجرای کد در حالت فضای کاربری (user space) است، که شامل هر فرآیندی است که متعلق به هسته نباشد؛ مانند وب‌سرورها، پایگاه‌های داده، پوسته‌ها و برنامه‌های مرتبط با محیط میزکار. .IP "system" 4 .IX Item "system" پردازنده در حال اجرای هسته است، که شامل درایورها و سایر ماژول‌های هسته می‌شود. هسته همچنین درخواست‌های فرآیندهای فضای کاربری مانند تخصیص حافظه، ورودی/خروجی دیسک و شبکه و ساخت فرآیندهای فرزند را مدیریت می‌کند. .IP "wait" 4 .IX Item "wait" وضعیت انتظار ورودی/خروجی (I/O wait) زمانی رخ می‌دهد که \s-1CPU\s0 در حین انتظار برای تکمیل یک عملیات ورودی/خروجی از دیسک یا شبکه، بیکار بوده است. .IP "nice" 4 .IX Item "nice" آمار nice مربوط به فرآیندهای فضای کاربری است که با اولویت تغییریافته (بالاتر یا پایین‌تر از حد معمول) اجرا می‌شوند. .IP "hardirq" 4 .IX Item "hardirq" هسته در حال پاسخ‌دهی به درخواست‌های وقفه سخت‌افزاری است. وقفه‌های سخت‌افزاری از تجهیزات جانبی مانند صفحه‌کلید، رابط‌های شبکه، دیسک‌ها، ساعت سیستم و غیره ناشی می‌شوند. .IP "softirq" 4 .IX Item "softirq" هسته در حال پاسخ‌دهی به درخواست‌های وقفه نرم‌افزاری است. وقفه‌های نرم‌افزاری از فرآیندهای در حال اجرا در سیستم ناشی می‌شوند. .IP "steal" 4 .IX Item "steal" این مورد تنها برای ماشین‌های مجازی روی یک هایپروایزر اعمال می‌شود. زمان steal نشان‌دهنده درصد زمانی است که یک ماشین مجازی مجبور بوده منتظر \s-1CPU\s0 واقعی بماند در حالی که هایپروایزر در حال سرویس‌دهی به یک ماشین مجازی دیگر بوده است. اگر این عدد بالا بماند، سیستم میزبان بیش از حد شلوغ است و ممکن است به پردازنده‌های فیزیکی بیشتری نیاز داشته باشد یا لازم باشد برخی از ماشین‌های مجازی به میزبان دیگری منتقل شوند. .IP "guest" 4 .IX Item "guest" این مورد تنها برای ماشین‌های میزبانی که هایپروایزر اجرا می‌کنند اعمال می‌شود. این پارامتر زمان صرف‌شده برای اجرای یک \s-1CPU\s0 مجازی برای سیستم‌عامل‌های مهمان تحت کنترل هسته لینوکس را نشان می‌دهد. این مقدار از قبل در آمار \*(L"user\*(R" لحاظ شده است. .IP "guestnice" 4 .IX Item "guestnice" این مورد تنها برای ماشین‌های میزبانی که هایپروایزر اجرا می‌کنند اعمال می‌شود. این پارامتر زمان صرف‌شده برای اجرای یک \s-1CPU\s0 مجازی برای سیستم‌عامل‌های مهمان تحت کنترل هسته لینوکس با اولویت تغییریافته را نشان می‌دهد. این مقدار از قبل در آمار \*(L"nice\*(R" لحاظ شده است. .PP تعدیل‌کننده user/system/wait/nice/hardirq/softirq/steal/guest/guestnice اختیاری است و پشتیبانی از آن به پلتفرم بستگی دارد (پشتیبانی در لینوکس به نسخه هسته وابسته است؛ تمام این آمارها از نسخه هسته 2.6.33 به بعد در دسترس هستند): .PP .Vb 12 \& ------------------------------------------------------------------------------------------------- \& | 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 | | | | | | \& ------------------------------------------------------------------------------------------------- .Ve .PP مثال: .PP .Vb 1 \& if cpu usage > 95% for 10 cycles then alert .Ve .PP عبارت \&\fI\s-1MEMORY\s0\fR میزان مصرف حافظه سیستم برحسب درصد [%] یا مقدار مطلق [B, kB, \&\s-1MB, GB\s0] است. مثال: .PP .Vb 1 \& if memory usage > 75% for 5 cycles then alert .Ve .PP عبارت \&\fI\s-1SWAP\s0\fR میزان استفاده از swap سیستم برحسب درصد [%] یا مقدار مطلق [B, kB, \s-1MB, GB\s0] است. مثال: .PP .Vb 1 \& if swap usage > 20% for 10 cycles then alert .Ve .PP عبارت‌های \&\fI\s-1PAGEIN\s0\fR و \fI\s-1PAGEOUT\s0\fR امکان نظارت بر فعالیت swap و فشار حافظه (memory pressure) سیستم را فراهم می‌کنند. زمانی که سیستم به حافظه بیشتری نیاز پیدا کند، ممکن است انتقال صفحات حافظه به داخل و خارج از دستگاه swap را آغاز کند. ورودی/خروجی دستگاه swap بسیار کندتر از دسترسی به \s-1RAM\s0 است، که این امر آن را به شاخصی برای فشار حافظه سیستم تبدیل می‌کند. یک قاعده کلی سرانگشتی برای فعالیت مبادله به شرح زیر است: 0 pages/sec: سالم (Healthy) 1\-10 pages/sec: پیجینگ جزئی، معمولاً قابل قبول >100 pages/sec sustained: فشار حافظه، نیازمند بررسی >1000 pages/sec: کوبش شدید حافظه (Thrashing)، اقدام فوری لازم است .PP مثال: .PP .Vb 2 \& if pageout > 50 per second for 20 cycles then alert \& if pageout > 100 per second for 10 cycles then alert .Ve.PP \fIآزمون‌های منابع فرایند (Process resource tests)\fR .IX Subsection "Process resource tests" .PP \&\fI\s-1CPU\s0\fR میزان استفاده خود فرایند از \s-1CPU\s0 است [به درصد]. Monit میزان مصرف \s-1CPU\s0 را بر اساس تعداد ریسه‌ها (threads) در برابر هسته‌های در دسترس \s-1CPU\s0 محاسبه می‌کند. اگر فرایند یک ریسه داشته باشد، ۱۰۰٪ مصرف \s-1CPU\s0 معادل ۱۰۰٪ بهره‌برداری از یک هستهٔ \s-1CPU\s0 است. اگر ۲ ریسه داشته باشد، مصرف ۱۰۰٪ \s-1CPU\s0 هنگامی گزارش می‌شود که از ۲ هستهٔ \s-1CPU\s0 به میزان ۱۰۰٪ استفاده کند و به همین ترتیب. اگر تعداد ریسه‌های فرایند بیشتر از هسته‌های موجود \s-1CPU\s0 در دستگاه باشد، مصرف ۱۰۰٪ \s-1CPU\s0 متناظر با بهره‌برداری کامل از تمام هسته‌های در دسترس \s-1CPU\s0 خواهد بود. مثال: .PP .Vb 1 \& if cpu > 10% for 5 cycles then restart .Ve .PP \&\fI\s-1TOTAL CPU\s0\fR کل میزان مصرف \s-1CPU\s0 توسط فرایند و فرزندان آن است (به درصد). معمولاً برای سرویس‌هایی مانند وب‌سرور Apache که در آن‌ها یک فرایند اصلی (master) فرایندهای فرزند را به‌عنوان کارگر (worker) منشعب می‌کند، از \s-1TOTAL CPU\s0 استفاده خواهید کرد. مثال: .PP .Vb 1 \& if total cpu > 50% for 10 cycles then restart .Ve .PP \&\fI\s-1THREADS\s0\fR تعداد ریسه‌های فرایند است. مثال: .PP .Vb 1 \& if threads > 3 then alert .Ve .PP \&\fI\s-1CHILDREN\s0\fR تعداد فرایندهای فرزند فرایند است. مثال: .PP .Vb 1 \& if children > 10 then alert .Ve .PP \&\fI\s-1MEMORY\s0\fR میزان مصرف حافظه توسط خود فرایند است، [%] یا مقدار مطلق [B, kB, \s-1MB, GB\s0]. .PP \&\- Linux: Monit گزارش \s-1PSS\s0 (اندازه مجموعه متناسب \- Proportional Set Size) را به \s-1RSS\s0 (اندازه مجموعه مقیم \- Resident Set Size) ترجیح می‌دهد. \s-1PSS\s0 با تقسیم عادلانهٔ حافظهٔ مشترک میان فرایندها، معیار دقیق‌تری فراهم می‌کند. \s-1RSS\s0 می‌تواند گمراه‌کننده باشد زیرا با اضافه کردن کل میزان حافظه به تک‌تک فرایندهایی که از آن استفاده می‌کنند، حافظهٔ مشترک را بیش از حد شمارش می‌کند. \s-1PSS\s0 دیدگاه واقع‌بینانه‌تری از سهم یک فرایند به تنهایی و ردپای حافظهٔ کلی سیستم ارائه می‌دهد. .PP \&\- MacOS: گزارش مصرف حافظهٔ فرایند با ActivityMonitor همخوانی دارد و ردپای حافظهٔ فیزیکی فرایند را به‌جای \s-1RSS\s0 نشان می‌دهد. این گزارش حافظهٔ مشترک را که توسط چندین فرایند استفاده می‌شود حذف می‌کند (تا از شمارش دوگانه جلوگیری شود). .PP مثال: .PP .Vb 1 \& if memory usage > 8 MB then alert .Ve .PP \&\fI\s-1TOTAL MEMORY\s0\fR میزان مصرف حافظه توسط فرایند و فرایندهای فرزند آن است، به صورت درصد یا به صورت یک مقدار [B, kB, \s-1MB, GB\s0]. مثال: .PP .Vb 1 \& if total memory usage > 1% for 10 cycles then alert .Ve .SS "آزمون فعالیت ورودی/خروجی فرآیند (\s-1PROCESS I/O ACTIVITY TEST\s0)" .IX Subsection "PROCESS I/O ACTIVITY TEST" Monit می‌تواند فعالیت خواندن و نوشتن فرایند روی فایل‌سیستم را بیازماید. این آزمون تنها می‌تواند در بستر نوع سرویس فرایند (process) استفاده شود. Monit برای دسترسی به این معیارها معمولاً باید به‌عنوان کاربر ریشه (root) اجرا شود. .PP سیستم‌عامل (\s-1OS\s0) معمولاً از معیارهای I/O به ازای هر فرایند بر حسب بایت یا بر حسب عملیات پشتیبانی می‌کند. .PP برخی پلتفرم‌ها اجازه می‌دهند زیرمجموعهٔ I/O نیازمند دسترسی به ذخیره‌ساز فیزیکی را از I/O عمومی که توسط حافظهٔ پنهان (cache) پاسخ داده شده است تفکیک کرد. توجه داشته باشید از آنجا که I/O فیزیکی معمولاً با صفحهٔ فایل‌سیستم تراز می‌شود، ممکن است تفاوتی میان I/O کل و فیزیکی وجود داشته باشد، حتی اگر فرایند فقط سعی کرده باشد ۱ بایت بخواند. .PP آمار فعالیت I/O به ازای هر فرایند بر پایهٔ پلتفرم: .PP .Vb 12 \& ----------------------------------------------------------------- \& | Platform | Operation | Byte (physical) | Byte (generic) | \& ----------------------------------------------------------------- \& | AIX | X | | | \& | DragonFlyBSD | X | | | \& | FreeBSD | X | | | \& | Linux | X | X | X | \& | MacOS | | X | | \& | NetBSD | X | | | \& | OpenBSD | X | | | \& | Solaris | X | | | \& ----------------------------------------------------------------- .Ve .PP \fIخواندن: بایت بر ثانیه (عمومی)\fR .IX Subsection "Read: bytes per second (generic)" .PP ساختار: .PP .Vb 1 \& IF READ [ACTIVITY] /S THEN action .Ve .PP \&\fIoperator\fR انتخابی است از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری c، و \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالبی خوانا برای انسان (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR انتخابی است از \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"\s0 یا معادل‌های بلندتر \*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R"، \&\*(L"percent\*(R". .PP \&\fIaction\fR انتخابی است از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check process p... \& if read activity > 1 MB/s then alert .Ve .PP \fIخواندن: بایت بر ثانیه (ذخیره‌ساز فیزیکی)\fR .IX Subsection "Read: bytes per second (physical storage)" .PP ساختار: .PP .Vb 1 \& IF DISK READ [ACTIVITY] /S THEN action .Ve .PP \&\fIoperator\fR انتخابی است از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری c، و \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالبی خوانا برای انسان (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR انتخابی است از \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"\s0 یا معادل‌های بلندتر \*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R"، \&\*(L"percent\*(R". .PP \&\fIaction\fR انتخابی است از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check process p... \& if disk read activity > 1 MB/s then alert .Ve .PP \fIخواندن: عملیات بر ثانیه\fR .IX Subsection "Read: operations per second" .PP ساختار: .PP .Vb 1 \& IF DISK READ [ACTIVITY] operations/S THEN action .Ve .PP \&\fIoperator\fR انتخابی است از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری c، و \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالبی خوانا برای انسان (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIaction\fR انتخابی است از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check process p... \& if disk read activity > 500 operations/s then alert .Ve .PP \fIنوشتن: بایت بر ثانیه (عمومی)\fR .IX Subsection "Write: bytes per second (generic)" .PP ساختار: .PP .Vb 1 \& IF WRITE [ACTIVITY] /S THEN action .Ve .PP \&\fIoperator\fR انتخابی است از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری c، و \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالبی خوانا برای انسان (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR انتخابی است از \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"\s0 یا معادل‌های بلندتر \*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R"، \&\*(L"percent\*(R". .PP \&\fIaction\fR انتخابی است از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check process p... \& if write activity > 1 MB/s then alert .Ve.PP \fIنوشتن: بایت بر ثانیه (ذخیره‌سازی فیزیکی)\fR .IX Subsection "Write: bytes per second (physical storage)" .PP نحو: .PP .Vb 1 \& IF DISK WRITE [ACTIVITY] /S THEN action .Ve .PP \&\fIoperator\fR انتخابی از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c، \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالب انسان‌خوان است (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR انتخابی از \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"\s0 یا جایگزین‌های کامل‌تر \*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R" و \*(L"percent\*(R" است. .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال: .PP .Vb 2 \& check process p... \& if disk write activity > 1 MB/s then alert .Ve .PP \fIنوشتن: عملیات بر ثانیه\fR .IX Subsection "Write: operations per second" .PP نحو: .PP .Vb 1 \& IF DISK WRITE [ACTIVITY] operations/S THEN action .Ve .PP \&\fIoperator\fR انتخابی از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c، \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالب انسان‌خوان است (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال: .PP .Vb 2 \& check process p... \& if disk write activity > 500 operations/s then alert .Ve .SS "\s-1آزمون چک‌سام فایل (FILE CHECKSUM TEST)\s0" .IX Subsection "FILE CHECKSUM TEST" دستور چک‌سام فقط می‌تواند در ورودی سرویس فایل استفاده شود و برای بررسی چک‌سام \s-1MD5\s0، \s-1SHA1\s0 یا \s-1SHA256\s0 فایل به کار می‌رود. .PP بررسی چک‌سام مشخص: .PP .Vb 1 \& IF FAILED [MD5|SHA1|SHA256] CHECKSUM [EXPECT checksum] THEN action .Ve .PP بررسی هرگونه تغییر در فایل: .PP .Vb 1 \& IF CHANGED [MD5|SHA1|SHA256] CHECKSUM THEN action .Ve .PP انتخاب \s-1MD5\s0، \s-1SHA1\s0 یا \s-1SHA256\s0 اختیاری است. \s-1MD5\s0 دارای یک چک‌سام ۱۲۸ بیتی (رشتهٔ ۳۲ بایتی در مبنای شانزده)، \s-1SHA1\s0 دارای یک چک‌سام ۱۶۰ بیتی (رشتهٔ ۴۰ بایتی در مبنای شانزده) و \s-1SHA256\s0 دارای یک چک‌سام ۲۵۶ بیتی (رشتهٔ ۶۴ بایتی در مبنای شانزده) است. اگر این گزینه نادیده گرفته شود، Monit تلاش خواهد کرد روش را از روی رشتهٔ \s-1EXPECT\s0 حدس بزند یا از \s-1MD5\s0 به عنوان چک‌سام پیش‌فرض استفاده کند. \s-1SHA256\s0 برای امنیت رمزنگاری بهتر توصیه می‌شود. .PP عبارت \f(CW\*(C`expect\*(C'\fR اختیاری است و در صورت استفاده، رشتهٔ md5، sha1 یا sha256 را مشخص می‌کند که Monit باید هنگام آزمودن چک‌سام فایل انتظار داشته باشد. در این صورت Monit چک‌سام اولیه‌ای برای فایل محاسبه نمی‌کند، بلکه از رشته‌ای که تعیین کرده‌اید استفاده می‌کند. برای مثال: .PP .Vb 3 \& if failed \& checksum expect 8f7f419955cefa0b33a2ba316cba3659 \& then alert .Ve .PP برای نمونه می‌توانید از ابزار \s-1GNU\s0 شامل \fI\f(BImd5sum\fI\|(1)\fR، \fI\f(BIsha1sum\fI\|(1)\fR یا \fI\f(BIsha256sum\fI\|(1)\fR برای ساخت یک رشتهٔ چک‌سام برای فایل استفاده کرده و این رشته را در عبارت expect به کار ببرید. .PP بارگذاری مجدد یک سرور در صورت تغییر فایل پیکربندی آن: .PP .Vb 2 \& check file apache_conf with path /etc/apache/httpd.conf \& if changed checksum then exec "/usr/bin/apachectl graceful" .Ve .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .SS "\s-1آزمون برچسب زمانی (TIMESTAMP TEST)\s0" .IX Subsection "TIMESTAMP TEST" دستور برچسب زمانی تنها می‌تواند در ورودی‌های سرویس فایل، fifo یا دایرکتوری استفاده شود. .PP نحو برچسب زمانی نسبی: .PP .Vb 1 \& IF [unit] THEN .Ve .PP نحو تغییر برچسب زمانی: .PP .Vb 1 \& IF CHANGED THEN action .Ve .PP چهار نوع آزمون برچسب زمانی وجود دارد: .IP "\s-1ACCESS\s0 (\s-1ATIME\s0)" 12 .IX Item "ACCESS (ATIME)" برچسب زمانی را می‌آزماید که هر زمان به شیء دسترسی پیدا شود (برای مثال فایل خوانده شود) به‌روزرسانی می‌گردد. فایل‌سیستم معمولاً اجازه می‌دهد با استفاده از گزینه‌های mount، به‌روزرسانی‌های \fIatime\fR غیرفعال شود؛ بنابراین این آزمون تنها در صورتی کار خواهد کرد که فایل‌سیستم به‌روزرسانی‌های atime را انجام دهد. .IP "\s-1CHANGE\s0 (\s-1CTIME\s0)" 12 .IX Item "CHANGE (CTIME)" برچسب زمانی را می‌آزماید که هر زمان متادیتای شیء نظیر مالک، گروه، دسترسی‌ها یا تعداد پیوندهای سخت تغییر کند، به‌روزرسانی می‌شود. .IP "\s-1MODIFICATION\s0 (\s-1MTIME\s0)" 12 .IX Item "MODIFICATION (MTIME)" برچسب زمانی را می‌آزماید که هر زمان محتوای شیء تغییر کند، به‌روزرسانی می‌شود. برچسب زمانی تغییر محتوای فایل هر بار که فایل کوتاه (truncate) شود یا روی آن نوشته شود، به‌روز می‌گردد. برچسب زمانی تغییر محتوای دایرکتوری هرگاه فایل‌ها یا زیردایرکتوری‌هایی به دایرکتوری اضافه شده یا از آن حذف شوند، به‌روزرسانی می‌شود. .IP "\s-1DEFAULT\s0 (\s-1LATEST OF CHANGE AND MODIFICATION TIMES\s0)" 12 .IX Item "DEFAULT (LATEST OF CHANGE AND MODIFICATION TIMES)" اگر هیچ نوع برچسب زمانی مشخصی تعیین نشده باشد، تازه‌ترین زمان از میان زمان‌های تغییر متادیتا و اصلاح محتوا بررسی می‌شود. این آزمون امکان بررسی سادهٔ هرگونه تغییر شیء (داده‌ها و متادیتا) را فراهم می‌کند. .PP \&\fIoperator\fR انتخابی از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری C، \&\*(L"\s-1GT\*(R"، \*(L"LT\*(R"، \*(L"EQ\*(R"، \*(L"NE\*(R"\s0 در نشانه‌گذاری پوستهٔ sh و \*(L"\s-1NEWER\*(R"، \*(L"OLDER\*(R"، \*(L"GREATER\*(R"، \*(L"LESS\*(R"، \*(L"EQUAL\*(R"، \*(L"NOTEQUAL\*(R"\s0 در قالب انسان‌خوان است (در صورت عدم تعیین، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIvalue\fR یک معیار زمانی (watermark) است. .PP \&\fIunit\fR یکی از موارد \*(L"\s-1SECOND\s0(S)\*(R"، \*(L"\s-1MINUTE\s0(S)\*(R"، \*(L"\s-1HOUR\s0(S)\*(R" یا \*(L"\s-1DAY\s0(S)\*(R" است. .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP برای مثال، جهت بارگذاری مجدد apache در صورت تغییر فایل پیکربندی: .PP .Vb 2 \& check file apache_conf with path /etc/apache/httpd.conf \& if changed timestamp then exec "/usr/bin/apachectl graceful" .Ve .PP برای مثال، جهت آزمودن دایرکتوری برای افزودن یا حذف فایل: .PP .Vb 2 \& check directory bar path /foo/bar \& if changed timestamp then alert .Ve .PP مثال برای ارسال هشدار در صورتی که فایل گزارش بیش از ۱ ساعت به‌روزرسانی نشده باشد: .PP .Vb 1 \& if timestamp is older than 1 hour then alert .Ve.SS "\s-1آزمون اندازه فایل (FILE SIZE TEST)\s0" .IX Subsection "FILE SIZE TEST" عبارت size تنها می‌تواند در یک مدخل سرویس check file استفاده شود. در صورت تعیین در فایل کنترلی، Monit اندازه فایل را محاسبه خواهد کرد. .PP بررسی اندازه مشخص یا یک محدوده: .PP .Vb 1 \& IF SIZE [[operator] value [unit]] THEN action .Ve .PP بررسی تغییرات اندازه: .PP .Vb 1 \& IF CHANGED SIZE THEN action .Ve .PP \&\fIoperator\fR انتخابی از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری C، \&\*(L"\s-1GT\*(R"، \*(L"LT\*(R"، \*(L"EQ\*(R"، \*(L"NE\*(R"\s0 در نشانه‌گذاری پوسته sh، و \*(L"\s-1GREATER\*(R"، \&\*(L"LESS\*(R"، \*(L"EQUAL\*(R"، \*(L"NOTEQUAL\*(R"\s0 در قالب خوانا برای انسان است (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIvalue\fR حد آستانه (watermark) اندازه است. .PP \&\fIunit\fR انتخابی از \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"\s0 یا معادل‌های کامل‌تر \&\*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R" است. در صورت عدم تعیین، واحد پیش‌فرض \*(L"byte\*(R" در نظر گرفته می‌شود. .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP برای مثال، جهت ارسال هشدار در صورت بزرگ‌تر شدن بیش از حد فایل: .PP .Vb 2 \& check file mydb with path /data/mydatabase.db \& if size > 1 GB then alert .Ve .SS "\s-1آزمون محتوای فایل (FILE CONTENT TEST)\s0" .IX Subsection "FILE CONTENT TEST" عبارت content می‌تواند برای بررسی افزایشی محتوای یک فایل متنی با استفاده از عبارات باقاعده (regular expressions) استفاده شود. .PP نحو (Syntax): .PP .Vb 1 \& IF CONTENT THEN action .Ve .PP \&\fIoperator\fR برابر با \*(L"=\*(R" برای تطابق و یا \*(L"!=\*(R" برای عدم تطابق است. .PP \&\fIregex\fR رشته‌ای حاوی عبارت باقاعده تعمیم‌یافته است. همچنین ببینید: \fBregex\fR\|(7). .PP \&\fIpath\fR یک مسیر مطلق به فایلی است که در هر خط آن یک عبارت باقاعده تعمیم‌یافته قرار دارد. همچنین ببینید: \fBregex\fR\|(7). .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP در زمان راه‌اندازی، موقعیت خواندن بر روی انتهای فایل تنظیم می‌شود و Monit در هر چرخه، بررسی را تا انتهای فایل ادامه می‌دهد. .PP اگر اندازه فایل کاهش یابد یا inode تغییر کند، موقعیت خواندن بر روی ابتدای فایل تنظیم می‌شود. .PP تنها خطوطی که به نویسه خط‌جدید (newline) ختم می‌شوند بررسی می‌گردند. .PP به‌طور پیش‌فرض تنها ۵۱۱ نویسه اول هر خط بررسی می‌شوند. می‌توانید این محدودیت را با استفاده از عبارت set limits افزایش دهید. .PP .Vb 1 \& IGNORE CONTENT .Ve .PP خطوطی که با یک \fI\s-1IGNORE\s0\fR تطابق دارند در ارزیابی‌های بعدی بررسی نمی‌شوند. \fI\s-1IGNORE CONTENT\s0\fR همواره نسبت به \&\fI\s-1IF CONTENT\s0\fR تقدم دارد. .PP تمام عبارت‌های \fI\s-1IGNORE CONTENT\s0\fR ابتدا و به ترتیب ظهورشان ارزیابی می‌شوند. پس از آن، تمام عبارت‌های \fI\s-1IF CONTENT\s0\fR ارزیابی خواهند شد. .PP برای مثال: .PP .Vb 3 \& check file syslog with path /var/log/syslog \& ignore content = "monit" \& if content = "^mrcoffee" then alert .Ve .SS "\s-1آزمون پرچم‌های سوار کردن سیستم‌فایل (FILESYSTEM MOUNT FLAGS TEST)\s0" .IX Subsection "FILESYSTEM MOUNT FLAGS TEST" برنامه Monit می‌تواند پرچم‌های سوار کردن (mount flags) سیستم‌فایل را برای تغییرات ارزیابی کند. این آزمون ضمنی است و Monit به‌طور پیش‌فرض در صورت وقوع شکست، هشدار ارسال می‌کند. .PP این آزمون برای تشخیص تغییرات پرچم‌های سیستم‌فایل، مانند فقط‌خواندنی شدن سیستم‌فایل (در اثر خطای دیسک) یا تغییر پرچم‌های سوار کردن (مانند nosuid) مفید است. .PP نحو عبارت fsflags به صورت زیر است: .PP .Vb 1 \& IF CHANGED FSFLAGS THEN action .Ve .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال: .PP .Vb 2 \& check filesystem rootfs with path / \& if changed fsflags then exec "/my/script" .Ve .SS "\s-1آزمون مصرف فضا (SPACE USAGE TEST)\s0" .IX Subsection "SPACE USAGE TEST" برنامه Monit می‌تواند یک سیستم‌فایل یا یک دیسک را از نظر میزان مصرف فضا ارزیابی کند. این آزمون تنها می‌تواند در بستر نوع سرویس filesystem استفاده شود. .PP سیستم‌های فایل معمولاً مقداری فضای رزرو شده برای کاربر ریشه (root) دارند (حدود ۱\-۵٪)، بنابراین کاربران غیر مدیر سیستم نمی‌توانند روی یک سیستم‌فایل تقریباً پر بنویسند. اگر برای سیستم‌فایلی که توسط کاربران غیر ریشه استفاده می‌شود محدودیتی تعیین می‌کنید، ممکن است بخواهید هنگام تنظیم محدودیت این بلوک‌های رزرو شده را مد نظر قرار دهید. می‌توانید با استفاده از دستور وضعیت در \s-1CLI\s0 یا واسط \s-1HTTP\s0 برای سیستم‌فایل مربوطه، درصد بلوک‌های رزرو شده را از طریق خود Monit مشاهده کنید. .PP نحو (Syntax): .PP .Vb 1 \& IF SPACE operator value unit THEN action .Ve .PP یا: .PP .Vb 1 \& IF SPACE FREE operator value unit THEN action .Ve .PP \&\fIoperator\fR انتخابی از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری c، \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوسته sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالب خوانا برای انسان است (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR انتخابی از \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"،\s0 \*(L"%\*(R" یا معادل‌های کامل‌تر \*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R"، \&\*(L"percent\*(R" است. .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال: .PP .Vb 2 \& check filesystem rootfs with path / \& if space usage > 90% then alert .Ve.SS "\s-1آزمون مصرف INODE (INODE USAGE TEST)\s0" .IX Subsection "INODE USAGE TEST" برنامهٔ Monit می‌تواند میزان مصرف inode در سیستم‌فایل را بیازماید. این آزمون تنها می‌تواند در بافت (context) یک نوع سرویس filesystem استفاده شود. .PP قالب دستوری: .PP .Vb 1 \& IF INODE(S) operator value [unit] THEN action .Ve .PP یا: .PP .Vb 1 \& IF INODE(S) FREE operator value [unit] THEN action .Ve .PP \&\fIoperator\fR انتخابی است از میان \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c؛ مقادیر \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh؛ و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" به صورت انسان‌خوان (در صورت عدم تعیین، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR اختیاری است. اگر مشخص نشود، مقدار به‌صورت تعداد مطلق inodeها در نظر گرفته می‌شود. می‌توانید از نویسهٔ \*(L"%\*(R" یا معادل طولانی‌تر \*(L"percent\*(R" به‌عنوان واحد استفاده کنید. .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check filesystem rootfs with path / \& if inode usage > 90% then alert .Ve .SS "\s-1آزمون ورودی/خروجی دیسک (DISK I/O TEST)\s0" .IX Subsection "DISK I/O TEST" برنامهٔ Monit می‌تواند فعالیت خواندن و نوشتن سیستم‌فایل را بسنجد. این آزمون تنها در بافت یک نوع سرویس filesystem قابل استفاده است. .PP معیارهای I/O در دسترس به پلتفرم و سیستم‌فایل بستگی دارد. برخی پلتفرم‌ها اجازه می‌دهند فعالیت‌های I/O برای یک پارتیشن خاص سنجیده شود، در حالی که برخی دیگر تنها برای کل دیسک این کار را انجام می‌دهند. برخی امکان دریافت معیارها برای سیستم‌فایل‌های شبکه‌ای را فراهم می‌کنند و برخی دیگر تنها برای دستگاه‌های بلوکی (block devices). .PP میزان تفکیک‌پذیری معیارهای I/O در پلتفرم‌های مختلف و پشتیبانی سیستم‌فایل در Monit: .PP .Vb 12 \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& | 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 | | \& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .Ve .PP \fIخواندن: بایت بر ثانیه (Read: bytes per second)\fR .IX Subsection "Read: bytes per second" .PP قالب دستوری: .PP .Vb 1 \& IF READ [RATE] /S THEN action .Ve .PP \&\fIoperator\fR انتخابی است از میان \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c؛ مقادیر \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh؛ و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" به صورت انسان‌خوان (در صورت عدم تعیین، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR انتخابی است از بین \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"\s0 یا معادل‌های طولانی‌تر \*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R" و \&\*(L"percent\*(R". .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check filesystem disk1... \& if read rate > 1 MB/s then alert .Ve .PP \fIخواندن: عملیات بر ثانیه (Read: operations per second)\fR .IX Subsection "Read: operations per second" .PP قالب دستوری: .PP .Vb 1 \& IF READ [RATE] operations/S THEN action .Ve .PP \&\fIoperator\fR انتخابی است از میان \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c؛ مقادیر \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh؛ و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" به صورت انسان‌خوان (در صورت عدم تعیین، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check filesystem disk1... \& if read rate > 500 operations/s then alert .Ve .PP \fIنوشتن: بایت بر ثانیه (Write: bytes per second)\fR .IX Subsection "Write: bytes per second" .PP قالب دستوری: .PP .Vb 1 \& IF WRITE [RATE] /S THEN action .Ve .PP \&\fIoperator\fR انتخابی است از میان \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c؛ مقادیر \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh؛ و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" به صورت انسان‌خوان (در صورت عدم تعیین، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR انتخابی است از بین \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"\s0 یا معادل‌های طولانی‌تر \*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R" و \&\*(L"percent\*(R". .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check filesystem disk1... \& if write rate > 1 MB/s then alert .Ve .PP \fIنوشتن: عملیات بر ثانیه (Write: operations per second)\fR .IX Subsection "Write: operations per second" .PP قالب دستوری: .PP .Vb 1 \& IF WRITE [RATE] operations/S THEN action .Ve .PP \&\fIoperator\fR انتخابی است از میان \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c؛ مقادیر \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh؛ و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" به صورت انسان‌خوان (در صورت عدم تعیین، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check filesystem disk1... \& if write rate > 500 operations/s then alert .Ve .PP \fIزمان پاسخ‌دهی برای هر عملیات (Service time per operation)\fR .IX Subsection "Service time per operation" .PP زمان سرویس‌دهی (Service Time) مدت‌زمانی است که برای تکمیل یک عملیات خواندن یا نوشتن صرف می‌شود. این یک معیار بسیار مهم است. اگر این زمان افزایش یابد، به این معنی است که دیسک قادر نیست با سرعت کافی به عملیات‌ها رسیدگی کند. نمودارهای روند رشد در M/Monit در دسترس هستند. .PP قالب دستوری: .PP .Vb 1 \& IF SERVICE TIME THEN action .Ve .PP \&\fIoperator\fR انتخابی است از میان \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c؛ مقادیر \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh؛ و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" به صورت انسان‌خوان (در صورت عدم تعیین، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR برابر با \*(L"\s-1MS\*(R"\s0 (میلی‌ثانیه) یا \*(L"S\*(R" (ثانیه) است. .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 3 \& if service time > 10 milliseconds \& for 3 times within 5 cycles \& then alert .Ve.SS "\s-1آزمون سطح دسترسی (PERMISSION TEST)\s0" .IX Subsection "PERMISSION TEST" برنامهٔ Monit می‌تواند سطح دسترسی اشیاء فایلی را بررسی کند. این آزمون تنها در زمینهٔ انواع سرویس‌های file، fifo، directory یا filesystem قابل استفاده است. .PP نحو برای آزمودن یک سطح دسترسی مشخص: .PP .Vb 1 \& IF FAILED PERM(ISSION) octalnumber THEN action .Ve .PP نحو برای آزمودن هرگونه تغییر در سطح دسترسی: .PP .Vb 1 \& IF CHANGED PERM(ISSION) THEN action .Ve .PP \&\fIoctalnumber\fR سطح دسترسی یک فایل، دایرکتوری یا سیستم‌فایل را به‌صورت چهار رقم در مبنای هشت (0\-7) مشخص می‌کند. محدودهٔ معتبر 0000 \- 7777 است (می‌توانید صفرهای ابتدایی را حذف کنید، Monit صفرها را از سمت چپ اضافه خواهد کرد. برای نمونه، \*(L"640\*(R" مقداری معتبر بوده و با \*(L"0640\*(R" مطابقت دارد). .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check file shadow with path /etc/shadow \& if failed permission 0640 then alert .Ve .SS "\s-1آزمون شناسه کاربر (UID TEST)\s0" .IX Subsection "UID TEST" برنامهٔ Monit می‌تواند شناسهٔ کاربری (uid) مالک یک file، fifo، directory یا کاربر مالک و مؤثر یک فرآیند را پایش کند. .PP نحو: .PP .Vb 1 \& IF FAILED [E]UID THEN action .Ve .PP \&\fIvalue\fR شناسهٔ کاربر را به‌صورت عددی یا رشته‌ای تعیین می‌کند. .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check file shadow with path /etc/shadow \& if failed uid "root" then alert .Ve .SS "\s-1آزمون شناسه گروه (GID TEST)\s0" .IX Subsection "GID TEST" برنامهٔ Monit می‌تواند شناسهٔ گروهِ (gid) مالک یک file، fifo، directory یا فرآیند را پایش کند. .PP نحو: .PP .Vb 1 \& IF FAILED GID THEN action .Ve .PP \&\fIvalue\fR شناسهٔ گروه را به‌صورت عددی یا رشته‌ای تعیین می‌کند. .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال: .PP .Vb 2 \& check file shadow with path /etc/shadow \& if failed gid "shadow" then alert .Ve .SS "\s-1آزمون پیوند سخت (HARDLINK TEST)\s0" .IX Subsection "HARDLINK TEST" دستور hardlink می‌تواند در مدخل سرویس‌های check file، fifo یا directory استفاده شود. در صورت تعیین در فایل کنترلی، Monit تعداد پیوندهای سخت را برای یک file، fifo یا directory محاسبه خواهد کرد. .PP آزمودن یک مقدار مشخص: .PP .Vb 1 \& IF HARDLINK [[operator] value] THEN action .Ve .PP آزمودن تغییرات پیوند سخت: .PP .Vb 1 \& IF CHANGED HARDLINK THEN action .Ve .PP \&\fIoperator\fR انتخابی است از میان \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان C، \&\*(L"\s-1GT\*(R"، \*(L"LT\*(R"، \*(L"EQ\*(R"، \*(L"NE\*(R"\s0 در نشانه‌گذاری شل sh، و \*(L"\s-1GREATER\*(R"، \&\*(L"LESS\*(R"، \*(L"EQUAL\*(R"، \*(L"NOTEQUAL\*(R"\s0 به‌شکل خوانا برای انسان (در صورت عدم تعیین، مقدار پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIvalue\fR مقدار آستانه (watermark) است. .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP برای نمونه، جهت ارسال هشدار در صورتی که تعداد پیوندهای سخت استفاده‌شده برای یک دایرکتوری بیش از حد زیاد باشد: .PP .Vb 2 \& check directory upload with path /data/upload \& if hardlink > 32000 then alert .Ve .SS "\s-1آزمون شناسه فرآیند (PID TEST)\s0" .IX Subsection "PID TEST" برنامهٔ Monit می‌تواند \s-1PID\s0 فرآیند را بررسی کند. در صورتی که \s-1PID\s0 خارج از کنترل Monit تغییر کند، هشداری ارسال خواهد شد. .PP نحو: .PP .Vb 1 \& IF CHANGED PID THEN action .Ve .PP \&\fIaction\fR انتخابی است از میان \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP این آزمون برای تشخیص راه‌اندازی‌های مجدد احتمالی فرآیند که در بازهٔ زمانی میان دو چرخهٔ آزمون Monit رخ داده‌اند، بسیار مفید است. .PP برای نمونه، اگر فردی پیکربندی sshd را تغییر داده و sshd را خارج از کنترل Monit مجدداً راه‌اندازی کند، به شما اطلاع داده خواهد شد که فرآیند با یک نمونهٔ جدید جایگزین شده است: .PP .Vb 2 \& check process sshd with pidfile /var/run/sshd.pid \& if changed pid then alert .Ve.SS "\s-1آزمون PPID\s0" .IX Subsection "PPID TEST" برنامهٔ Monit می‌تواند تغییرات \s-1PID\s0 والد پردازه (\s-1PPID\s0) را بررسی کند. در صورتی که \s-1PPID\s0 خارج از کنترل Monit تغییر کند، Monit یک هشدار ارسال خواهد کرد. .PP نحو دستور ppid به صورت زیر است: .PP .Vb 1 \& IF CHANGED PPID THEN action .Ve .PP \&\fIaction\fR یکی از گزینه‌های \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال: .PP .Vb 2 \& check process myproc with pidfile /var/run/myproc.pid \& if changed ppid then exec "/my/script" .Ve .SS "\s-1آزمون UPTIME\s0" .IX Subsection "UPTIME TEST" دستور uptime تنها در بافتار سرویس‌های نوع پردازه و سیستم قابل استفاده است. .PP نحو: .PP .Vb 1 \& IF UPTIME [[operator] value [unit]] THEN action .Ve .PP \&\fIoperator\fR یکی از موارد \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری C، \&\*(L"\s-1GT\*(R"، \*(L"LT\*(R"، \*(L"EQ\*(R"، \*(L"NE\*(R"\s0 در نشانه‌گذاری پوستهٔ sh، و \*(L"\s-1GREATER\*(R"، \&\*(L"LESS\*(R"، \*(L"EQUAL\*(R"، \*(L"NOTEQUAL\*(R"\s0 در فرم خوانا برای انسان است (اگر مشخص نشود، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIvalue\fR آستانهٔ uptime است. .PP \&\fIunit\fR یکی از موارد \*(L"\s-1SECOND\*(R"، \*(L"MINUTE\*(R"، \*(L"HOUR\*(R"\s0 یا \*(L"\s-1DAY\*(R"\s0 است (همچنین استفاده از \*(L"\s-1SECONDS\*(R"، \*(L"MINUTES\*(R"، \*(L"HOURS\*(R"\s0 یا \*(L"\s-1DAYS\*(R"\s0 نیز امکان‌پذیر است). .PP \&\fIaction\fR یکی از گزینه‌های \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال برای راه‌اندازی مجدد پردازه در هر سه روز: .PP .Vb 4 \& 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 .Ve .SS "\s-1آزمون ویژگی امنیتی (SECURITY ATTRIBUTE)\s0" .IX Subsection "SECURITY ATTRIBUTE TEST" دستور ویژگی امنیتی (security attribute) تنها در بافتار پردازه قابل استفاده است. .PP نحو: .PP .Vb 1 \& IF SECURITY ATTRIBUTE THEN .Ve .PP \&\fIoperator\fR یکی از موارد زیر است: \*(L"=\*(R" برای تطابق کامل رشته، \&\*(L"!=\*(R" برای عدم تطابق کامل رشته، \&\*(L"=~\*(R" برای تطابق با عبارت باقاعده، یا \*(L"!=~\*(R" برای عدم تطابق با عبارت باقاعده. .PP \&\fIregex\fR رشته‌ای حاوی متن یا عبارت باقاعدهٔ گسترش‌یافته است. همچنین \fBregex\fR\|(7) را ببینید. .PP \&\fIaction\fR یکی از گزینه‌های \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP برای سازگاری با نسخه‌های پیشین، نحو زیر پشتیبانی می‌شود و معادل با عدم تطابق کامل رشته است: .PP .Vb 1 \& IF FAILED SECURITY ATTRIBUTE THEN .Ve .PP \&\fIstring\fR مقدار مورد انتظار ویژگی امنیتی است. .PP \&\fIaction\fR یکی از گزینه‌های \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال برای SELinux: .PP .Vb 2 \& check process ntpd matching "ntpd" \& if security attribute != "system_u:system_r:ntpd_t:s0" then alert .Ve .PP مثال برای AppArmor: .PP .Vb 2 \& check process ntpd matching "ntpd" \& if security attribute != "/usr/sbin/ntpd (enforce)" then alert .Ve .SS "\s-1آزمون توصیف‌گرهای فایل در سطح سیستم و هر پردازه\s0" .IX Subsection "SYSTEM AND PER-PROCESS FILEDESCRIPTORS TEST" برنامهٔ Monit می‌تواند میزان استفاده از توصیف‌گرهای فایل را در سطح سیستم و پردازه بررسی کند. شما می‌توانید یک مقدار مطلق یا درصد استفاده از بیشینهٔ مجاز فعلی را بررسی کنید. استفاده از درصد به ازای هر پردازه تنها در صورتی ممکن است که سیستم، بیشینهٔ مجاز برای هر پردازه را ارائه دهد. .PP نحو: .PP .Vb 1 \& IF FILEDESCRIPTORS [%] THEN action .Ve .PP تنها برای پردازه، می‌توانید تعداد تجمیعی توصیف‌گرها را برای پردازه و تمام فرزندان آن نیز بررسی کنید. .PP نحو: .PP .Vb 1 \& IF TOTAL FILEDESCRIPTORS THEN action .Ve .PP \&\fIoperator\fR یکی از موارد \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری C، \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در فرم خوانا برای انسان است (اگر مشخص نشود، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fInumber\fR حد مجاز (محدودیت). .PP \&\fIaction\fR یکی از گزینه‌های \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال‌ها: .PP .Vb 2 \& 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 .Ve.SS "\s-1آزمون وضعیت برنامه (PROGRAM STATUS TEST)\s0" .IX Subsection "PROGRAM STATUS TEST" شما می‌توانید وضعیت خروج (exit status) یک برنامه یا یک اسکریپت را بررسی کنید. این آزمون تنها می‌تواند درون یک مدخل سرویس check program در فایل کنترلی Monit استفاده شود. .PP نحو بررسی یک مقدار خروج خاص: .PP .Vb 1 \& IF STATUS operator value THEN action .Ve .PP نحو بررسی هرگونه تغییر در مقدار خروج: .PP .Vb 1 \& IF CHANGED STATUS THEN action .Ve .PP \&\fIoperator\fR انتخابی از بین \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان C، گزینه‌های \*(L"gt\*(R"، \*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری شل sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \*(L"equal\*(R"، \*(L"notequal\*(R" به صورت خوانا برای انسان است (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIaction\fR انتخابی از بین \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال: .PP .Vb 2 \& check program myscript with path /usr/local/bin/myscript.sh \& if status != 0 then alert .Ve .PP اسکریپت نمونه برای مثال بالا (/usr/local/bin/myscript.sh): .PP .Vb 3 \& #!/bin/sh \& echo test \& exit $? .Ve .PP همچنین می‌توانید پارامترهایی را به همراه برنامه ارسال کنید: .PP .Vb 2 \& check program list\-files with path "/bin/ls \-lrt /tmp/" \& if status != 0 then alert .Ve .PP آرگومان‌های برنامه یا اسکریپت توالی‌ای از رشته‌های جدا شده با فاصله (whitespace) هستند. در مثال بالا رشته‌های '\-lrt' و '/tmp/' آرگومان‌های برنامه '/bin/ls' می‌باشند. اگر از آرگومان‌ها استفاده می‌شود، توصیه می‌شود برای محصور کردن رشته از علامت نقل‌قول \fB"\fR استفاده کنید، در غیر این صورت، چنانچه آرگومانی به کار نرفته باشد، نیازی به نقل‌قول نیست. .PP نکات: اگر برنامه یک اسکریپت است، درج مفسر در خط اول الزامی است. برنامه یا اسکریپت باید قابل اجرا نیز باشد. .PP اگر Monit با دسترسی کاربر ریشه (superuser) اجرا شود، می‌توانید به صورت اختیاری برنامه را با یک کاربر و/یا گروه دیگر اجرا کنید. در این مثال ما برنامه \fIls\fR را با کاربر www و گروه staff اجرا می‌کنیم: .PP .Vb 4 \& check program ls with path "/bin/ls /tmp" \& as uid "www" \& and gid "staff" \& if status != 0 then alert .Ve .PP Monit برنامه را به صورت دوره‌ای اجرا خواهد کرد و اگر وضعیت خروج برنامه با نتیجه مورد انتظار مطابقت نداشته باشد، Monit می‌تواند اقدامی را انجام دهد. در مثال بالا، اگر مقدار خروج مقداری غیر از 0 باشد، Monit یک هشدار صادر خواهد کرد. طبق قرارداد، 0 به این معنی است که برنامه به طور عادی خارج شده است. .PP بررسی‌های برنامه غیرهمگام (asynchronous) هستند؛ بدین معنا که Monit منتظر خروج برنامه نخواهد ماند، بلکه در عوض برنامه را در پس‌زمینه اجرا کرده و بلافاصله بررسی مدخل سرویس بعدی را در \&\fImonitrc\fR ادامه می‌دهد. در چرخه بعدی، Monit بررسی خواهد کرد که آیا برنامه خاتمه یافته است یا خیر و در این صورت، وضعیت خروج برنامه را دریافت می‌کند. اگر وضعیت نشان‌دهنده یک خطا باشد، Monit یک پیام هشدار شامل خروجی خطای برنامه (stderr)، در صورت وجود، صادر خواهد کرد. اگر برنامه پس از چرخه اول خارج نشده باشد، Monit یک چرخه دیگر منتظر می‌ماند و به همین ترتیب ادامه می‌دهد. اگر برنامه پس از 5 دقیقه همچنان در حال اجرا باشد، Monit آن را خاتمه داده (kill می‌کند) و یک رویداد اتمام مهلت زمانی برنامه (timeout) ایجاد خواهد کرد. بازنویسی این مهلت زمانی پیش‌فرض امکان‌پذیر است (نحو زیر را ببینید). .PP می‌توان از چندین آزمون وضعیت استفاده کرد، برای مثال: .PP .Vb 4 \& 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" .Ve .SS "\s-1آزمون محتوای خروجی برنامه (PROGRAM OUTPUT CONTENT TEST)\s0" .IX Subsection "PROGRAM OUTPUT CONTENT TEST" دستور content می‌تواند هم برای بررسی محتوای خروجی یک برنامه با استفاده از عبارت‌های باقاعده (regular expressions) و هم برای بررسی تغییرات در خروجی به کار رود. .PP نحو: .PP .Vb 2 \& IF CONTENT THEN action \& IF CONTENT [NOT] CHANGED THEN action .Ve .PP \&\fIoperator\fR یا \*(L"=\*(R" برای تطابق و یا \*(L"!=\*(R" برای عدم تطابق است. .PP \&\fIregex\fR رشته‌ای حاوی عبارت باقاعده تعمیم‌یافته (extended regular expression) است. همچنین ببینید \fBregex\fR\|(7). .PP \&\fIaction\fR انتخابی از بین \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP به صورت پیش‌فرض بررسی خروجی تنها به 511 نویسه محدود است. می‌توانید با استفاده از دستور set limits این محدودیت را افزایش دهید. .PP مثال‌ها: .PP .Vb 2 \& 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 .Ve.SS "\s-1آزمون‌های رابط شبکه (NETWORK INTERFACE TESTS)\s0" .IX Subsection "NETWORK INTERFACE TESTS" Monit می‌تواند رابط‌های شبکه را برای موارد زیر بررسی کند: .IP "وضعیت" 3 .IX Item "Status" .PD 0 .IP "ظرفیت" 3 .IX Item "Capacity" .IP "اشباع" 3 .IX Item "Saturation" .IP "بارگذاری و بارگیری [بایت]" 3 .IX Item "Upload and download [bytes]" .IP "بارگذاری و بارگیری [بسته]" 3 .IX Item "Upload and download [packets]" .PD .PP \fIوضعیت پیوند (Link status)\fR .IX Subsection "Link status" .PP شما می‌توانید وضعیت پیوند شبکه را بررسی کنید. این آزمون تنها می‌تواند درون یک مدخل سرویس check network در فایل کنترلی Monit استفاده شود. .PP نحو: .PP .Vb 1 \& IF LINK THEN action .Ve .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP آزمون \fI\s-1DOWN\s0\fR در صورتی که پیوند/رابط قطع باشد یا خطاهای پیوند شناسایی شوند، شکست خواهد خورد. .PP ترکیب \*(L"link up\*(R" و \*(L"link down\*(R" در یک \*(L"check network\*(R" یکسان پشتیبانی نمی‌شود. .PP مثال‌ها: .PP .Vb 2 \& 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" .Ve .PP در صورتی که یک پیوند با شکست مواجه شود، می‌توانید برنامه‌های start و stop را اضافه کنید تا رابط به‌طور خودکار راه‌اندازی مجدد شود که ممکن است کارساز باشد. (آن‌ها را با دستورهای شبکه مرتبط با سیستم خود جایگزین کنید) .PP .Vb 4 \& check network eth0 with interface eth0 \& start program = \*(Aq/sbin/ipup eth0\*(Aq \& stop program = \*(Aq/sbin/ipdown eth0\*(Aq \& if link down then restart .Ve .PP \fIظرفیت پیوند (Link capacity)\fR .IX Subsection "Link capacity" .PP شما می‌توانید ظرفیت حالت پیوند شبکه را برای تغییرات بررسی کنید. این آزمون تنها می‌تواند درون یک مدخل سرویس check network در فایل کنترلی Monit استفاده شود. .PP نحو: .PP .Vb 1 \& IF CHANGED LINK [CAPACITY] THEN action .Ve .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP اگر حالت پیوند تغییر کرده باشد (برای مثال حداکثر سرعت کاهش یافته باشد) یا حالت دوطرفه (duplex) تغییر کرده باشد، این آزمون مطابقت خواهد داشت. .PP \&\s-1نکته:\s0 همه انواع رابط‌ها اجازه نظارت بر ظرفیت را نمی‌دهند. شبه‌رابط‌ها مانند دستگاه loopback یا رابط‌های VMWare ویژگی speed ندارند. .PP مثال: .PP .Vb 2 \& check network eth0 with interface eth0 \& if changed link capacity then alert .Ve .PP \fIاشباع پیوند (Link saturation)\fR .IX Subsection "Link saturation" .PP شما می‌توانید میزان اشباع پیوند شبکه را بررسی کنید. سپس Monit میزان بهره‌وری از پیوند را بر اساس نرخ انتقال فعلی در برابر ظرفیت پیوند محاسبه می‌کند. این آزمون تنها می‌تواند درون یک مدخل سرویس check network در فایل کنترلی Monit استفاده شود. .PP نحو: .PP .Vb 1 \& IF SATURATION operator value% THEN action .Ve .PP \&\fIoperator\fR انتخابی از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c، \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری شل sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالب انسان‌خوان است (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP \&\s-1نکته:\s0 این آزمون به در دسترس بودن ویژگی speed بستگی دارد و همه انواع رابط‌ها این ویژگی را ندارند. توضیحات آزمون \s-1LINK SPEED\s0 را ببینید. .PP مثال: .PP .Vb 2 \& check network eth0 with interface eth0 \& if saturation > 90% then alert .Ve .PP \fIبارگذاری و بارگیری پیوند [بایت]\fR .IX Subsection "Link upload and download [bytes]" .PP شما می‌توانید میزان مصرف پهنای باند بارگذاری و بارگیری، سرعت انتقال فعلی و کل داده‌های منتقل‌شده در ۲۴ ساعت گذشته یک پیوند شبکه را بررسی کنید. این آزمون تنها می‌تواند در مدخل سرویس \fIcheck network\fR در فایل کنترلی Monit استفاده شود. .PP نحو آزمون سرعت بارگذاری (بر ثانیه): .PP .Vb 1 \& IF UPLOAD operator value unit/S THEN action .Ve .PP نحو آزمون سرعت بارگیری (بر ثانیه): .PP .Vb 1 \& IF DOWNLOAD operator value unit/S THEN action .Ve .PP نحو آزمون کل داده‌های بارگذاری‌شده: .PP .Vb 1 \& IF TOTAL UPLOADED operator value unit IN LAST number time\-unit THEN action .Ve .PP نحو آزمون کل داده‌های بارگیری‌شده: .PP .Vb 1 \& IF TOTAL DOWNLOADED operator value unit IN LAST number time\-unit THEN action .Ve .PP \&\fIoperator\fR انتخابی از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c، \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری شل sh، و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالب انسان‌خوان است (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fIunit\fR انتخابی از \*(L"B\*(R"، \*(L"\s-1KB\*(R"، \*(L"MB\*(R"، \*(L"GB\*(R"\s0 یا جایگزین‌های کامل \&\*(L"byte\*(R"، \*(L"kilobyte\*(R"، \*(L"megabyte\*(R"، \*(L"gigabyte\*(R" است. .PP \&\fItime-unit\fR انتخابی از \*(L"\s-1MINUTE\s0(S)\*(R"، \*(L"\s-1HOUR\s0(S)\*(R"، \*(L"\s-1DAY\*(R" است. \s-1نکته:\s0 Monit شمارش چرخشی کل بایت‌های بارگذاری و بارگیری‌شده را تنها برای ۲۴ ساعت گذشته نگهداری می‌کند. بنابراین مقدار time-unit نمی‌تواند بازه‌ای بزرگ‌تر از یک روز را مشخص کند. .PP \&\fIaction\fR انتخابی از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP مثال‌ها: .PP .Vb 4 \& 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 .Ve .PP \fIبارگذاری و بارگیری پیوند [بسته]\fR .IX Subsection "Link upload and download [packets]" .PP شما می‌توانید تعداد بسته‌های بارگذاری و بارگیری پیوند شبکه، نرخ انتقال فعلی و کل داده‌های منتقل‌شده در ۲۴ ساعت گذشته را بررسی کنید. این آزمون تنها می‌تواند در مدخل سرویس check network در فایل کنترلی Monit استفاده شود. .PP نحو آزمون نرخ پهنای باند فعلی بارگذاری: .PP .Vb 1 \& IF UPLOAD operator value PACKETS/S THEN action .Ve .PP نحو آزمون نرخ پهنای باند فعلی بارگیری: .PP .Vb 1 \& IF DOWNLOAD operator value PACKETS/S THEN action .Ve .PP نحو آزمون کل بارگذاری: .PP .Vb 1 \& IF TOTAL UPLOADED operator value PACKETS IN LAST number time\-unit THEN action .Ve.PP نحو آزمون مجموع دریافت (Total download): .PP .Vb 1 \& IF TOTAL DOWNLOADED operator value PACKETS IN LAST number time\-unit THEN action .Ve .PP \&\fIoperator\fR انتخابی است از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری c، \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالب خوانا برای انسان (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fItime-unit\fR انتخابی است از \*(L"\s-1MINUTE\s0(S)\*(R"، \*(L"\s-1HOUR\s0(S)\*(R"، \*(L"\s-1DAY\*(R". \s-1نکته:\s0 Monit آمار کل بارگذاری/بارگیری را تنها برای ۲۴ ساعت گذشته نگهداری می‌کند. بنابراین مقدار time-unit نمی‌تواند بیش از یک روز را شامل شود. .PP \&\fIaction\fR انتخابی است از \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \&\*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R".\s0 .PP مثال‌ها: .PP .Vb 3 \& check network eth0 with interface eth0 \& if upload > 1000 packets/s then alert \& if total uploaded > 900000 packets in last hour then alert .Ve .SS "\s-1آزمون پینگ شبکه (NETWORK PING TEST)\s0" .IX Subsection "NETWORK PING TEST" برنامهٔ Monit می‌تواند با ارسال بسته‌های دیتاگرام echo request با پروتکل \s-1ICMP\s0 به یک میزبان و منتظر ماندن برای پاسخ، یک آزمون پینگ شبکه را انجام دهد. این آزمون تنها درون عبارت check host قابل استفاده است. همچنین Monit باید با کاربر root اجرا شود تا بتواند آزمون پینگ را انجام دهد (زیرا آزمون پینگ باید از سوکت‌های raw استفاده کند که معمولاً فقط کاربر ارشد اجازهٔ استفاده از آن را دارد). .PP نحو: .PP .Vb 7 \& IF PING[4|6] \& [COUNT number] \& [SIZE number] \& [RESPONSETIME operator number ] \& [TIMEOUT number SECONDS] \& [ADDRESS string] \& THEN action .Ve .PP اگر یک نام میزبان \s-1DNS\s0 در دستور \fIcheck host\fR استفاده شده باشد و نام میزبان به چند آدرس (خواه IPv4 یا IPv6) تحلیل شود، Monit نخستین آدرس در دسترس را پینگ می‌کند و به سراغ آدرس بعدی می‌رود تا زمانی که یک اتصال موفق شود یا آدرس دیگری برای آزمودن باقی نماند. می‌توانید Monit را با استفاده از کلیدواژهٔ \s-1PING4\s0 یا \s-1PING6\s0 به جای \s-1PING\s0 مجبور کنید که تنها آدرس‌های IPv4 یا IPv6 را پینگ کند. .PP پارامتر \fB\s-1COUNT\s0\fR مشخص می‌کند که حداکثر چند درخواست پینگ متوالی در یک چرخه به میزبان ارسال شود. مقدار پیش‌فرض ۳ است. .PP پارامتر \fB\s-1SIZE\s0\fR اندازهٔ بار دادهٔ (payload) درخواست پینگ را تعیین می‌کند. پیش‌فرض ۶۴ بایت، حداقل ۸ بایت و حداکثر ۱۴۹۲ بایت است. .PP پارامتر \fB\s-1RESPONSETIME\s0\fR حد زمان پاسخ را تعیین می‌کند. \fIoperator\fR انتخابی است از \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری c، \*(L"gt\*(R"، \&\*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh و \*(L"greater\*(R"، \*(L"less\*(R"، \&\*(L"equal\*(R"، \*(L"notequal\*(R" در قالب خوانا برای انسان (در صورت عدم تعیین، پیش‌فرض \s-1EQUAL\s0 است). .PP اگر هیچ پاسخی در مدت \fB\s-1TIMEOUT\s0\fR ثانیه نرسد، Monit یک خطا گزارش می‌کند. اگر حداقل یک پاسخ دریافت شود، آزمون پینگ موفقیت‌آمیز تلقی می‌شود. .PP پارامتر \fB\s-1ADDRESS\s0\fR آدرس \s-1IP\s0 مبدأ را تعیین می‌کند. .PP برنامهٔ Monit به طور پیش‌فرض تا \fIسه\fR بستهٔ درخواست پینگ را در یک چرخه ارسال می‌کند تا از هشدارهای کاذب جلوگیری شود (یعنی تا ۶۶٪ افت بسته تحمل می‌شود). می‌توانید گزینهٔ \fB\s-1COUNT\s0\fR را روی مقداری بین ۱ تا ۲۰ تنظیم کنید تا بسته‌های بیشتر یا کمتری ارسال شوند. اگر به موفقیت ۱۰۰٪ در پینگ نیاز دارید، تعداد را روی ۱ تنظیم کنید (یعنی فقط یک درخواست ارسال می‌شود و در صورت مفقود شدن بسته، یک خطا گزارش خواهد شد). .PP توجه داشته باشید که امروزه بسیاری از ISPها شروع به فیلتر کردن بسته‌های پینگ یا \s-1ICMP\s0 کرده‌اند، که در این حالت هیچ پاسخی از میزبان دریافت نخواهد شد. .PP اگر از آزمون پینگ در یک مدخل check host استفاده شود، این آزمون در ابتدا اجرا می‌شود و در صورت شکست آن، فرض بر این خواهد بود که اتصال به میزبان قطع است و Monit هیچ‌یک از آزمون‌های درگاه بعدی را ادامه \fIنخواهد\fR داد. .PP مثال: .PP .Vb 2 \& 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 .Ve .PP یا آزمودن اینکه سیستم به طور مشخص از طریق IPv4 و IPv6 قابل دسترسی است: .PP .Vb 3 \& check host mmonit.com with address mmonit.com \& if failed ping4 then alert # IPv4 only \& if failed ping6 then alert # IPv6 only .Ve .PP یا با تمام پارامترها؛ ارسال پنج پینگ ۱۲۸ بایتی به mmonit.com و انتظار تا ۱۰ ثانیه برای پاسخ .PP .Vb 2 \& check host mmonit.com with address mmonit.com \& if failed ping count 5 size 128 with timeout 10 seconds then alert .Ve .PP همچنین می‌توانید میزبانی را که فرض می‌شود آفلاین باشد نظارت کنید: .PP .Vb 2 \& check host offlinehost with address 192.168.100.50 \& if succeeded ping then alert .Ve .SS "\s-1آزمون‌های اتصال (CONNECTION TESTS)\s0" .IX Subsection "CONNECTION TESTS" نرم‌افزار Monit می‌تواند آزمون اتصال را از طریق درگاه‌های شبکه یا از طریق سوکت‌های Unix انجام دهد. یک آزمون اتصال تنها می‌تواند در زمینهٔ نوع سرویس process یا host استفاده شود. .PP اگر سرویسی روی یک یا چند سوکت به گوش باشد، Monit می‌تواند به آن درگاه متصل شده (با استفاده از \s-1TCP\s0 یا \s-1UDP\s0) و صحت این موضوع را که سرویس اتصال را می‌پذیرد و امکان نوشتن و خواندن از سوکت وجود دارد، بررسی کند. اگر اتصالی پذیرفته نشود یا مشکلی در ورودی/خروجی سوکت وجود داشته باشد، Monit یک کنش مشخص‌شده را به اجرا درمی‌آورد. .PP برای درگاه‌های \s-1TCP/UDP\s0، نرم‌افزار Monit می‌تواند در صورت موفقیت اتصال هشدار دهد؛ برای مثال هنگامی که سرویسی مانند mysql نباید به صورت عمومی در دسترس باشد. .PP نحو آزمون درگاه \s-1TCP/UDP\s0: .PP .Vb 10 \& IF \& [HOST string] \& \& [ADDRESS string] \& [IPV4 | IPV6] \& [TYPE ] \& [ [with options {...}] \& [CERTIFICATE CHECKSUM [MD5|SHA1|SHA256] string] \& [CERTIFICATE VALID for number DAYS] \& [PROTOCOL protocol | "string",...] \& [RESPONSETIME operator number ] \& [TIMEOUT number SECONDS] \& [RETRY number] \& THEN action .Ve .PP نحو آزمون سوکت Unix: .PP .Vb 8 \& IF \& \& [TYPE ] \& [PROTOCOL protocol | "string",...] \& [RESPONSETIME operator number ] \& [TIMEOUT number SECONDS] \& [RETRY number] \& THEN action .Ve .PP مثال‌ها: .PP .Vb 1 \& 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 .Ve .PP گزینه‌ها: .PP \&\fI\s-1HOST\s0 hostname\fR. به صورت اختیاری میزبان مورد نظر برای اتصال را مشخص می‌کند. اگر میزبان ارائه نشده باشد و این آزمون در یک مدخل process استفاده شده باشد، localhost فرض می‌شود. اگر این آزمون درون یک مدخل remote host استفاده شده باشد، میزبان دوردست آن مدخل فرض خواهد شد. .PP \&\fI\s-1PORT\s0 number\fR. شماره درگاهی که باید به آن متصل شد .PP \&\fI\s-1UNIXSOCKET\s0 path\fR. مسیر یک سوکت Unix را مشخص می‌کند (فقط ماشین محلی). .PP \&\fI\s-1ADDRESS\s0 string\fR. آدرس \s-1IP\s0 مبدأ برای استفاده. .PP \&\fI\s-1IPV4\s0 | \s-1IPV6\s0 \fR. به صورت اختیاری نسخهٔ \s-1IP\s0 را مشخص می‌کند که Monit هنگام تلاش برای اتصال به درگاه باید استفاده کند. در صورت عدم استفاده، Monit تلاش می‌کند به اولین آدرس در دسترس (IPv4 یا IPv6) وصل شود. اگر چندین آدرس موجود باشد و اتصال به یکی از آدرس‌ها شکست بخورد، Monit آدرس بعدی را امتحان می‌کند و این کار ادامه می‌یابد تا زمانی که یک اتصال موفق شود یا دیگر آدرسی برای امتحان باقی نماند. .PP \&\fI\s-1TYPE\s0 [\s-1TCP\s0 | \s-1UDP\s0]\fR. به صورت اختیاری نوع سوکتی را مشخص می‌کند که Monit باید هنگام تلاش برای اتصال به درگاه استفاده کند. انواع مختلف سوکت عبارتند از: \s-1TCP\s0 یا \s-1UDP\s0، که در آن \s-1TCP\s0 یک سوکت معمولی بر پایهٔ جریان داده (stream) و \s-1UDP\s0 یک سوکت دیتاگرام است. نوع پیش‌فرض سوکت \s-1TCP\s0 است..PP \&\fI[\s-1SSL\s0 | \s-1TLS\s0] [with options {...}]\fR. گزینه‌های \s-1SSL/TLS\s0 را تنظیم کرده و گزینه‌های سراسری/پیش‌فرض \s-1SSL\s0 را بازنویسی می‌کند. می‌توانید نسخهٔ \s-1SSL/TLS\s0 مورد استفاده، بررسی گواهی‌ها، اعتماد به گواهی‌های خودامضاشده یا تنظیم فایل پایگاه‌دادهٔ گواهی‌های کلاینت \s-1SSL\s0 را برای احراز هویت با گواهی کلاینت تعیین کنید. .PP \&\fI\s-1CERTIFICATE CHECKSUM\s0 [MD5|SHA1|SHA256] hash\fR. گواهی کارساز \s-1SSL\s0 را با بررسی جمع مقابله‌ای (checksum) آن اعتبارسنجی می‌کند. می‌توانید از جمع مقابله‌ای \s-1MD5\s0، \s-1SHA1\s0 یا \s-1SHA256\s0 استفاده کنید (اگر نوع را مشخص نکنید، Monit خلاصه را بر اساس طول هش تعیین خواهد کرد). استفاده از \s-1SHA256\s0 برای امنیت رمزنگاری بهتر توصیه می‌شود. می‌توانید از ابزار خط فرمان \fIopenssl\fR برای به‌دست آوردن مقدار جمع مقابله‌ای گواهی خود استفاده کنید، که سپس می‌توانید آن را در فایل کنترلی Monit به‌کار ببرید: .PP .Vb 1 \& openssl x509 \-fingerprint \-sha256 \-in server.crt | head \-1 | cut \-f2 \-d\*(Aq=\*(Aq .Ve .PP مثال: .PP .Vb 5 \& if failed \& port 443 \& protocol https \& and certificate checksum = "1ED948A6F4258ACAB964227EF4EB19FCC453B0F8" \& then alert .Ve .PP \&\fI\s-1CERTIFICATE VALID\s0 for number \s-1DAYS\s0\fR. در صورتی که گواهی در تعداد روز مشخص‌شده منقضی شود، یک هشدار ارسال می‌کند. این آزمایش برای دریافت اعلان هنگام فرارسیدن زمان تمدید گواهی \s-1SSL\s0 بسیار مفید است. .PP مثال: .PP .Vb 5 \& if failed \& port 443 \& protocol https \& and certificate valid > 30 days \& then alert .Ve .PP \&\fI\s-1PROTOCOL\s0 protocol\fR. به‌صورت اختیاری پروتکلی را که Monit باید پس از برقراری اتصال با آن گفتگو کند، مشخص می‌کند. در حال حاضر Monit این پروتکل‌ها را می‌شناسد: \fIAPACHE-STATUS\fR \fI\s-1DNS\s0\fR \fI\s-1DWP\s0\fR \fI\s-1FAIL2BAN\s0\fR \fI\s-1FTP\s0\fR \fI\s-1GPS\s0\fR \fI\s-1HTTP\s0\fR \fI\s-1HTTPS\s0\fR \fI\s-1IMAP\s0\fR \fI\s-1IMAPS\s0\fR \fI\s-1CLAMAV\s0\fR \fI\s-1LDAP2\s0\fR \fI\s-1LDAP3\s0\fR \fI\s-1LMTP\s0\fR \fI\s-1MEMCACHE\s0\fR \fI\s-1MONGODB\s0\fR \fI\s-1MQTT\s0\fR \fI\s-1MYSQL\s0\fR \fI\s-1MYSQLS\s0\fR \fI\s-1NNTP\s0\fR \fI\s-1NTP3\s0\fR \fI\s-1PGSQL\s0\fR \fI\s-1POP\s0\fR \fI\s-1POPS\s0\fR \fIPOSTFIX-POLICY\fR \fI\s-1RADIUS\s0\fR \fI\s-1RDATE\s0\fR \fI\s-1REDIS\s0\fR \fI\s-1RSYNC\s0\fR \fI\s-1SIEVE\s0\fR \fI\s-1SIP\s0\fR \fI\s-1SMTP\s0\fR \fI\s-1SMTPS\s0\fR \fI\s-1SPAMASSASSIN\s0\fR \fI\s-1SSH\s0\fR \fI\s-1TNS\s0\fR \fI\s-1WEBSOCKET\s0\fR .PP اگر پروتکل سرور مقصد در این فهرست پیدا نشد، کافی است پروتکل را مشخص نکنید تا Monit از یک آزمایش اتصال پیش‌فرض استفاده کند. .PP پارامتر \fI\s-1RESPONSETIME\s0\fR محدودیت زمان پاسخ را تعیین می‌کند. \fIoperator\fR انتخابی از بین \*(L"<\*(R"، \*(L">\*(R"، \*(L"!=\*(R"، \*(L"==\*(R" در نشانه‌گذاری زبان c؛ \*(L"gt\*(R"، \*(L"lt\*(R"، \*(L"eq\*(R"، \*(L"ne\*(R" در نشانه‌گذاری پوستهٔ sh؛ و \*(L"greater\*(R"، \*(L"less\*(R"، \*(L"equal\*(R"، \*(L"notequal\*(R" در قالب قابل‌فهم برای انسان است (اگر مشخص نشود، پیش‌فرض \s-1EQUAL\s0 است). .PP \&\fI\s-1TIMEOUT\s0 number \s-1SECONDS\s0\fR. به‌طور اختیاری مهلت زمانی (timeout) اتصال و خواندن را برای اتصال مشخص می‌کند. اگر Monit نتواند ظرف این زمان به سرور متصل شود، فرض می‌کند اتصال ناموفق بوده و کنشِ تعیین‌شده را اجرا می‌کند. مهلت زمانی اتصال پیش‌فرض ۵ ثانیه است. .PP \&\fI\s-1RETRY\s0 number\fR. به‌طور اختیاری تعداد تلاش‌های مجدد پیاپی در همان چرخهٔ آزمایش را در صورتی که اتصال ناموفق باشد، مشخص می‌کند. مقدار پیش‌فرض، شکست در نخستین خطا است. .PP \&\fIaction\fR انتخابی از بین \*(L"\s-1ALERT\*(R"، \*(L"RESTART\*(R"، \*(L"START\*(R"، \*(L"STOP\*(R"، \*(L"EXEC\*(R"\s0 یا \*(L"\s-1UNMONITOR\*(R"\s0 است. .PP \fIگزینه‌های آزمون پروتکل‌های خاص\fR .IX Subsection "گزینه‌های آزمون پروتکل‌های خاص" .PP \s-1GENERIC\s0 (\s-1SEND/EXPECT\s0) .IX Subsection "GENERIC (SEND/EXPECT)" .PP اگر Monit از پروتکل گفتگوی سرور پشتیبانی نمی‌کند، می‌توانید آزمون پروتکل دلخواه خود را با استفاده از رشته‌های \fIsend\fR و \fIexpect\fR بنویسید. عبارت \fI\s-1SEND\s0\fR رشته‌ای را به درگاه (پورت) سرور ارسال می‌کند و عبارت \fI\s-1EXPECT\s0\fR رشتهٔ خوانده‌شده از سرور را با رشتهٔ داده‌شده در عبارت expect مقایسه می‌کند. .PP ساختار: .PP .Vb 1 \& [ "string"]+ .Ve .PP دستور Monit رشته را همان‌طور که هست ارسال خواهد کرد، و اگر پروتکل برای خاتمه دادن به رشته انتظار چنین نویسه‌هایی را داشته باشد (بیشتر پروتکل‌های متنی مورد استفاده در اینترنت این‌گونه‌اند)، \fBباید\fR به یاد داشته باشید که \s-1CR\s0 و \s-1LF\s0 را در رشتهٔ ارسالی به سرور بگنجانید. .PP دستور Monit به‌طور پیش‌فرض تا ۲۵۵ بایت از سرور می‌خواند و هنگام مقایسه با رشتهٔ \s-1EXPECT\s0 از این رشته استفاده می‌کند. می‌توانید این مقدار پیش‌فرض را با استفاده از عبارت set limits بازنویسی کنید. .PP در صورت نیاز می‌توانید از نویسه‌های غیرقابل‌چاپ در رشتهٔ \s-1SEND\s0 استفاده کنید. از نماد شانزده‌شانزدهی (hex)، یعنی \e0xHEXHEX برای ارسال هر نویسه‌ای در محدودهٔ \e0x00\-\e0xFF (یعنی ۰ تا ۲۵۵ در مبنای ده) استفاده کنید. برای نمونه، جهت آزمایش یک سرور Quake 3: .PP .Vb 2 \& send "\e0xFF\e0xFF\e0xFF\e0xFFgetstatus" \& expect "sv_floodProtect|sv_maxPing" .Ve .PP اگر سیستم شما از عبارات باقاعدهٔ \s-1POSIX\s0 پشتیبانی می‌کند، می‌توانید در رشتهٔ \s-1EXPECT\s0 از عبارات باقاعده استفاده کنید؛ برای کسب اطلاعات بیشتر دربارهٔ انواع عبارات باقاعده‌ای که می‌توانید در رشتهٔ expect استفاده نمایید، به \fBregex\fR\|(7) مراجعه کنید. .PP از آنجا که هم regex و هم مقایسهٔ رشته روی رشته‌های خاتمه‌یافته با صفر (zero-terminated) عمل می‌کنند، نمی‌توانید وجود '\e0' را در بافر \s-1EXPECT\s0 بررسی کنید چرا که این نویسه نشانهٔ پایان بافر است. با این حال، ما '\e0' را در بافر expect به‌صورت \*(L"\e0\*(R" گریزدهی (escape) می‌کنیم که می‌توانید آن را بیازمایید؛ یعنی '\e' به همراه مقدار اسکی 0. برای نمونه، در اینجا نحوهٔ آزمایش برای یک رشتهٔ expect که با صفر و به دنبال آن هر تعداد نویسه شروع می‌شود نشان داده شده است: .PP .Vb 1 \& expect "^[\e\e]0.*" .Ve .PP در اینجا یک مثال ساده از پروتکل \s-1SMTP\s0 آمده است: .PP .Vb 7 \& if failed \& port 25 and \& expect "^220.*" \& send "HELO localhost.localdomain\er\en" \& expect "^250.*" \& send "QUIT\er\en" \& then alert .Ve .PP دستور \s-1SEND/EXPECT\s0 می‌تواند با هر نوع سوکتی، مانند سوکت‌های \s-1TCP\s0، سوکت‌های \s-1UNIX\s0 و سوکت‌های \s-1UDP\s0 استفاده شود. .PP \s-1HTTP\s0 .IX Subsection "HTTP" .PP ساختار: .PP .Vb 9 \& PROTO(COL) HTTP \& [USERNAME "string"] \& [PASSWORD "string"] \& [REQUEST "string"] \& [METHOD ] \& [STATUS operator number] \& [CHECKSUM checksum] \& [HTTP HEADERS list of headers] \& [CONTENT < "=" | "!=" > STRING] .Ve .PP \&\fI\s-1USERNAME\s0\fR نام کاربری اختیاری برای احراز هویت Basic است. .PP \&\fI\s-1PASSWORD\s0\fR گذرواژهٔ اختیاری برای احراز هویت Basic است. .PP گزینهٔ \fI\s-1REQUEST\s0\fR می‌تواند یک رشتهٔ \s-1URL\s0 تعیین‌کنندهٔ سندی روی سرور \s-1HTTP\s0 را مشخص کند. اگر عبارت request تعیین نشود، صفحهٔ پیش‌فرض \*(L"/\*(R" درخواست خواهد شد..PP برای نمونه: .PP .Vb 5 \& if failed \& port 80 \& protocol http \& request "/data/show?a=b&c=d" \& then restart .Ve .PP \&\fI\s-1METHOD\s0\fR متد درخواست \s-1HTTP\s0 را مشخص می‌کند. اگر مشخص نشود، Monit متد درخواست \s-1HTTP GET\s0 را ترجیح می‌دهد که نسبت به متد \s-1HEAD\s0 رایج‌تر است. برای صرفه‌جویی در پهنای‌باند شبکه، می‌توان متد را صراحتاً روی \s-1HEAD\s0 تنظیم کرد. .PP گزینهٔ \&\fI\s-1STATUS\s0\fR می‌تواند برای بررسی صریح کد وضعیت \s-1HTTP\s0 بازگردانده شده توسط سرور \s-1HTTP\s0 به کار رود. در صورت عدم استفاده، اگر کد وضعیت بازگردانده شده بزرگ‌تر یا مساوی ۴۰۰ باشد، آزمون پروتکل \s-1HTTP\s0 با شکست مواجه خواهد شد. می‌توانید این رفتار را با استفاده از توصیف‌کنندهٔ \fIstatus\fR بازنویسی کنید. .PP برای نمونه، جهت بررسی این که صفحه‌ای وجود \fBندارد\fR (سرور \s-1HTTP\s0 در این حالت باید 404 بازگرداند): .PP .Vb 6 \& if failed \& port 80 \& protocol http \& request "/non/existent.php" \& status = 404 \& then alert .Ve .PP \&\fI\s-1CHECKSUM\s0\fR شما می‌توانید چکسام اسناد بازگردانده شده توسط سرور \s-1HTTP\s0 را بررسی کنید. درهم‌سازهای \s-1MD5, SHA1,\s0 یا \s-1SHA256\s0 می‌توانند استفاده شوند. برای امنیت رمزنگاری بهتر، \s-1SHA256\s0 توصیه می‌شود. اگر سرور هدر \s-1HTTP\s0 \fIContent-Length\fR را تنظیم نکند، Monit چکسام سند را بررسی \fBنخواهد\fR کرد. یک سرور \s-1HTTP\s0 هنگام ارائهٔ یک سند ایستا (مانند یک فایل) باید این هدر را تنظیم کند. هیچ محدودیتی در اندازهٔ سند وجود ندارد، اما به خاطر داشته باشید که Monit برای دانلود سند از بستر شبکه جهت محاسبهٔ چکسام، زمان صرف خواهد کرد. .PP مثال: .PP .Vb 6 \& if failed \& port 80 \& protocol http \& request "/page.html" \& checksum 8f7f419955cefa0b33a2ba316cba3659 \& then alert .Ve .PP \&\fI\s-1HTTP HEADERS\s0\fR می‌تواند برای ارسال فهرستی از هدرهای \s-1HTTP\s0 هنگام استفاده از آزمون پروتکل \s-1HTTP\s0 به کار رود؛ برای نمونه، هدر host. اگر هدر host تنظیم نشده باشد، Monit از hostname یا IP-address میزبان به همان صورتی که در گزارهٔ check host مشخص شده استفاده خواهد کرد. تعیین یک هدر host در صورتی مفید است که بخواهید به یک میزبان مجازی مبتنی بر نام (name-based virtual host) متصل شده و آن را بیازمایید. نحو تنظیم هدرهای \s-1HTTP\s0 به این صورت است: .PP .Vb 1 \& http headers [name:value, name:value,..] .Ve .PP که در آن هر جفت name:value با «,» جدا می‌شود. اگر نیاز دارید از «:» در رشتهٔ مقدار استفاده کنید، برای نمونه جهت تنظیم شماره درگاه در یک هدر host، باید مقدار را داخل نقل‌قول قرار دهید. برای مثال، .PP .Vb 1 \& http headers [Host: "mmonit.com:443"] .Ve .PP در زمینهٔ check host، استفاده از این گزاره ممکن است به این شکل باشد: .PP .Vb 7 \& 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 .Ve .PP تنظیم هدرهای \s-1HTTP\s0 با آزمون پروتکل \s-1HTTP\s0 مرتبط است و همان‌طور که در مثال بالا نشان داده شده باید پیش از \fIrequest\fR قرار گیرد. .PP گزینهٔ \fI\s-1CONTENT\s0\fR الگویی را مشخص می‌کند که انتظار می‌رود در داده‌های بازگردانده شده توسط سرور وجود داشته باشد. اگر الگو تطابق نداشته باشد، آزمون با شکست مواجه می‌شود. در مثال بالا، اگر سرور صفحه‌ای شامل نام Monit که به دنبال آن یک شماره نسخه آمده باشد بازنگرداند، آزمون شکست خواهد خورد. .PP به‌طور پیش‌فرض، حداکثر ۱ مگابایت از محتوا بررسی می‌شود. می‌توانید این حد را با استفاده از گزارهٔ set limits افزایش دهید. .PP برای نمونه: .PP .Vb 5 \& if failed \& port 80 \& protocol http \& content = "foobar [0\-9.]+" \& then alert .Ve .PP APACHE-STATUS .IX Subsection "APACHE-STATUS" .PP آزمون \fIAPACHE-STATUS\fR امکان بررسی کارایی سرور را از طریق وارسی صفحهٔ وضعیت تولیدشده توسط mod_status آپاچی، که انتظار می‌رود در نشانی پیش‌فرض http://www.example.com/server\-status باشد، فراهم می‌کند. .PP نحو: .PP .Vb 1 \& PROTOCOL APACHE\-STATUS [PATH ] [USERNAME ] [PASSWORD ] [ ]+ .Ve .PP \&\fI\s-1PATH\s0\fR مسیر اختیاری به وضعیت آپاچی است (به‌طور پیش‌فرض \*(L"/server\-status\*(R") .PP \&\fI\s-1USERNAME\s0\fR نام کاربری اختیاری برای احراز هویت Basic است .PP \&\fI\s-1PASSWORD\s0\fR گذرواژهٔ اختیاری برای احراز هویت Basic است .PP \&\fIproperty\fR کوته‌نوشتی برای وضعیت پردازهٔ فرزند (child status) است: .PP .Vb 10 \& (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) .Ve .PP \&\fIoperator\fR یکی از \*(L"<\*(R"، \*(L"=\*(R" یا \*(L">\*(R" است. .PP \&\fInumber\fR محدودیت عددی درصدی است. .PP هر کدام از این محدودیت‌ها می‌توانند با مقداری متناسب با تعداد کل پردازه‌های فرزند فعال آپاچی مقایسه شوند. .PP می‌توانید تمام این آزمون‌ها را در یک عبارت ترکیب کنید یا فقط یک محدودیت خاص را بیازمایید. در صورت ترکیب محدودیت‌ها، باید آن‌ها را با استفاده از کلمهٔ کلیدی \s-1OR\s0 به یکدیگر متصل کنید. .PP مثال: .PP .Vb 5 \& if failed port 80 protocol apache\-status \& loglimit > 10% or \& dnslimit > 50% or \& waitlimit < 20% \& then alert .Ve .PP \s-1MQTT\s0 .IX Subsection "MQTT" .PP نحو: .PP .Vb 1 \& PROTOCOL MQTT [USERNAME string PASSWORD string] .Ve .PP \&\fI\s-1USERNAME\s0\fR نام کاربری \s-1MQTT\s0 .PP \&\fI\s-1PASSWORD\s0\fR گذرواژهٔ \s-1MQTT\s0 .PP نام کاربری و گذرواژه (اطلاعات هویتی) \fBاختیاری\fR هستند. در صورت عدم استفاده، Monit اتصال ناشناس (anonymous) را امتحان خواهد کرد که ممکن است خطای احراز هویت ایجاد کند => استفاده از اطلاعات هویتی پیشنهاد می‌شود، مگر این‌که سرور شما اتصال ناشناس را مجاز کرده باشد. .PP مثال: .PP .Vb 4 \& 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 .Ve .PP \s-1MYSQL\s0 .IX Subsection "MYSQL" .PP نحو: .PP .Vb 1 \& PROTOCOL MYSQL[S] [USERNAME string PASSWORD string [RSAKEY CHECKSUM [MD5|SHA1|SHA256] string]] .Ve .PP \&\fI\s-1USERNAME\s0\fR نام کاربری MySQL. .PP \&\fI\s-1PASSWORD\s0\fR گذرواژهٔ MySQL (نویسه‌های خاص می‌توانند استفاده شوند، اما برای نویسه‌های غیرالفبایی-عددی، گذرواژه باید داخل نقل‌قول قرار گیرد). .PP \&\fI\s-1RSAKEY CHECKSUM\s0\fR اگر از اتصال ناامن (\s-1MYSQL\s0 ساده بدون \s-1TLS\s0) استفاده می‌کنید، می‌توانید چکسام مورد انتظار \s-1MD5, SHA1,\s0 یا \s-1SHA256\s0 کلید \s-1RSA\s0 سرور را برای محافظت در برابر حملات مرد میانی (man-in-the-middle) تعیین کنید. برای امنیت رمزنگاری بهتر، \s-1SHA256\s0 پیشنهاد می‌شود. Monit پیش از ارسال گذرواژه به سرور، اثرانگشت (fingerprint) کلید را بررسی خواهد کرد..PP نام کاربری و گذرواژه (اطلاعات احراز هویت) \fBاختیاری\fR هستند و اگر تنظیم نشوند، Monit آزمایش را با استفاده از ورود ناشناس (anonymous login) انجام خواهد داد. بسته به پیکربندی MySQL شما، این می‌تواند باعث ثبت یک خطای احراز هویت در گزارش‌های (log) مربوط به MySQL شود. .PP اگر اطلاعات احراز هویت تنظیم شده باشند، Monit تلاش خواهد کرد تا وارد شود. Monit به هیچ مجوزی روی پایگاه داده نیاز ندارد، بلکه فقط به یک کاربر پایگاه داده احتیاج دارد. ممکن است بخواهید یک کاربر مجزا برای استفاده Monit در هنگام آزمایش ایجاد کنید، برای نمونه: .PP .Vb 2 \& CREATE USER \*(Aqmonit\*(Aq@\*(Aqhost_from_which_monit_performs_testing\*(Aq IDENTIFIED BY \*(Aqmysecretpassword\*(Aq; \& FLUSH PRIVILEGES; .Ve .PP مثال: .PP .Vb 7 \& 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 .Ve .PP یا با دستورهای شروع/توقف مبتنی بر unix-socket: .PP .Vb 7 \& 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 .Ve .PP می‌توانید رمزنگاری \s-1TLS\s0 را برای آزمایش با استفاده از \s-1MYSQLS\s0 به عنوان نام پروتکل فعال کنید: .PP .Vb 4 \& if failed \& port 3306 \& protocol mysqls username "foo" password "bar" \& then alert .Ve .PP \s-1PGSQL\s0 .IX Subsection "PGSQL" .PP نحو: .PP .Vb 1 \& PROTOCOL PGSQL [USERNAME string] [PASSWORD string] [DATABASE string]] .Ve .PP \&\fI\s-1USERNAME\s0\fR نام کاربری PostgreSQL. .PP \&\fI\s-1PASSWORD\s0\fR گذرواژه PostgreSQL (نویسه‌های خاص می‌توانند استفاده شوند، اما برای نویسه‌های غیر الفبایی-عددی گذرواژه باید داخل نقل‌قول قرار گیرد). .PP \&\fI\s-1DATABASE\s0\fR پایگاه داده PostgreSQL (در صورت تنظیم نشدن، پیش‌فرض پایگاه داده‌ای است که با نام کاربری مطابقت دارد). .PP نام کاربری و گذرواژه (اطلاعات احراز هویت) \fBاختیاری\fR هستند و اگر تنظیم نشوند، Monit آزمایش را با کاربر و پایگاه داده هاردکد شده user=root و database=root انجام می‌دهد، که ممکن است باعث ایجاد خطا در گزارش‌های PostgreSQL شود. .PP اگر اطلاعات احراز هویت تنظیم شده باشند، Monit سعی خواهد کرد وارد شود. ممکن است بخواهید یک کاربر مجزا برای استفاده Monit در هنگام آزمایش ایجاد کنید. .PP در حال حاضر Monit فقط از روش‌های احراز هویت \(aqpassword\(aq و \(aqmd5\(aq در PostgreSQL پشتیبانی می‌کند. اگر سرور روشی برای احراز هویت درخواست کند که Monit از آن پشتیبانی نمی‌کند (مانند \(aqscram\-sha\-256\(aq)، آن‌گاه Monit اتصال را خاتمه داده و آزمایش موفقیت‌آمیز در نظر گرفته می‌شود (اگرچه Monit نمی‌تواند احراز هویت شود، اما سرور در حال برقراری ارتباط است). .PP برای مجاز کردن دسترسی Monit به منظور اهداف آزمایشی، می‌توان یک حساب ایجاد کرد و دسترسی را برای نمونه مانند زیر مجاز نمود: .PP نمونه ورودی pg_hba.conf در PostgreSQL: .PP .Vb 2 \& # TYPE DATABASE USER ADDRESS METHOD \& host test monit 127.0.0.1/32 md5 .Ve .PP نمونه پیکربندی‌های Monit: .PP .Vb 7 \& 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 .Ve .PP \s-1RADIUS\s0 .IX Subsection "RADIUS" .PP نحو: .PP .Vb 1 \& PROTOCOL RADIUS [SECRET string] .Ve .PP \&\fI\s-1SECRET\s0\fR می‌توانید یک عبارت محرمانه (secret) جایگزین مشخص کنید، پیش‌فرض \*(L"testing123\*(R" است. .PP برای مثال: .PP .Vb 7 \& 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 .Ve .PP \s-1SIP\s0 .IX Subsection "SIP" .PP پروتکل \s-1SIP\s0 توسط سرورهای پلتفرم ارتباطی نظیر Asterisk و FreeSWITCH استفاده می‌شود. .PP نحو: .PP .Vb 1 \& PROTOCOL SIP [TARGET valid@uri] [MAXFORWARD n] .Ve .PP \&\fI\s-1TARGET\s0\fR با افزودن یک sip uri معتبر پس از این کلیدواژه، می‌توانید یک گیرنده جایگزین برای پیام مشخص کنید. .PP \&\fI\s-1MAXFORWARD\s0\fR محدود کردن تعداد پروکسی‌ها یا درگاه‌هایی (gateways) که می‌توانند درخواست را به سرور بعدی فوروارد کنند. مقدار آن عددی صحیح در محدوده 0\-255 است که به طور پیش‌فرض روی 70 تنظیم شده است. اگر max-forward = 0 باشد، سرور بعدی ممکن است با 200 \s-1OK\s0 پاسخ دهد (آزمایش موفقیت‌آمیز بود) یا پیام 483 Too Many Hops ارسال کند (آزمایش شکست خورد). .PP برای مثال: .PP .Vb 5 \& 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 .Ve .PP \s-1SMTP\s0 .IX Subsection "SMTP" .PP نحو: .PP .Vb 1 \& PROTOCOL SMTP[S] [USERNAME string PASSWORD string] .Ve .PP \&\fI\s-1USERNAME\s0\fR نام کاربری \s-1SMTP\s0. .PP \&\fI\s-1PASSWORD\s0\fR گذرواژه \s-1SMTP\s0 (نویسه‌های خاص قابل استفاده هستند، اما برای نویسه‌های غیر الفبایی-عددی گذرواژه باید داخل نقل‌قول قرار گیرد). .PP اطلاعات احراز هویت \fIاختیاری\fR هستند و هنگام استفاده، احراز هویت در طول آزمایش انجام می‌شود تا بتوانید کارکرد صحیح احراز هویت را نیز بسنجید. اگر قرار است از احراز هویت استفاده شود، توصیه می‌کنیم برای رمزنگاری ارتباط از \fIsmtps\fR استفاده کنید. اگر هیچ اطلاعات احراز هویتی تنظیم نشده باشد، Monit صرفاً یک آزمایش پایه پروتکل را انجام خواهد داد. .PP مثال: .PP .Vb 7 \& 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 .Ve .PP مثال با استفاده از احراز هویت و \s-1STARTTLS/SMTPS:\s0 .PP .Vb 9 \& 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 .Ve .PP \s-1WEBSOCKET\s0 .IX Subsection "WEBSOCKET" .PP نحو:.PP .Vb 5 \& PROTOCOL WEBSOCKET \& [REQUEST string] \& [HOST string] \& [ORIGIN string] \& [VERSION number] .Ve .PP \&\fI\s-1HOST\s0\fR می‌توانید یک سرآیند Host جایگزین مشخص کنید .PP \&\fI\s-1REQUEST\s0\fR می‌توانید یک درخواست جایگزین مشخص کنید؛ مقدار پیش‌فرض \*(L"/\*(R" است .PP \&\fI\s-1ORIGIN\s0\fR می‌توانید یک مبدأ جایگزین مشخص کنید؛ مقدار پیش‌فرض \*(L"https://mmonit.com\*(R" است .PP \&\fI\s-1VERSION\s0\fR می‌توانید یک نسخهٔ جایگزین مشخص کنید؛ مقدار پیش‌فرض \*(L"0\*(R" است .PP برای مثال: .PP .Vb 8 \& check host websocket.org with address "echo.websocket.org" \& if failed \& port 80 protocol websocket \& host "echo.websocket.org" \& request "/" \& origin \*(Aqhttp://websocket.com\*(Aq \& version 13 \& then alert .Ve .SH "مدیریت نمونه‌های MONIT (MANAGE YOUR MONIT INSTANCES)" .IX Header "مدیریت نمونه‌های MONIT (MANAGE YOUR MONIT INSTANCES)" ‏M/Monit قابلیت‌های Monit را گسترش داده و پایش و مدیریت تمام میزبان‌های فعال‌شده با Monit شما را فراهم می‌کند. .PP ‏M/Monit از Monit به عنوان یک کارگزار استفاده می‌کند. Monit در فواصل زمانی منظم، یک پیام وضعیت حاوی تصویری لحظه‌ای از میزبانی که روی آن اجرا می‌شود را به M/Monit ارسال می‌کند. .PP ‏M/Monit داده‌های جمع‌آوری‌شده را در نمودارها و گزارش رویدادها نمایش می‌دهد و به شما امکان می‌دهد داده‌های کلیدی عملکرد تمام میزبان‌های خود را در یک واسط کاربری مدرن، تمیز و خوش‌ساخت که روی دستگاه‌های همراه نیز کار می‌کند، مشاهده کنید. .PP از طریق M/Monit، همچنین می‌توانید سرویس‌های روی میزبان‌های اجراکنندهٔ Monit را شروع، متوقف یا مجدداً راه‌اندازی کنید. .PP برای ارسال داده‌ها به M/Monit، عبارت زیر را به فایل کنترلی Monit خود بیفزایید: .PP .Vb 4 \& SET MMONIT \& [TIMEOUT SECONDS] \& [REGISTER WITHOUT CREDENTIALS] \& [[WITH] HOSTGROUPS \*(Aq[\*(Aq "name", ... \*(Aq]\*(Aq ] .Ve .PP مثال: .PP .Vb 1 \& set mmonit https://monit:monit@192.168.1.10:8443/collector .Ve .PP ‏Monit خود را در M/Monit ثبت خواهد کرد و ارسال پیام‌های وضعیت و رویداد به M/Monit را آغاز می‌کند. ما استفاده از \fIhttps\fR را مطابق مثال بالا پیشنهاد می‌کنیم تا اطمینان حاصل شود که ارتباط بین Monit و M/Monit امن است. .PP اگر گذرواژه شامل نویسه‌های معنادار در \s-1URL\s0 نظیر \*(L":\*(R"، \*(L"?\*(R" یا \*(L"@\*(R" است، باید با کدگذاری \s-1URL\s0 نوشته شود. .PP مهلت زمانی پیش‌فرض ۵ ثانیه است؛ می‌توانید مهلت زمانی را با استفاده از گزینهٔ \fI\s-1TIMEOUT\s0\fR سفارشی‌سازی کنید. .PP هنگامی که Monit خود را در M/Monit ثبت می‌کند، اطلاعات احراز هویت را ارسال می‌نماید تا برای انجام عملیات مربوط به سرویس‌ها از طریق M/Monit به کار روند. می‌توانید با استفاده از گزینهٔ \fI\s-1REGISTER WITHOUT CREDENTIALS\s0\fR ارسال اطلاعات احراز هویت را غیرفعال کرده و به جای آن، این اطلاعات را به صورت دستی در M/Monit وارد کنید. .PP می‌توانید به صورت اختیاری Monit را به یک یا چند گروه میزبان (hostgroup) در M/Monit اضافه کنید. اگر گروه میزبان وجود نداشته باشد، به طور خودکار ایجاد خواهد شد. مثال: .PP .Vb 3 \& set mmonit \& https://monit:monit@192.168.1.10:8443/collector \& with hostgroups [ Oslo, "Mail servers" ] .Ve .SH "مثال‌های پیکربندی (CONFIGURATION EXAMPLES)" .IX Header "مثال‌های پیکربندی (CONFIGURATION EXAMPLES)" ساده‌ترین شکل فقط عبارت check است. در این مثال بررسی می‌کنیم که آیا سرور وب ما در حال اجرا است یا خیر، و اگر نبود هشداری صادر می‌کنیم: .PP .Vb 1 \& check process nginx with pidfile /var/run/nginx.pid .Ve .PP برای این‌که در صورت متوقف بودن سرور، Monit آن را شروع کند، یک عبارت start اضافه کنید: .PP .Vb 2 \& check process nginx with pidfile /var/run/nginx.pid \& start program = "/etc/init.d/nginx start" .Ve .PP در این‌جا مثال پیشرفته‌تری برای پایش یک وب‌سرور apache آورده شده است که روی درگاه‌های پیش‌فرض \s-1HTTP\s0 و \s-1HTTPS\s0 گوش می‌دهد. در این مثال، اگر apache روی شماره درگاه‌ها اتصالی را نپذیرد، Monit آن را مجدداً راه‌اندازی خواهد کرد. روشی که Monit برای راه‌اندازی مجدد استفاده می‌کند این است که ابتدا stop-program را اجرا کند، سپس (حداکثر ۳۰ ثانیه) منتظر توقف فرایند بماند، و سپس start-program را اجرا کرده و (۳۰ ثانیه) منتظر شروع آن بماند. مدت زمان انتظار برای شروع یا توقف را می‌توان با استفاده از گزینهٔ 'timeout' لغو و مقدار جدید تعیین کرد. اگر Monit نتواند سرویس را متوقف کند یا شروع نماید، در صورتی که درخواست دریافت پیام‌های هشدار را ثبت کرده باشید، پیام هشدار خرابی ارسال خواهد شد. .PP .Vb 5 \& 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 .Ve .PP این مثال نشان می‌دهد که چگونه می‌توانید یک برنامه را تحت یک کاربر مشخص (uid) و با یک گروه مشخص (gid) اجرا کنید. بسیاری از برنامه‌های دیمن می‌توانند تعویض uid و gid را خودشان انجام دهند، اما برای برنامه‌هایی که فاقد این توانایی هستند (مانند برنامه‌های Java)، قابلیت Monit در شروع برنامه به عنوان یک کاربر خاص می‌تواند بسیار سودمند باشد. در این مثال ما موتور پردازش Servlet جاوای Tomcat را با کاربر و گروه استاندارد \fInobody\fR اجرا می‌کنیم. لطفاً توجه داشته باشید که Monit تنها در صورتی می‌تواند uid و gid برنامه را تغییر دهد که مدیر سیستم (superuser) در حال اجرای Monit باشد؛ در غیر این صورت Monit به سادگی درخواست تغییر uid و gid را نادیده خواهد گرفت. .PP .Vb 7 \& 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 .Ve .PP در این مثال ما از پروتکل udp برای آزمودن اتصال به منظور بررسی در حال اجرا بودن کارساز نام (name-server) استفاده می‌کنیم: .PP .Vb 4 \& 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 .Ve .PP مثال زیر نشان می‌دهد که چگونه بررسی کنیم آیا سرویس \&'sophie' به اتصالات روی سوکت دامنه یونیکس خود پاسخ می‌دهد یا خیر: .PP .Vb 4 \& 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 .Ve .PP در این مثال یک وب‌سرور apache در حال اجرا روی localhost را بررسی می‌کنیم که به چندین میزبان مجازی (vhost) مبتنی بر IP پاسخ می‌دهد؛ به همین دلیل عبارت host قبل از port قرار گرفته است: .PP .Vb 6 \& 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 .Ve .PP برای اطمینان از این‌که Monit با یک سرور \s-1HTTP\s0 ارتباط برقرار می‌کند، می‌توان یک آزمون پروتکل افزود: .PP .Vb 6 \& 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 .Ve .PP این مثال روش دیگری را برای بررسی یک وب‌سرور با استفاده از سازوکار send/expect نمایش می‌دهد: .PP .Vb 8 \& 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\er\enHost: www.sol.no\er\en\er\en" \& expect "HTTP/[0\-9\e.]{3} 200.*" \& then alert .Ve .PP در این‌جا یک میزبان دوردست را پینگ می‌کنیم تا فعال بودن آن را بررسی کنیم و اگر فعال نبود، هشداری ارسال گردد:.PP .Vb 2 \& check host www.tildeslash.com with address www.tildeslash.com \& if failed ping then alert .Ve .PP در مثال زیر، از Monit می‌خواهیم که چکسام باینری پایه‌ای apache را که توسط برنامه‌های start و stop استفاده می‌شود، محاسبه و بررسی کند. اگر آزمون چکسام با شکست مواجه شود، پایش غیرفعال خواهد شد تا از راه‌اندازی مجدد احتمالی یک باینری دست‌کاری‌شده جلوگیری شود: .PP .Vb 5 \& 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 .Ve .PP در این مثال، از Monit می‌خواهیم چکسام یک سند را روی یک سرور دوردست بیازماید. اگر چکسام تغییر کرده باشد، یک هشدار ارسال می‌کنیم: .PP .Vb 6 \& 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 .Ve .PP در اینجا چند آزمون برای برخی از سرورهای ارتباطی پرکاربرد با استفاده از پروتکل \s-1SIP\s0 آورده شده است. ابتدا یک سرور FreeSWITCH و سپس یک سرور Asterisk را می‌آزماییم. .PP .Vb 12 \& 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 \*(Aqshutdown now\*(Aq" \& 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 .Ve .PP برخی از سرورها راه‌اندازی کندی دارند، مانند سرورهای کاربردی (Application Servers) مبتنی بر Java. اگر بخواهیم چرخهٔ بررسی (poll-cycle) را کوتاه نگه داریم (یعنی کمتر از ۶۰ ثانیه)، اما به برخی سرویس‌ها فرصت دهیم تا راه‌اندازی شوند، عبارت \fBevery\fR بسیار کارآمد است: .PP .Vb 4 \& 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 .Ve .PP در اینجا مثالی آورده شده است که در آن دو مدخل پایگاه‌داده را گروه‌بندی می‌کنیم تا بتوانید آن‌ها را با یکدیگر مدیریت کنید؛ برای نمونه: \(aqMonit \-g database start all\(aq. دستور mode نیز در مدخل نخست نشان داده شده است و این اثر را دارد که اگر سرویس در حال اجرا نباشد، Monit تلاشی برای راه‌اندازی (مجدد) آن نخواهد کرد: .PP .Vb 5 \& 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 .Ve .PP این مثال بررسی منابع، در صورتی که مصرف \s-1CPU\s0 دیمن \s-1HTTP\s0 آپاچی و فرایندهای فرزند آن برای ۲ چرخه از ۶۰٪ فراتر رود، هشداری ارسال خواهد کرد. اگر مصرف \s-1CPU\s0 برای ۵ چرخه بیش از ۸۰٪ باشد یا مصرف حافظه برای ۵ چرخه بیش از 100Mb باشد، Apache مجدداً راه‌اندازی می‌شود: .PP .Vb 7 \& 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 .Ve .PP این مثال‌ها دستور timestamp را همراه با exec نشان می‌دهند و بیان می‌کنند که چگونه می‌توانید در صورت تغییر فایل پیکربندی apache، آن را مجدداً راه‌اندازی کنید. .PP .Vb 3 \& check file httpd.conf with path /etc/httpd/httpd.conf \& if changed timestamp \& then exec "/etc/init.d/httpd graceful" .Ve .PP در این مثال، نحوهٔ استفاده از دستور توسعه‌یافتهٔ alert و وابستگی بررسی فایل را نشان می‌دهیم: .PP .Vb 10 \& 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 .Ve .PP در این مثال، استفاده از دستور depend را نشان می‌دهیم. در این حالت، می‌خواهیم oracle و apache را راه‌اندازی کنیم. با این حال، apache را به گونه‌ای پیکربندی کرده‌ایم که از oracle به عنوان بک‌اند استفاده کند، و اگر oracle مجدداً راه‌اندازی شود، apache نیز باید مجدداً راه‌اندازی شود. .PP .Vb 4 \& 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 .Ve .PP در ادامه، دو سرویس oracle-import و oracle-export را داریم که در صورت راه‌اندازی مجدد oracle باید مجدداً راه‌اندازی شوند، اما مستقل از یکدیگر هستند. .PP .Vb 4 \& 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 .Ve.SH "فایل‌ها (FILES)" .IX Header "FILES" \&\fI~/.monitrc\fR فایل پیکربندی کنترلی پیش‌فرض .PP \&\fI/etc/monitrc\fR اگر فایل پیکربندی در مکان پیش‌فرض یافت نشود و دایرکتوری /etc حاوی فایل \fImonitrc\fR باشد، به‌جای آن از این فایل استفاده خواهد شد. .PP \&\fI./monitrc\fR اگر فایل پیکربندی در هیچ‌یک از دو مکان پیشین یافت نشود، و دایرکتوری کاری فعلی حاوی فایل \fImonitrc\fR باشد، به‌جای آن از این فایل استفاده می‌شود. .PP \&\fI~/.monit.pid\fR فایل قفل برای جلوگیری از اجرای هم‌زمان (در حالت غیرریشه). .PP \&\fI/run/monit.pid\fR فایل قفل برای جلوگیری از اجرای هم‌زمان (در حالت ریشه، سیستم‌های لینوکس، در صورت در دسترس بودن دایرکتوری /run). .PP \&\fI/var/run/monit.pid\fR فایل قفل برای جلوگیری از اجرای هم‌زمان (در حالت ریشه، سیستم‌های لینوکس). .PP \&\fI/etc/monit.pid\fR فایل قفل برای جلوگیری از اجرای هم‌زمان (در حالت ریشه، سیستم‌های فاقد /var/run). .PP \&\fI~/.monit.state\fR برنامهٔ Monit وضعیت خود را در این فایل ذخیره کرده و از اطلاعات موجود در آن برای بازیابی پس از خرابی استفاده می‌کند. این یک فایل دودویی است و محتوای آن تنها برای monit اهمیت دارد. می‌توانید مکان این فایل را در فایل پیکربندی Monit یا با استفاده از گزینهٔ \-s هنگام شروع به‌کار Monit تعیین کنید. .PP \&\fI~/.monit.id\fR برنامهٔ Monit شناسهٔ یکتای خود را در این فایل ذخیره می‌کند. .SH "محیط (ENVIRONMENT)" .IX Header "ENVIRONMENT" هیچ متغیر محیطی‌ای توسط Monit استفاده نمی‌شود. با این حال، هنگامی که Monit یک برنامهٔ start/stop/restart یا یک کنش exec را اجرا می‌کند، چندین متغیر محیطی را مقداردهی خواهد کرد که می‌توانند توسط فایل اجرایی برای دریافت اطلاعات دربارهٔ رویدادی که موجب راه‌اندازی کنش شده است، استفاده شوند. .PP متغیر محیطی زیر برای هر برنامه‌ای که توسط monit اجرا شود، از جمله \fIcheck program\fR، تنظیم می‌گردد: .IP "\s-1MONIT_SERVICE\s0" 4 .IX Item "MONIT_SERVICE" نام سرویسی (از monitrc) که برنامه برای آن اجرا شده است. .PP متغیرهای محیطی زیر تنها در بافتار برنامهٔ start/stop/restart سرویس و کنش exec در دسترس هستند: .IP "\s-1MONIT_EVENT\s0" 4 .IX Item "MONIT_EVENT" رویدادی که روی سرویس رخ داده است .IP "\s-1MONIT_DESCRIPTION\s0" 4 .IX Item "MONIT_DESCRIPTION" شرحی از وضعیت خطا .IP "\s-1MONIT_DATE\s0" 4 .IX Item "MONIT_DATE" زمان و تاریخ (به سبک \s-1RFC 822\s0) وقوع رویداد .IP "\s-1MONIT_HOST\s0" 4 .IX Item "MONIT_HOST" میزبانی که رویداد روی آن رخ داده است .PP متغیرهای محیطی زیر تنها در بافتار برنامهٔ start/stop/restart مربوط به \&\fIcheck process\fR و کنش exec در دسترس هستند: .IP "\s-1MONIT_PROCESS_PID\s0" 4 .IX Item "MONIT_PROCESS_PID" شناسه فرایند (PID). اگر فرایند (دوباره) راه‌اندازی شده باشد، ممکن است این مقدار 0 باشد، .IP "\s-1MONIT_PROCESS_MEMORY\s0" 4 .IX Item "MONIT_PROCESS_MEMORY" حافظه فرایند. اگر فرایند (دوباره) راه‌اندازی شده باشد، ممکن است این مقدار 0 باشد، .IP "\s-1MONIT_PROCESS_CHILDREN\s0" 4 .IX Item "MONIT_PROCESS_CHILDREN" فرایندهای فرزند. اگر فرایند (دوباره) راه‌اندازی شده باشد، ممکن است این مقدار 0 باشد، .IP "\s-1MONIT_PROCESS_CPU_PERCENT\s0" 4 .IX Item "MONIT_PROCESS_CPU_PERCENT" درصد پردازنده (cpu%) فرایند. اگر فرایند (دوباره) راه‌اندازی شده باشد، ممکن است این مقدار 0 باشد، .PP متغیرهای محیطی زیر تنها برای بافتار برنامهٔ start/stop/restart مربوط به \&\fIcheck program\fR و کنش exec در دسترس هستند: .IP "\s-1MONIT_PROGRAM_STATUS\s0" 4 .IX Item "MONIT_PROGRAM_STATUS" وضعیت برنامه (مقدار خروج). .PP متغیرهای محیطی زیر می‌توانند برای اشکال‌زدایی استفاده شوند: .IP "\s-1SSLKEYLOGFILE\s0" 4 .IX Item "SSLKEYLOGFILE" برای اشکال‌زدایی اتصالات \s-1SSL/TLS\s0، برنامهٔ Monit از متغیر محیطی SSLKEYLOGFILE= در حالت اشکال‌زدایی (با گزینهٔ \-v) پشتیبانی می‌کند. از این فایل لاگ می‌توان همراه با Wireshark برای رمزگشایی ارتباطات \s-1SSL/TLS\s0 استفاده کرد (مسیر فایل لاگ را در بخش \*(L"Settings \-> Protocols \-> \s-1TLS\s0 \-> (Pre)\-Master\-Secret log filename\*(R" در نرم‌افزار Wireshark تنظیم کنید). .SH "سیگنال‌ها (SIGNALS)" .IX Header "SIGNALS" اگر یک دیمن Monit در حال اجرا باشد، \s-1SIGUSR1\s0 آن را از فاز خواب بیدار کرده و بررسی دوره‌ای اجباری تمام سرویس‌ها را اجرا می‌کند. سیگنال‌های \s-1SIGTERM\s0 و \s-1SIGINT\s0 دیمن Monit را به‌صورت تمیز خاتمه می‌دهند. در صورتی که Monit با آرگومان کنشی \fIquit\fR آغاز شود، سیگنال \s-1SIGTERM\s0 به دیمن Monit ارسال می‌گردد. .PP ارسال سیگنال \s-1SIGHUP\s0 به یک دیمن در حال اجرای Monit، آن را وادار به مقداردهی اولیهٔ مجدد می‌کند؛ به‌ویژه، پیکربندی را دوباره خوانده و فایل‌های لاگ را می‌بندد و دوباره باز می‌کند. .PP اجرای Monit در پیش‌زمینه هنگامی که یک دیمن پس‌زمینهٔ Monit در حال اجرا است، موجب بیدار شدن آن دیمن خواهد شد. .SH "نکات (NOTES)" .IX Header "NOTES" این یک برنامهٔ بسیار کم‌خروجی و ساکت است. اگر می‌خواهید ببینید Monit چه کاری انجام می‌دهد، از گزینهٔ \-v استفاده کرده و فایل لاگ را با tail \-f مشاهده کنید. به‌عنوان یک امکان اختیاری برای مقاصد آزمایشی، می‌توانید Monit را با گزینهٔ \-Iv آغاز کنید. در این صورت Monit اطلاعات اشکال‌زدایی را روی کنسول چاپ می‌کند؛ برای متوقف کردن monit در این حالت، کافی است در همان کنسول کلیدهای CTRL^C (یعنی \s-1SIGINT\s0) را فشار دهید. .PP نحو (و تجزیه‌کنندهٔ) فایل پیکربندی از برنامهٔ عالی fetchmail نوشتهٔ Eric S. Raymond و دیگران الهام گرفته شده است. بخش‌هایی از این صفحهٔ راهنما نیز از همان نویسندگان الهام گرفته است..SH "کپی‌رایت و تکثیر (COPYRIGHT)" .IX Header "COPYRIGHT" کپی‌رایت (C) 2001\-2026 متعلق به Tildeslash Ltd. تمامی حقوق محفوظ است. این محصول با این امید که مفید واقع شود توزیع شده است، اما \s-1بدون\s0 هرگونه ضمانتی؛ حتی بدون ضمانت ضمنی \&\s-1قابلیت فروش\s0 یا \s-1تناسب\s0 برای یک هدف خاص. .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" \&\s-1GNU\s0 text utilities؛ \fBmd5sum\fR\|(1)؛ \fBsha1sum\fR\|(1)؛ \fBopenssl\fR\|(1)؛ \fBglob\fR\|(7)؛ \&\fBregex\fR\|(7)؛ \fIhttps://mmonit.com\fR