Teknik Memantau tugas cron?

22

Apakah ada teknik yang baik untuk memantau tugas cron pada sebuah cluster?

Kami mulai menggunakan cron untuk meluncurkan tugas setiap hari. Beberapa ide untuk memeriksa informasi:

  1. Tambahkan penanganan aplikasi khusus yang mencatat informasi ke tempat "sadar jaringan", seperti DB
  2. Membangun sistem file log yang mentransfer log cron secara berkala ke titik pusat untuk pemrosesan / kueri (bersama dengan file log lainnya yang mungkin)

Saya bertanya-tanya apakah orang telah berhasil melakukan hal-hal secara terpisah untuk cron versus hal-hal lain, atau, apakah tugas-tugas tersebut diintegrasikan ke dalam pendekatan yang berbeda sepenuhnya. Saya condong ke arah nomor 2, tetapi saya ingin tahu apa yang mungkin dicoba oleh orang yang lebih berpengalaman.

Tristan Juricek
sumber
Apakah kekhawatiran Anda bahwa cronjobs tidak berjalan? atau Anda meminta untuk memantau 'status' untuk menjalankan pekerjaan?
ericslaw
1
Kebanyakan, mereka tidak gagal. Tetapi beberapa pekerjaan membutuhkan waktu yang lama, dan kami mungkin ingin mengambil informasi seperti "oops, ini terlalu lama".
Tristan Juricek

Jawaban:

16

Selain jawaban lain:

  • biarkan pekerjaan menulis cap waktu ke file ketika selesai bersama dengan nilai pengembalian dari pekerjaan yang sebenarnya
  • menyebarkan kembali nilai ke penelepon asli

Kami menggunakan yang pertama untuk memudahkan Nagios ( Icinga ) untuk memeriksa, misalnya jika stempel waktu yang ditulis terakhir lebih dari n jam (ditambah logika apa pun yang Anda butuhkan) - kami tahu ada yang salah.

Server Horror
sumber
Sementara saya menyukai jawaban semua orang - saya belajar banyak - saya benar-benar lupa tentang pemantauan Nagios kami. Ini bagus untuk tugas yang sudah berjalan lama itu, apa yang benar-benar saya khawatirkan. Terima kasih.
Tristan Juricek
16

Pendekatan umum saya adalah:

  • Jangan menghasilkan stdout apa pun ketika aplikasi Anda yang disinkronkan selesai dengan sukses.
  • Jangan menyalurkan output apa pun ke / dev / null.
  • Menghasilkan output stderr yang berarti ketika terjadi kesalahan.
  • Tetapkan alamat $ MAILTO di crontab untuk mengirim output kesalahan ke tim yang diperlukan.
Dan Carley
sumber
Dan jika seseorang benar-benar harus menyalurkan output untuk /dev/nullsetidaknya menambah || echo "service $service is FUBAR"ke baris perintah ...
Hubert Kario
4

Selain yang di atas:

  • Hubungi "logger" bersama dengan menulis ke stderr ketika ada masalah. Konfigurasikan syslog untuk meneruskan ke depan ke host sentral, alias "loghost". (Logger akan menggunakan fasilitas "user.notice" secara default, tetapi Anda dapat mengubahnya.)
kubanczyk
sumber
1
Saya suka ide ini .... meskipun crond sudah log ke syslog (mungkin melalui config param) jadi penggunaan logger tidak sepenuhnya diperlukan untuk pendekatan ini.
ericslaw
4

Ada beberapa teknik yang bisa Anda gunakan untuk memantau cronjobs.

Untuk menerima peringatan tentang kegagalan cronjob:

  • Gunakan fungsi MAILTO = standar cron. Jika cronjob menghasilkan output pada STDERR, itu akan dikirimkan ke alamat yang Anda pilih.
  • Untuk melacak dan menangani surat cron, Anda dapat mengarahkannya ke sistem tiket.

Sistem yang Anda usulkan untuk mencatat informasi ke tempat "sadar jaringan" terdengar seperti syslog . syslog menyediakan metode sederhana untuk membuat log, biasanya mengelola file seperti / var / log / messages. Anda dapat membuat penyesuaian dasar, seperti memilih file mana yang menerima pesan log.

Syslog dapat dimulai dalam mode sadar jaringan. Misalnya, Anda dapat mengonfigurasinya sehingga seorang budak dapat masuk ke master:

