Cron görevlerini izleme teknikleri?


22

Bir kümede cron görevlerini izlemek için iyi teknikler var mı?

Günlük aralıklarla görevleri başlatmak için cron kullanmaya başlıyoruz. Bilgiyi kontrol etmek için birkaç fikir:

  1. Bir DB gibi bilgileri bazı "ağları tanıyan" bir yere kaydeden özel uygulama yönetimi ekleyin
  2. Cron günlüğünü düzenli olarak işleme / sorgulama için merkezi bir noktaya aktaran bir günlük dosyası sistemi oluşturun (diğer olası günlük dosyalarıyla birlikte)

İnsanların başka şeylere karşı cron için ayrı şeyler yapma konusunda başarılı olup olmadıklarını veya görevlerin tamamen farklı bir yaklaşıma entegre edilip edilmediğini merak ediyorum. 2. sıraya yaslanıyorum, ama daha deneyimli insanların neler deneyebileceğini bilmek istiyorum.


cronjobs'un çalışmadığı endişesi nedir? veya iş çalıştırma için 'durumu' izlemek mi istiyorsunuz?
ericslaw

1
Çoğunlukla, başarısız olmadıklarını. Ancak bazı işler uzun zaman alıyor ve "ayıklar, bu çok uzun sürüyor" gibi bilgiler almak isteyebiliriz.
Tristan Juricek

Yanıtlar:


16

Diğer cevaplara ek olarak:

  • işin, asıl işten dönen değerle birlikte tamamlandığında bir dosyaya zaman damgası yazmasına izin verin
  • dönüş değerini orijinal arayana geri gönder

Biz daha kolay yapmak için ilk kullanın Nagios ( Icinga ,) kontrol etmek gibi son yazılı damgası n saat (artı ne olursa olsun mantığı sen gerekmez) daha eski olup olmadığını - Bildiğimiz şeyler ters gitti.


Herkesin yanıtını beğenirken - çok şey öğrendim - Nagios izlememizi tamamen unuttum. Bu, uzun süredir devam eden işler için gerçekten endişelendiğim şeyler için harika. Teşekkürler.
Tristan Juricek

16

Benim ortak yaklaşımım:

  • Cron'lu uygulamanız başarıyla tamamlandığında herhangi bir stdout üretmeyin.
  • Hiçbir çıktıyı / dev / null'a yöneltmeyin.
  • Bir şeyler ters gittiğinde anlamlı stderr çıkışı üretin.
  • Bu hata çıktısını istenen ekibe göndermek için crontab'ta bir $ MAILTO adresi ayarlayın.

Ve eğer biri çıktıyı /dev/nullen azından || echo "service $service is FUBAR"komut satırına eklemek zorunda kalırsa ...
Hubert Kario

4

Yukarıdakilere ek olarak:

  • Bir şeyler ters gittiğinde stderr'e yazmakla birlikte "logger" komutunu verin. Ayrıca syslog dosyasını merkezi bir ana bilgisayara, yani "loghost" konumuna iletecek şekilde yapılandırın. (Logger varsayılan olarak "user.notice" özelliğini kullanır, ancak değiştirebilirsiniz.)

1
Bu fikri sevdim .... ancak crond zaten syslog'a giriş yapar (belki config param aracılığıyla), bu nedenle logger kullanımı bu yaklaşım için kesinlikle gerekli değildir.
ericslaw

4

Cronjob'ları izlemek için kullanabileceğiniz birkaç teknik var.

Cronjob hataları hakkında uyarılar almak için:

  • Cron'un standart MAILTO = fonksiyonunu kullanın. Eğer bir cronjob STDERR'de çıktı üretirse, seçtiğiniz adrese postalanacaktır.
  • Cron postalarını takip etmek ve ilgilenmek için onları bir bilet sistemine yönlendirebilirsiniz.

Bilgiyi "ağ farkında" bir yere kaydetmeyi önerdiğiniz sistem syslog gibi görünür . syslog günlükleri oluşturmak için basit bir yöntem sağlar, normalde / var / log / messages gibi dosyaları yönetir. Günlük mesajlarını hangi dosyaların alacağını seçmek gibi temel özelleştirmeler yapabilirsiniz.

