Làm cho monit chờ lâu hơn trước khi nghĩ rằng một cái gì đó đã chết


20

Tôi đang cố gắng bắt đầu một chương trình (Resque) nhưng phải mất một chút thời gian trước khi một pidfile được viết. Vì vậy, tôi nghĩ rằng Monit nghĩ rằng chương trình đã không bắt đầu và bắt đầu một hoặc hai chương trình nữa trước khi pidfile của chương trình đầu tiên được viết.

Làm thế nào để tôi trì hoãn thời gian kiểm tra Monit một lần nữa, chỉ cho quá trình này? Hay tôi nên giải quyết điều này theo một cách khác?


Tôi đã thêm một câu trả lời mới dưới đây. Mặc dù chờ đợi lâu hơn giữa các lần kiểm tra sẽ ngăn va chạm cho các dịch vụ chậm, nhưng đó có thể là một trải nghiệm thực sự tồi tệ cho khách hàng.
Eddie

Câu trả lời:


10

Làm thế nào để tôi trì hoãn thời gian kiểm tra Monit một lần nữa, chỉ cho quá trình này?


Những gì bạn đang cố gắng để đạt được có thể được thực hiện thông qua tính năng " DỊCH VỤ POLL TIME " của monit

Tài liệu độc thoại nói

Các dịch vụ được kiểm tra định kỳ theo định kỳ

set daemon n

tuyên bố. Kiểm tra được thực hiện theo cùng thứ tự như chúng được ghi trong tệp .monitrc, ngoại trừ nếu phụ thuộc được thiết lập giữa các dịch vụ, trong trường hợp đó, hệ thống phân cấp dịch vụ có thể thay thế thứ tự kiểm tra.

Một trong những phương pháp để tùy chỉnh cuộc thăm dò dịch vụ là

  1. khoảng thời gian tùy chỉnh dựa trên nhiều chu kỳ thăm dò ý kiến

MERYI [số] CYCLES

Thí dụ:

check process resque with pidfile /your/app/root/tmp/pid/resque.pid
   every 2 cycles

Hay tôi nên giải quyết điều này theo một cách khác?


Tôi cũng đã cố gắng ban đầu để theo dõi các công việc bán lại với monit vì monit là một trình nền rất nhẹ nhưng cuối cùng đã giải quyết với GOD. Tôi biết, tôi biết GOD đói tài nguyên hơn so với monit nhưng trong trường hợp resque chúng tôi thấy nó là một kết hợp tốt.


Cảm ơn! Tôi đã kết thúc bằng cách sử dụng mỗi chu kỳ x. Tôi chỉ tìm thấy số làm việc cho tôi.
Ramon Tayag

19

Bạn có thể kiểm tra một dịch vụ cụ thể trên một khoảng thời gian khác với mặc định ...

Xem THỜI GIAN DỊCH VỤ TRONG tài liệu Monit.

Một ví dụ cho chương trình Resque của bạn sẽ là kiểm tra một số chu kỳ khác nhau:

check process resque with pidfile /var/run/resque.pid
   every 5 cycles

hoặc từ phần ví dụ:

Some servers are slow starters, like for example Java based Application Servers. 
So if we want to keep the poll-cycle low (i.e. < 60 seconds) but allow some services to take its time to start, 
the every statement is handy:

 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

hoặc bạn có thể tận dụng các kiểm tra theo kiểu cron.

check process resque with pidfile /var/run/resque.pid
   every 10 * * * *

hoặc nếu bạn gặp phải một khởi động chậm, bạn có thể kéo dài thời gian chờ trong lệnh bắt đầu dịch vụ:

check process apache with pidfile /var/run/httpd.pid
       start program = "/etc/init.d/httpd start" with timeout 90 seconds

Cùng một câu trả lời, phải không?
ewwhite

2
with timeout 90 secondschính xác là những gì tôi muốn. Cảm ơn.
andrew

1
Kudos cho bao gồm cả thời gian chờ và kiểu cron. Đây là câu trả lời chính xác và đầy đủ nhất.
RCross

9

Bạn cũng có thể kiểm tra xem có lỗi gì trong X lần không:

 if failed 
    port 80 
    for 10 cycles 
 then alert

Hoặc cho X lần trong các cuộc thăm dò Y:

 if failed 
    port 80
    for 3 times within 5 cycles 
 then alert

Hoặc cả hai:

 check filesystem rootfs with path /dev/hda1
  if space usage > 80% for 5 times within 15 cycles then alert
  if space usage > 90% for 5 cycles then exec '/try/to/free/the/space'

