Buat monit menunggu lebih lama sebelum berpikir ada sesuatu yang mati

20

Saya mencoba untuk memulai program (Resque) tetapi perlu sedikit waktu sebelum pidfile ditulis. Jadi, saya pikir Monit berpikir program belum dimulai dan memulai satu atau dua program sebelum sebelum pidfile yang pertama ditulis.

Bagaimana saya menunda waktu pemeriksaan Monit lagi, hanya untuk proses ini? Atau haruskah saya menyelesaikan ini dengan cara lain?

Ramon Tayag
sumber
Saya menambahkan jawaban baru di bawah ini. Meskipun menunggu lebih lama di antara pemeriksaan akan mencegah tabrakan untuk layanan yang lambat, ini bisa menjadi pengalaman yang sangat buruk bagi pelanggan.
Eddie

Jawaban:

10

Bagaimana saya menunda waktu pemeriksaan Monit lagi, hanya untuk proses ini?


Apa yang ingin Anda capai dapat dilakukan melalui fitur " SERVICE POLL TIME " dari monit

Dokumentasi monit mengatakan

Layanan diperiksa secara berkala yang diberikan oleh

set daemon n

pernyataan. Pemeriksaan dilakukan dalam urutan yang sama seperti yang ditulis dalam file .monitrc, kecuali jika dependensi diatur di antara layanan, dalam hal ini hierarki layanan dapat mengubah urutan pemeriksaan.

Salah satu metode untuk menyesuaikan polling layanan adalah

  1. Interval khusus berdasarkan pada beberapa siklus panjang jajak pendapat

SETIAP [angka] SIKLUS

Contoh:

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

Atau haruskah saya menyelesaikan ini dengan cara lain?


Saya juga melakukan upaya awal untuk memantau pekerjaan resque dengan monit karena monit adalah daemon yang sangat ringan tetapi akhirnya diselesaikan dengan ALLAH. Saya tahu, saya tahu ALLAH lebih haus sumber daya dibandingkan dengan monit tetapi dalam kasus resque kami menemukan itu cocok.

kaji
sumber
Terima kasih! Saya akhirnya menggunakan setiap siklus x. Saya baru saja menemukan nomor yang berfungsi untuk saya.
Ramon Tayag
19

Anda dapat memeriksa layanan tertentu pada interval yang berbeda dari standar ...

Lihat LAYANAN POLL SAAT dalam dokumentasi Monit.

Contoh untuk program Resque Anda adalah memeriksa jumlah siklus yang berbeda:

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

atau dari bagian contoh:

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

atau Anda dapat memanfaatkan cek gaya cron.

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

atau jika Anda mengalami startup lambat, Anda dapat memperpanjang batas waktu dalam perintah mulai layanan:

check process apache with pidfile /var/run/httpd.pid
       start program = "/etc/init.d/httpd start" with timeout 90 seconds
putih
sumber
Jawaban yang sama, kan?
ewwhite
2
with timeout 90 secondspersis apa yang saya inginkan. Terima kasih.
andrew
1
Kudos untuk termasuk timeout dan cron-style. Ini adalah jawaban yang paling akurat dan lengkap.
RCross
9

Anda juga dapat memeriksa apakah ada yang gagal selama X kali berturut-turut:

 if failed 
    port 80 
    for 10 cycles 
 then alert

Atau untuk X kali dalam polling Y:

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

Atau keduanya:

 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'

( dari sini )

Vaiden
sumber
1
Ini adalah jawaban lain yang sangat bagus, karena ini menunjukkan bagaimana Anda dapat memeriksa pada interval default, tetapi hanya mengambil tindakan atas dasar yang lebih memaafkan.
RCross
2

Seorang anggota tim saya datang dengan solusi yang agak cerdik yang memungkinkan monit untuk sering memeriksa (setiap menit) , tetapi begitu telah mencoba untuk me-restart layanan (yang memakan waktu ~ 10 menit) itu akan menunggu masa tenggang yang ditentukan sebelum mencoba untuk memulai lagi.

Ini mencegah menunggu terlalu lama di antara pemeriksaan, yang dikombinasikan dengan awal yang lambat adalah dampak yang jauh lebih besar bagi pelanggan. Ini bekerja dengan menggunakan skrip perantara yang bertindak sebagai flag untuk menunjukkan monit sudah mengambil tindakan dari kegagalan terakhir.

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'"

Jika bambu (aplikasi web mulai lambat) turun selama 3 menit berturut-turut, mulai ulang, TETAPI hanya jika skrip mulai ulang belum berjalan.

Script yang dipanggil memiliki sleep yang ditentukan yang menunggu LEBIH LAMA kemudian waktu mulai paling lambat untuk layanan (dalam kasus kami, kami berharap untuk menyelesaikan dalam ~ 10, jadi kami tidur selama 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"
Eddie
sumber
2

Versi Monit (5.16) saat ini mendukung batas waktu untuk skrip mulai dengan sintaks:

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

The docs menyatakan:

Dalam hal pemeriksaan proses, Monit akan menunggu hingga 30 detik untuk menyelesaikan / menghentikan tindakan sebelum menyerah dan melaporkan kesalahan. Anda dapat mengesampingkan batas waktu ini menggunakan opsi TIMEOUT.

Apa yang akan dilakukan nilai "batas waktu".

jeteon
sumber
Memperpanjang batas waktu berfungsi jika permulaan yang sebenarnya membutuhkan waktu yang lama, tetapi dalam pertanyaan awal sepertinya program tersebut telah dimulai dengan cepat (yaitu dikembalikan) tetapi tidak segera menuliskan PID. Apakah ada cara untuk memberitahu monit untuk tidak memeriksa layanan untuk waktu yang ditentukan setelah restart?
PeterVermont
The timeoutharus berlaku untuk dimulai dan restart. Sejauh yang saya mengerti, ia menunda sebelum Monit memeriksa bahwa: a) sedang berjalan, b) file PID yang diharapkan dibuat dan c) proses dengan PID yang diharapkan sedang berjalan. Saya punya beberapa masalah untuk membuatnya bekerja di mana aplikasi yang ditentukan hanyalah sebuah skrip yang memotong proses nyata kemudian kembali tanpa mengetahui apa yang terjadi dengan proses tersebut. Mendapatkannya untuk bekerja dalam kasus ini sangat menyebalkan.
jeteon
bagaimana dengan sistem yang dinyalakan ulang dan memulai layanan? adakah cara untuk menentukan penundaan awal, dalam detik, untuk setiap pemeriksaan? juga cek pasif tanpa pernyataan mulai / hentikan
Massimo
Saya percaya dalam hal ini Anda mungkin mencari START DELAY.
Juni