监视cron任务的技术?


22

是否有监视集群中cron任务的好技术?

我们开始每天使用cron来启动任务。签出信息的一些想法:

  1. 添加特殊的应用程序处理,将信息记录到一些“网络感知”的地方,例如数据库
  2. 建立一个日志文件系统,该系统定期将cron日志传输到中心点进行处理/查询(以及其他可能的日志文件)

我想知道人们是否已经成功地将cron与其他事情分开做,还是将任务完全整合到了不同的方法中。我倾向于#2,但我想知道更有经验的人可以尝试些什么。


您是否担心cronjobs没有运行?还是您要监视作业运行的“状态”?
ericslaw

1
大多数情况下,他们没有失败。但是有些工作需要很长时间,我们可能想获取诸如“哎呀,这花了太长时间”之类的信息。
Tristan Juricek 2009年

Answers:


16

除了其他答案:

  • 当作业完成时,让作业将时间戳记写入文件以及实际作业的返回值
  • 将返回值传播回原始调用者

我们使用第一个标记使NagiosIcinga)更容易检查,例如,最后写入的时间戳是否早于n小时(加上您需要的任何逻辑)-我们知道出了点问题。


虽然我喜欢每个人的答案-我学到了很多东西-但我完全忘记了我们的Nagios监控。对于那些我真正关心的长期运行的任务,这非常有用。谢谢。
Tristan Juricek 2009年

16

因此,我的常用方法是:

  • 当您的Cron应用程序成功完成时,请勿产生任何标准输出。
  • 不要将任何输出传递给/ dev / null。
  • 当出现问题时,请确实产生有意义的stderr输出。
  • 请在crontab中设置$ MAILTO地址,以将错误输出发送到所需的团队。

如果真的需要将输出/dev/null至少添加|| echo "service $service is FUBAR"到命令行中……
Hubert Kario 2012年

4

除了上述内容:

  • 当出现问题时,请同时调用“ logger”和写入stderr。配置syslog以另外转发到中央主机,也称为“ loghost”。(默认情况下,记录器将使用“ user.notice”功能,但您可以更改它。)

1
我喜欢这个主意...。尽管crond已经登录到syslog(也许通过config param),所以这种方法并非严格要求使用logger。
ericslaw

4

您可以使用两种技术来监视cronjob。

要接收有关cronjob失败的警报:

  • 使用cron的标准MAILTO =函数。如果cronjob在STDERR上产生输出,它将被邮寄到您选择的地址。
  • 要跟踪和处理Cron邮件,您可以将其定向到票证系统中。

您建议将信息记录到“网络感知”位置的系统听起来像syslog。syslog提供了一种创建日志的简单方法,它通常管理/ var / log / messages等文件。您可以进行基本的自定义,例如选择接收日志消息的文件。

可以以网络感知模式启动Syslog。例如,您可以对其进行配置,以便从服务器可以登录到主服务器:

