是否有监视集群中cron任务的好技术?
我们开始每天使用cron来启动任务。签出信息的一些想法:
- 添加特殊的应用程序处理,将信息记录到一些“网络感知”的地方,例如数据库
- 建立一个日志文件系统,该系统定期将cron日志传输到中心点进行处理/查询(以及其他可能的日志文件)
我想知道人们是否已经成功地将cron与其他事情分开做,还是将任务完全整合到了不同的方法中。我倾向于#2,但我想知道更有经验的人可以尝试些什么。
是否有监视集群中cron任务的好技术?
我们开始每天使用cron来启动任务。签出信息的一些想法:
我想知道人们是否已经成功地将cron与其他事情分开做,还是将任务完全整合到了不同的方法中。我倾向于#2,但我想知道更有经验的人可以尝试些什么。
Answers:
因此,我的常用方法是:
/dev/null
至少添加|| echo "service $service is FUBAR"
到命令行中……
您可以使用两种技术来监视cronjob。
要接收有关cronjob失败的警报:
您建议将信息记录到“网络感知”位置的系统听起来像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记录失败和成功,并仅通过邮件发送失败信息。
我在StackOverflow(/programming/21025495/system-for-monitoring-cron-jobs-and-automated-tasks)上发布了类似问题的答案
Cronitor(https://cronitor.io)是我专门为此目的而构建的工具。基本上可以归结为一个使用http请求作为ping的跟踪信标。
但是,OP在其评论中提到的需求之一是,当作业开始花费太长时间才能运行时,必须告知他们。
我也有同样的需求,发现类似的工具并不容易支持这种类型的监控。Cronitor通过允许您有选择地触发开始事件和结束事件以跟踪持续时间来解决此问题。
持续时间跟踪对我来说是必须的,因为我的计划是每小时进行一次cronjob,但是随着时间的流逝,开始运行需要一个多小时。希望你觉得它有用!
在我撰写本文时,它仍处于相当大的发展之中,但我鼓励您看一下https://github.com/jamesrwhite/minicron。开发它是为了解决您描述的问题。稍加修改,您可以运行该命令,它可以记录作业的输出和退出状态,并将该数据实时发送回中央服务器,并且可以在作业失败(退出状态> 0)时通过电子邮件,SMS和PagerDuty发送警报。或在应有的时间不执行。
免责声明:我是开发人员。
这看起来像AlertGrid的经典用例。
它不需要安装,要利用此工具的好处,您需要做的就是:
execution_time
!如果my_job在X分钟内(您的小时数)没有响应->发送短信给管理员
要么
如果执行时间> 60秒->向感兴趣的人发送电子邮件
其实仅此而已。您可以使用漂亮的可视化编辑器来管理通知规则。如果更改了某些内容,则无需修改源代码或某些配置文件。它是集中式解决方案,因此您可以从一个地方管理规则而受益。
希望这对某人有帮助。提供了一个免费帐户,因此您可以根据需要测试和使用AlertGrid。我是AlertGrid团队的成员之一-随时询问您是否有任何问题。
您的cron作业已通过syslog记录。可以使用另一个标准服务syslogd将数据发送到中央服务器。
http://www.debuntu.org/how-to-remote-syslog-logging-on-debian-and-ubuntu/包含有关如何进行设置的详细信息。
我使用http://cronrat.com只是将&& curl“ ... your cronrat url”附加到您的cron作业中。我喜欢的最好的功能是,创建初始帐户后无需设置任何内容。在您使用警报的那一刻,它们就会启动并运行。因此,我可以使用任何自动化工具来开始尚不存在的工作,这与某些需要首先设置工作的服务不同。
这些精确的需求之后,我创建了Power Cron。我需要对我的cron作业有一个集中的了解,并且需要一个不同集群成员的作业之间的依赖关系的概念。
我还需要更多的信息,而不是在日志中可以找到的信息,并添加了作业配置文件。
为此,我们构建了PushMon,http: //www.pushmon.com 。假设您的日常工作在凌晨3点开始,通常在凌晨4点结束。您可以将PushMon时间表设置为“每天4:00 AM”。或者更高级的计划,例如“每天1点以内,凌晨4:00点”。您需要做的就是每次作业运行时“ Ping” PushMon URL,它会提醒您缺少ping。如果您确定已发生错误,例如遇到无法处理的异常时,则可以使用按需警报功能。
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作为托管服务运行