( từ đây )


1
Đây là một câu trả lời rất hay khác, vì nó cho thấy cách bạn có thể kiểm tra khoảng thời gian mặc định, nhưng chỉ thực hiện hành động trên cơ sở dễ tha thứ hơn.
RCross

2

Một thành viên trong nhóm của tôi đã đưa ra một giải pháp khá thông minh cho phép monit kiểm tra thường xuyên (mỗi phút) , nhưng một khi nó đã cố gắng khởi động lại dịch vụ (mất ~ 10 phút), nó sẽ đợi một khoảng thời gian ân hạn được chỉ định trước khi thử bắt đầu lần nữa.

Điều này ngăn việc chờ đợi quá lâu giữa các lần kiểm tra, kết hợp với khởi động chậm là tác động lớn hơn nhiều đối với khách hàng. Nó hoạt động bằng cách sử dụng một tập lệnh trung gian hoạt động như cờ để biểu thị monit đã thực hiện hành động từ thất bại cuối cùng.

check host bamboo with address bamboo.mysite.com
   if failed
           port 443 type tcpSSL protocol http
           and status = 200
           and request /about.action
            for 3 cycles
   then exec "/bin/bash -c 'ps -ef | grep -v "$$" | grep -v "grep" | grep restartBamboo.sh >/dev/null 2>&1; if [ $? -ne 0 ]; then /opt/monit/scripts/restartBamboo.sh; fi'"

Nếu tre (ứng dụng web khởi động chậm) ngừng hoạt động trong 3 phút liên tiếp, hãy khởi động lại, NHƯNG chỉ khi tập lệnh khởi động lại chưa chạy.

Tập lệnh được gọi có một giấc ngủ được chỉ định chờ DÀI sau đó thời gian bắt đầu chậm nhất cho dịch vụ (trong trường hợp của chúng tôi, chúng tôi dự kiến ​​sẽ hoàn thành trong ~ 10, vì vậy chúng tôi ngủ trong 15)

#!/bin/bash
echo "Retarting bambo by calling init.d"
/etc/init.d/bamboo stop
echo "Stopped completed, calling start"
/etc/init.d/bamboo start
echo "Done restarting bamboo, but it will run in background for sometime before available so, we are sleeping for 15 minutes"
sleep 900
echo "done sleeping"

2

Phiên bản hiện tại của Monit (5.16) hỗ trợ thời gian chờ cho các tập lệnh bắt đầu với cú pháp:

 <START | STOP | RESTART> [PROGRAM] = "program"
    [[AS] UID <number | string>]
    [[AS] GID <number | string>]
    [[WITH] TIMEOUT <number> SECOND(S)]

Các tài liệu nhà nước:

Trong trường hợp kiểm tra quy trình, Monit sẽ đợi tối đa 30 giây để hành động bắt đầu / dừng kết thúc trước khi bỏ cuộc và báo lỗi. Bạn có thể ghi đè thời gian chờ này bằng tùy chọn TIMEOUT.

Đó là những gì giá trị "thời gian chờ" sẽ làm.


Kéo dài thời gian chờ hoạt động nếu bắt đầu thực tế mất nhiều thời gian nhưng trong câu hỏi ban đầu có vẻ như chương trình có thể đã bắt đầu nhanh chóng (tức là được trả lại) nhưng không viết ra ngay lập tức. Có cách nào để nói với monit không kiểm tra dịch vụ trong một thời gian xác định sau khi khởi động lại không?
PeterVermont

Các timeoutnên áp dụng đối với cả hai bắt đầu và khởi động lại. Theo như tôi hiểu, nó đặt độ trễ trước khi Monit kiểm tra xem: a) đang chạy, b) tệp PID dự kiến ​​được tạo và c) một quá trình với PID dự kiến ​​hiện đang chạy. Tôi đã có một số vấn đề khiến nó hoạt động trong đó ứng dụng được chỉ định chỉ là một tập lệnh rẽ nhánh quá trình thực sau đó được trả về mà không biết điều gì đang xảy ra với quy trình. Làm cho nó hoạt động trong trường hợp này là một nỗi đau.
jeteon

những gì về hệ thống được khởi động lại và bắt đầu các dịch vụ? Có cách nào để chỉ định độ trễ ban đầu, tính bằng giây cho mỗi lần kiểm tra không? cũng là kiểm tra thụ động mà không có câu lệnh bắt đầu / dừng
Massimo

Tôi tin rằng trong trường hợp đó bạn có thể đang tìm kiếm START DELAY.
jeteon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.