[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的发行版,示例配置如下:

[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

(第一条配置行将local1。*日志通知重定向到@ 192.168.1.3(“ master”)。第二条SYSLOGD_OPIONS行的-r标志打开网络支持。最后,第三条配置行将local1。*消息定向到“ master”上放入文件中)。

syslog方法仅适用于记录错误/信息。日志文件的可见性比电子邮件要小,因此,除非出现问题,否则您可能不会查看日志。

如果您选择采用syslog样式的路由,请考虑使用syslog-ng:http : //freshmeat.net/projects/syslog-ng/

当然,您可以同时使用这两种技术。例如,通过syslog记录失败和成功,并仅通过邮件发送失败信息。


感谢您的回答->我是一名程序员,这让我有点像sysadmin新手。我什至不知道syslog的网络功能。
Tristan Juricek 2009年

3

我在StackOverflow(/programming/21025495/system-for-monitoring-cron-jobs-and-automated-tasks)上发布了类似问题的答案

Cronitor(https://cronitor.io)是我专门为此目的而构建的工具。基本上可以归结为一个使用http请求作为ping的跟踪信标。

但是,OP在其评论中提到的需求之一是,当作业开始花费太长时间才能运行时,必须告知他们。

我也有同样的需求,发现类似的工具并不容易支持这种类型的监控。Cronitor通过允许您有选择地触发开始事件和结束事件以跟踪持续时间来解决此问题。

持续时间跟踪对我来说是必须的,因为我的计划是每小时进行一次cronjob,但是随着时间的流逝,开始运行需要一个多小时。希望你觉得它有用!


2

在我撰写本文时,它仍处于相当大的发展之中,但我鼓励您看一下https://github.com/jamesrwhite/minicron。开发它是为了解决您描述的问题。稍加修改,您可以运行该命令,它可以记录作业的输出和退出状态,并将该数据实时发送回中央服务器,并且可以在作业失败(退出状态> 0)时通过电子邮件,SMS和PagerDuty发送警报。或在应有的时间不执行。

免责声明:我是开发人员。


0

这看起来像AlertGrid的经典用例。

它不需要安装,要利用此工具的好处,您需要做的就是:

  1. 每当您的cron作业完成时,将Signal发送到AlertGrid(可以通过极其简单的API来完成,signal只是一个HTTP请求)。您还可以发送一些参数execution_time
  2. 设置如下的通知规则:

如果my_job在X分钟内(您的小时数)没有响应->发送短信给管理员

要么

如果执行时间> 60秒->向感兴趣的人发送电子邮件

其实仅此而已。您可以使用漂亮的可视化编辑器来管理通知规则。如果更改了某些内容,则无需修改源代码或某些配置文件。它是集中式解决方案,因此您可以从一个地方管理规则而受益。

希望这对某人有帮助。提供了一个免费帐户,因此您可以根据需要测试和使用AlertGrid。我是AlertGrid团队的成员之一-随时询问您是否有任何问题。



0

我使用http://cronrat.com只是将&& curl“ ... your cronrat url”附加到您的cron作业中。我喜欢的最好的功能是,创建初始帐户后无需设置任何内容。在您使用警报的那一刻,它们就会启动并运行。因此,我可以使用任何自动化工具来开始尚不存在的工作,这与某些需要首先设置工作的服务不同。


我被激增地阅读有关cronrat的内容-简单而自由。Buuuuut我不知道如何注册。这个服务死了吗?
rinogo

0

这些精确的需求之后,我创建了Power Cron。我需要对我的cron作业有一个集中的了解,并且需要一个不同集群成员的作业之间的依赖关系的概念。

我还需要更多的信息,而不是在日志中可以找到的信息,并添加了作业配置文件。


0

为此,我们构建了PushMon,http: //www.pushmon.com 。假设您的日常工作在凌晨3点开始,通常在凌晨4点结束。您可以将PushMon时间表设置为“每天4:00 AM”。或者更高级的计划,例如“每天1点以内,凌晨4:00点”。您需要做的就是每次作业运行时“ Ping” PushMon URL,它会提醒您缺少ping。如果您确定已发生错误,例如遇到无法处理的异常时,则可以使用按需警报功能。


0

Healthchecks(https://github.com/healthchecks/healthchecks/)是专门用于监视cron作业的服务和仪表板。它正在生产中使用,维护并接受代码贡献。

它的工作方式与Cronitor,Dead Man's Snitch和朋友类似:您可以设置cron作业,以便在完成之前向特殊的唯一URL发出HTTP / HTTPS请求。运行状况检查会接收并记录这些ping。它会不断检查ping是否以预期的间隔到达。当检测到问题时,它将向您发送通知。支持的通知方法是电子邮件,webhooks,Slack,Telegram,Discord,SMS,Pushover,Pusbullet,PagerDuty,PagerTree,HipChat,VictorOps,OpsGenie。

您可以全部设置并自己托管,但是,与任何Web服务一样,它需要花费一些精力来设置域名,证书,配置HTTP反向代理,设置数据库备份等。运行是使用此Heroku适应版本:https : //github.com/iphoting/healthchecks。我知道有人自己运行此项目,并使用它监视数百项服务。

免责声明:我是作者,并且还在https://healthchecks.io上将Healthchecks作为托管服务运行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.