监控 cron 任务的技术?

监控 cron 任务的技术?

是否有好的技术可以监控集群上的 cron 任务?

我们开始使用 cron 每天启动一次任务。以下是检查信息的一些想法:

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

我想知道人们是否成功地将 cron 与其他任务分开执行,或者是否将任务集成到完全不同的方法中。我倾向于 #2,但我想知道更有经验的人可能会尝试什么。

答案1

除了其他答案之外:

  • 让作业在完成时将时间戳与实际作业的返回值一起写入文件
  • 将返回值传播回原始调用者

我们使用第一种方式是为了更容易纳吉奥斯伊辛加)进行检查,例如,如果最后写入的时间戳超过 n 小时(加上您需要的任何逻辑)——我们就知道出了问题。

答案2

我的常用方法是:

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

答案3

健康检查(https://github.com/healthchecks/healthchecks/) 是专为监控 cron 作业而构建的服务和仪表板。它正在生产中使用,并得到维护和接受代码贡献。

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

您可以自行设置并托管所有这些,但是,与任何 Web 服务一样,需要花费一些精力来设置域名、证书、配置 HTTP 反向代理、设置数据库备份等。一个相当简单的运行方法是使用这个 Heroku 适配版本:https://github.com/ihoting/healthchecks。我知道有人自己运行这个项目并用它来监控数百种服务。

免责声明:我是作者,我也在以下网站运行 Healthchecks 作为托管服务https://healthchecks.io

答案4

有几种技术可用于监控 cronjobs。

要接收 cronjob 失败的警报:

  • 使用 cron 的标准 MAILTO= 函数。如果 cronjob 在 STDERR 上产生输出,它将被邮寄到您选择的地址。
  • 要跟踪和处理 cron 邮件,您可以将它们直接放入票务系统。

您建议将信息记录到“网络感知”位置的系统听起来像系统日志. 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 标志打开网络支持。最后,第三个配置行将在“master”上收到的 local1.* 消息定向到文件中)。

系统日志方法更适合仅记录错误/信息。日志文件的可见性不如电子邮件,因此除非出现问题,否则您可能不会查看日志。

如果您选择采用 syslog 样式路线,还可以考虑 syslog-ng:http://freshmeat.net/projects/syslog-ng/

当然,你可以同时使用这两种技术,从而获得最佳效果。例如,系统记录失败和成功,并只发送失败邮件。

相关内容