[root@slave ~]#  echo "hello world from slave" | logger -p local1.info

[root@master ~]# tail /var/log/myapp
Jun 29 13:07:01 192.168.1.2 logger: hello world from slave

Untuk distribusi berbasis Red Hat, contoh konfigurasi adalah sebagai berikut:

[root@slave ~]# cat /etc/syslog.conf | grep local1
local1.*                                                @192.168.1.3

[root@master ~]# cat /etc/sysconfig/syslog | grep SYSLOGD_OPTIONS
SYSLOGD_OPTIONS="-m 0 -r"

[root@master ~]# cat /etc/syslog.conf | grep local
local1.* /var/log/myapp

(Baris konfigurasi pertama mengarahkan local1. * Log pemberitahuan ke @ 192.168.1.3 ("master"). Bendera -r baris SYSLOGD_OPIONS kedua menyalakan dukungan jaringan. Terakhir, baris konfigurasi ketiga mengarahkan local1. * Pesan diterima di "master" menjadi file).

Pendekatan syslog lebih baik untuk hanya mencatat kesalahan / informasi. File log memiliki visibilitas lebih rendah daripada email, jadi Anda mungkin tidak akan melihat log kecuali ada yang tidak beres.

Jika Anda memilih untuk pergi rute gaya syslog, pertimbangkan juga syslog-ng: http://freshmeat.net/projects/syslog-ng/ .

Tentu saja, Anda bisa mendapatkan yang terbaik dari kedua teknik dengan menggunakan keduanya. Sebagai contoh, syslog'ing kegagalan dan keberhasilan, dan hanya mengirimkan kegagalan.

Tommeh
sumber
Terima kasih atas jawabannya -> Saya seorang programmer, yang membuat saya sedikit pemula yang sysadmin. Saya bahkan tidak menyadari kemampuan jaringan syslog.
Tristan Juricek
3

Saya memposting jawaban yang mirip dengan pertanyaan di StackOverflow ( /programming/21025495/system-for-monitoring-cron-jobs-and-automated-tasks )

