如何监控heroku调度程序运行的重复rake任务?

时间:2012-02-04 13:57:53

标签: ruby-on-rails heroku monitoring scheduler newrelic

我上个月收到了heroku账单,而预定的佣金任务是一个相对沉重的负担。我们在开发过程中已经很早了,所以我们刚刚开发了一些rake任务来完成最近的工作,并且在他们的优化中没有太多关注。

现在我们希望改善他们的性能和他们的处理时间。我们使用New Relic来监控webapp性能,但显然默认会忽略这种类型的rake任务,并且不清楚如何覆盖它。

有人有类似的问题吗?如何近乎实时地跟踪计划任务以监控性能,优化并且不会产生惊喜?

4 个答案:

答案 0 :(得分:7)

虽然你无法真正监控rake任务,但你可以做一些小事。一个是使用日志记录。将任务的输出开始和结束时间输出到日志,然后您可以看到持续时间发生了什么。如果您将此与Papertrail插件相结合,那么您可以在以后进行额外的审讯。

至于自己运行作业,有几种方法可以运行后台进程,这取决于它们运行的​​方式:

如果您需要按计划运行工作,可以选择一些选项。首先是Heroku调度程序,这是非常好的,但不保证执行会发生。通常你会用它来启动一个rake任务,它会在任务期间产生一次性dyno - 因此你需要确保在开发过程中这些任务尽可能高效。

或者,如果您正在寻找需要更多控制或使用时钟过程的工作。基本上这是一个全天候运行的dyno,除了以预设的时间间隔和时间启动其他工作之外什么都不做。这通常是使用发条宝石完成的。这种方法的缺点是你需要一直为时钟进程付费。

第三种方法,可能有效的方法是延迟作业,使用runat选项,允许您将作业排队以便将来运行(并且作业可以自行重新排队)。这有一些问题,因为失败会导致整个链条崩溃,并且需要一个全职工作人员来运行它们。

因此,为了最大限度地减少您的账单,请确保您的佣金任务具有高效性和可靠性,然后选择适合您的计划选项。如果您正在查看计划和用户创建的事件,delayed_job可能是最佳选择。如果您正在查看定期运行的一些任务,请转到调度程序。如果您正在寻找定期运行大量时间关键的工作,请使用发条。

无论哪种方式,您都应该能够根据您的方法将相当数量的处理限制在一个或两个流程中。

答案 1 :(得分:0)

当您在heroku雪松上运行时,有一种方法可以为您的员工提供免费设置。这不是您的监控问题的答案,但无论如何它可能会很有趣:http://blog.nofail.de/2011/07/heroku-cedar-background-jobs-for-free/

答案 2 :(得分:0)

您可以在佣金任务中force the New Relic agent to start并报告其效果数据。

答案 3 :(得分:0)

不是具体问题的答案,但...... 减少开销的一种方法是使用Unicorn服务器让多个工作人员在一个dyno上工作。这取决于你的设置,但大多数花时间测试它的人可以轻松地同时运行3-4个工作进程。清除线索或任务是一个巨大的推动力。小心不要为dyno最大化分配的内存。