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:
- Tambahkan penanganan aplikasi khusus yang mencatat informasi ke tempat "sadar jaringan", seperti DB
- 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.
monitoring
cron
Tristan Juricek
sumber
sumber
Jawaban:
Selain jawaban lain:
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.
sumber
Pendekatan umum saya adalah:
sumber
/dev/null
setidaknya menambah|| echo "service $service is FUBAR"
ke baris perintah ...Selain yang di atas:
sumber
Ada beberapa teknik yang bisa Anda gunakan untuk memantau cronjobs.
Untuk menerima peringatan tentang kegagalan cronjob:
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:
Untuk distribusi berbasis Red Hat, contoh konfigurasi adalah sebagai berikut:
(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.
sumber
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!
sumber
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.
sumber
Ini terlihat seperti kasus penggunaan klasik untuk AlertGrid .
Tidak memerlukan instalasi, yang perlu Anda lakukan untuk mengambil manfaat dari alat ini adalah:
execution_time
!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.
sumber
Pekerjaan cron Anda sudah masuk melalui syslog. Data itu dapat dikirim ke server pusat menggunakan syslogd, layanan standar lain.
http://www.debuntu.org/how-to-remote-syslog-logging-on-debian-and-ubuntu/ memiliki detail tentang cara mengaturnya.
sumber
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.
sumber
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.
sumber
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.
sumber
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
sumber