Cronitor ( https://cronitor.io ) adalah alat yang saya buat persis untuk tujuan ini. Pada dasarnya bermuara pada menjadi suar pelacakan yang menggunakan permintaan http sebagai ping.

Namun, salah satu kebutuhan yang disebutkan OP dalam komentarnya perlu diinformasikan ketika sebuah pekerjaan mulai berjalan terlalu lama.

Saya memiliki kebutuhan yang sama, dan menemukan bahwa alat serupa tidak mudah mendukung jenis pemantauan ini. Cronitor memecahkan ini dengan memungkinkan Anda untuk secara opsional memicu acara mulai dan acara akhir untuk melacak durasi.

Pelacakan durasi adalah keharusan bagi saya karena saya memiliki cronjob yang dijadwalkan setiap jam, tetapi seiring waktu mulai mengambil lebih dari satu jam untuk menjalankan. Semoga bermanfaat!

Agustus Flanagan
sumber
2

Ini masih dalam pengembangan yang cukup berat pada saat saya menulis ini tetapi saya mendorong untuk melihat di https://github.com/jamesrwhite/minicron . Itu dikembangkan untuk memecahkan masalah yang Anda gambarkan. Dengan sedikit modifikasi pada perintah yang Anda jalankan, ia dapat merekam output dan status keluar dari pekerjaan dan mengirimkan data itu kembali ke server pusat secara realtime dan dapat mengirim peringatan melalui email, SMS dan PagerDuty ketika sebuah pekerjaan gagal (status keluar> 0) atau tidak mengeksekusi ketika seharusnya.

Penafian: Saya adalah pengembang yang sedang mengerjakannya.

James White
sumber
0

Ini terlihat seperti kasus penggunaan klasik untuk AlertGrid .

Tidak memerlukan instalasi, yang perlu Anda lakukan untuk mengambil manfaat dari alat ini adalah:

  1. kirim Sinyal ke AlertGrid setiap kali tugas cron Anda selesai bekerja (ini dapat dilakukan oleh API sederhana yang ekstrem, sinyal hanyalah permintaan HTTP). Anda juga dapat mengirim beberapa parameter seperti execution_time!
  2. mengatur aturan pemberitahuan seperti mengikuti:

jika my_job tidak merespons dalam X menit (dalam kasus Anda) -> kirim SMS ke admin

atau

jika eksekusi_waktu> 60 detik -> kirim email ke orang yang berminat

Sebenarnya itu saja. Anda dapat mengelola aturan pemberitahuan menggunakan editor visual yang bagus. Anda tidak perlu mengubah kode sumber atau beberapa file konfigurasi jika ada perubahan. Ini solusi terpusat, sehingga Anda bisa mendapat manfaat dari mengelola aturan dari satu tempat.

Semoga ini bisa membantu seseorang. Ada akun gratis yang disediakan sehingga Anda dapat menguji dan menggunakan AlertGrid jika Anda tertarik. Saya salah satu anggota tim AlertGrid - jangan ragu untuk bertanya jika Anda memiliki beberapa pertanyaan.

dzida
sumber
0

saya menggunakan http://cronrat.com tambahkan saja && curl "... your cronrat url" ke pekerjaan cron Anda. Fitur terbaik yang saya suka adalah Anda tidak perlu mengatur apa pun setelah Anda membuat akun awal. Setiap peringatan menyala dan berjalan saat Anda menggunakannya. karena itu saya dapat menggunakan alat otomatis apa pun untuk memulai pekerjaan saya yang belum ada, tidak seperti pada beberapa layanan di mana saya perlu mengatur pekerjaan terlebih dahulu.

Andrew Yasinsky
sumber
Saya terpana membaca tentang cronrat - sederhana dan gratis. Tapi saya tidak tahu cara mendaftar. Apakah layanan ini mati?
rinogo
0

Saya telah membuat Power Cron setelah kebutuhan yang tepat ini. Saya membutuhkan pandangan terpusat atas pekerjaan cron saya, dan gagasan ketergantungan antara pekerjaan anggota cluster yang berbeda.

Saya juga membutuhkan lebih banyak informasi daripada yang dapat saya temukan di log, dan menambahkan profil pekerjaan.

Moonchild
sumber
0

Kami membangun PushMon, http://www.pushmon.com , untuk ini. Katakanlah pekerjaan harian Anda berjalan pada jam 3 pagi dan biasanya berakhir pada jam 4 pagi. Anda dapat mengatur jadwal PushMon "jam 4 pagi setiap hari". Atau jadwal yang lebih maju seperti "jam 4 pagi setiap hari dalam waktu 1 jam". Yang perlu Anda lakukan adalah "ping" URL PushMon setiap kali pekerjaan Anda berjalan, dan itu akan memberi tahu Anda tentang ping yang hilang. Jika Anda tahu pasti telah terjadi kesalahan, seperti ketika Anda menangkap pengecualian yang tidak dapat Anda tangani, Anda dapat menggunakan fitur peringatan sesuai permintaan.

Bienvenido David
sumber
0

Healthchecks ( https://github.com/healthchecks/healthchecks/ ) adalah layanan & dasbor yang dibuat persis untuk memantau pekerjaan cron. Itu sedang digunakan dalam produksi, dipelihara dan menerima kontribusi kode.

Ini berfungsi seperti Cronitor, Snitch, Dead Man, dan teman-teman: Anda mengatur tugas cron Anda untuk membuat permintaan HTTP / HTTPS ke URL khusus dan unik sebelum selesai. Cek kesehatan menerima dan mencatat ping ini. Itu terus-menerus memeriksa apakah ping tiba pada interval yang diharapkan. Saat mendeteksi masalah, ia mengirimi Anda pemberitahuan. Metode pemberitahuan yang didukung adalah email, webhooks, Slack, Telegram, Discord, SMS, Pushover, Pusbullet, PagerDuty, PagerTree, HipChat, VictorOps, OpsGenie.

Anda dapat mengatur ini semua dan meng-host sendiri, tetapi, seperti halnya layanan web apa pun, perlu upaya untuk mengatur nama domain, sertifikat, mengkonfigurasi proxy reverse HTTP, mengatur backup database dll. Cara yang cukup mudah untuk mendapatkan menjalankan adalah menggunakan versi yang diadaptasi oleh Heroku ini: https://github.com/iphoting/healthchecks . Saya tahu orang-orang yang menjalankan proyek ini sendiri dan menggunakannya untuk memantau ratusan layanan.

Penafian: Saya penulis, dan saya juga menjalankan Healthchecks sebagai layanan yang dihosting di https://healthchecks.io

Pēteris Caune
sumber