Syslog ağa duyarlı bir modda başlatılabilir. Örneğin, bir kölenin bir ana birimde oturum açabilmesi için yapılandırabilirsiniz:

[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

Red Hat tabanlı bir dağıtım için, örnek bir yapılandırma şöyledir:

[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

(İlk yapılandırma satırı, local1. * Log bildirimlerini @ 192.168.1.3 ("master") 'e yönlendirir. İkinci SYSLOGD_OPIONS hattının -r bayrağı ağ desteğini açar. Son olarak, üçüncü config satırı local1. bir dosyaya).

Sistem günlüğü yaklaşımı yalnızca hataların / bilgilerin kaydedilmesi için daha iyidir. Günlük dosyalarının e-postalardan daha az görünür olması nedeniyle, bir şeyler ters gitmedikçe muhtemelen günlüklere bakmazsınız.

Eğer syslog tarzı rotaya gitmeyi seçerseniz, syslog-ng'yi de göz önünde bulundurun: http://freshmeat.net/projects/syslog-ng/ .

Elbette, her ikisini de kullanarak her iki tekniğin de en iyisini elde edebilirsiniz. Örneğin, hem başarısızlıkları hem de başarıları syslog'lamak ve sadece başarısızlıkları postalamak.


Cevap için teşekkürler -> Ben bir programcıyım, bu da beni biraz sysadmin acemisi yapıyor. Sistem günlüğünün ağ yeteneklerini bile bilmiyordum.
Tristan Juricek

3

StackOverflow'taki bir soruya benzer bir yanıt gönderdim ( /programming/21025495/system-for-monitoring-cron-jobs-and-automated-tasks )

Cronitor ( https://cronitor.io ) tam da bu amaçla yaptığım bir araçtır. Temel olarak, http isteklerini ping olarak kullanan bir izleme işaretçisi haline gelir.

Bununla birlikte, OP'nin yorumunda bahsettiği ihtiyaçlardan biri, bir işin yürütülmesi çok uzun sürdüğü zaman bilgilendirilmeye ihtiyaç duymasıdır.

Aynı ihtiyacı duydum ve benzer araçların bu tür izlemeleri kolayca desteklemediğini gördüm. Cronitor bunu, süreyi takip etmek için isteğe bağlı olarak bir başlangıç ​​olayını ve bir bitiş olayını tetiklemenizi sağlayarak çözer.

Süre takibi benim için bir zorunluluktu çünkü her saat planlanan bir cronjob vardı, ama zamanla koşmak bir saatten fazla sürdü. Umarım yararlı bulursunuz!


2

Bu yazıyı yazarken hala oldukça ağır bir gelişme yaşıyor, ancak https://github.com/jamesrwhite/minicron adresine bir göz atmak isterim . Tarif ettiğiniz sorunları çözmek için geliştirilmiştir. Çalıştırdığınız komutta yapılan küçük bir değişiklikle, işlerin çıkış ve çıkış durumunu kaydedebilir ve bu verileri gerçek zamanlı olarak merkezi bir sunucuya geri gönderebilir ve bir iş başarısız olduğunda e-posta, SMS ve PagerDuty ile uyarılar gönderebilir (çıkış durumu> 0) ya da ne zaman çalışması gerektiğine karar vermez.

Feragatname: Üzerinde çalışan geliştiriciyim.


0

Bu AlertGrid için klasik bir kullanım çantası gibi görünüyor .

Kurulum gerektirmez, bu araçtan yararlanmak için tek yapmanız gereken:

  1. cron işiniz her işi bittiğinde AlertGrid'e Sinyal gönderir (bu çok basit bir API ile yapılabilir, sinyal yalnızca bir HTTP isteğidir). Ayrıca gibi bazı parametreler gönderebilirsiniz execution_time!
  2. folllowing gibi bildirim kuralları ayarlayın:

my_job X dakika içinde yanıt vermediyse (durumunuzdaki saatlerde) -> yöneticiye SMS gönder

veya

execution_time> 60 seconds -> ilgilenen kişilere e-posta gönder

Aslında hepsi bu. Güzel görsel düzenleyici kullanarak bildirim kurallarını yönetebilirsiniz. Bir şey değiştiyse kaynak kodu veya bazı yapılandırma dosyalarını değiştirmeniz gerekmez. Bu merkezi bir çözümdür, böylece kuralları tek bir yerden yönetmekten faydalanabilirsiniz.

Umarım bu birine yardımcı olur. Sağlanan ücretsiz bir hesap var, eğer ilgileniyorsanız AlertGrid'i test edip kullanabilirsiniz. AlertGrid ekip üyelerinden biriyim - bazı sorularınız olursa sormaktan çekinmeyin.



0

i kullanmak http://cronrat.com sadece ekleme && bukle "... senin cronrat url" cron işlere. Sevdiğim en iyi özellik, ilk hesap oluşturduktan sonra hiçbir şey ayarlamanıza gerek kalmamasıdır. Her alarm çalışıyor ve kullandığınız dakika çalışıyor. bu nedenle, ilk önce iş kurmam gereken hizmetlerden farklı olarak, henüz varolmayan işlerime başlamak için herhangi bir otomatik aracı kullanabilirim.


Basit ve özgür cronrat hakkında okuma pompalandı. Buuuuut Nasıl kayıt olacağımı çözemiyorum. Bu servis öldü mü?
Rinogo

0

Power Cron'u yarattımBu kesin ihtiyaçlardan sonra . Cron işlerim hakkında merkezi bir görüşe ve farklı küme üyelerinin işleri arasında bir bağımlılık kavramına ihtiyacım vardı.

Ayrıca günlüklerde bulabildiğimden daha fazla bilgiye ihtiyacım vardı ve iş profili ekledim.


0

Bunun için PushMon, http://www.pushmon.com sitesini kurduk . Günlük işinizin saat 3'te çalıştığını ve normalde saat 4'te sona erdiğini söyleyin. Bir PushMon programı "her gün saat 4: 00'e kadar" ayarlayabilirsiniz. Veya "1 saat içinde her gün 04:00 kadar" gibi biraz daha gelişmiş bir program. Yapmanız gereken tek şey, işiniz her çalıştığında PushMon URL’sini "ping" etmektir; bu, eksik ping'lere karşı sizi uyaracaktır. Bir hatanın oluştuğundan eminseniz, işleyemediğiniz bir istisna yakaladığınızda olduğu gibi, isteğe bağlı uyarı özelliğini kullanabilirsiniz.


0

Healthchecks ( https://github.com/healthchecks/healthchecks/ ), cron işlerini tam olarak izlemek için oluşturulmuş bir servis ve gösterge panosudur . Üretimde kullanılıyor, korunuyor ve kod katkılarını kabul ediyor.

Cronitor, Dead Man's Snitch ve arkadaşları ile benzer şekilde çalışır: cron işinizi bitmeden hemen önce özel, benzersiz bir URL’ye HTTP / HTTPS isteği yapmak üzere ayarlarsınız. Healthchecks bu pingleri alır ve günlüğe kaydeder. Ping'lerin beklenen aralıklarla gelip gelmediğini sürekli olarak kontrol eder. Bir sorun tespit ettiğinde size bir bildirim gönderir. Desteklenen bildirim yöntemleri, e-posta, web kancaları, Slack, Telgraf, Discord, SMS, Pushover, Pusbullet, PagerDuty, PagerTree, HipChat, VictorOps, OpsGenie'dir.

Bunların hepsini ayarlayabilir ve kendiniz barındırabilirsiniz, ancak herhangi bir web hizmetinde olduğu gibi, etki alanı adını, sertifikayı ayarlamak, HTTP ters proxy'sini yapılandırmak, veritabanı yedeklemelerini ayarlamak vb. Biraz çaba harcar. çalışan bu Heroku-uyarlanmış sürümünü kullanmaktır: https://github.com/iphoting/healthchecks . Bu projeyi kendileri yürüten ve yüzlerce hizmeti izlemek için kullanan insanları tanıyorum.

Sorumluluk reddi: Ben yazarım ve ayrıca https://healthchecks.io adresinde Healthchecks'ı barındırılan bir hizmet olarak çalıştırıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.