web-dev-qa-db-ja.com

cronタスクを監視する手法は?

クラスターでcronタスクを監視するための優れたテクニックはありますか?

Cronを使用して、毎日タスクを起動しています。情報をチェックアウトするためのいくつかのアイデア:

  1. DBなどの「ネットワーク対応」の場所に情報を記録する特別なアプリケーション処理を追加します
  2. (他の可能なログファイルと共に)処理/クエリのために定期的にcronログを中央ポイントに転送するログファイルシステムを構築します。

私は人々がcronと他のもののために別々に物事を行うことに成功したのか、あるいはタスクが完全に異なるアプローチに統合されたのかと思っています。私は#2に傾いていますが、もっと経験豊富な人々が何を試してみるのか知りたいです。

22
Tristan Juricek

他の回答に加えて:

  • ジョブが終了したときに、実際のジョブからの戻り値とともにファイルにタイムスタンプを書き込む
  • 戻り値を元の呼び出し元に伝播します

最初のものを使用して NagiosIcinga )によるチェックを容易にします。たとえば、最後に書き込まれたタイムスタンプがn時間(および必要なロジック)より古いかどうか-何かがうまくいかなかったことを知っています。

16
serverhorror

私の一般的なアプローチはこうして:

  • Cronされたアプリケーションが正常に完了したときにstdoutを生成しないでください。
  • 出力を/ dev/nullにパイプしないでください。
  • 何か問題が発生したときに、意味のあるstderr出力を生成します。
  • Crontabで$ MAILTOアドレスを設定して、そのエラー出力を必要なチームに送信してください。
16
Dan Carley

上記に加えて:

  • 何か問題が発生した場合は、stderrへの書き込みとともに「ロガー」を呼び出してください。中央ホスト、別名「loghost」にさらに転送するようにsyslogを構成します。 (ロガーはデフォルトで「user.notice」機能を使用しますが、変更することもできます。)
4
kubanczyk

Cronジョブの監視に使用できる手法がいくつかあります。

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(「マスター」)にリダイレクトします。2番目のSYSLOGD_OPIONS行の-rフラグはネットワークサポートをオンにします。最後に、3番目の設定行はlocal1。*メッセージを「マスター」で受信するように指示しますファイルに)。

Syslogアプローチは、エラー/情報のロギングのみに適しています。ログファイルは電子メールよりも可視性が低いため、何か問題が発生しない限り、ログを見ることはないでしょう。

Syslogスタイルのルートを選択する場合は、syslog-ng: http://freshmeat.net/projects/syslog-ng/ も検討してください。

もちろん、両方を使用することで、両方の手法の利点を最大限に引き出すことができます。たとえば、失敗と成功の両方をsyslogに記録し、失敗をメールで送信するだけです。

4
Tommeh

StackOverflow( https://stackoverflow.com/questions/21025495/system-for-monitoring-cron-jobs-and-automated-tasks )で質問に同様の回答を投稿しました

Cronitor( https://cronitor.io )は、まさにこの目的のために作成したツールです。基本的には、httpリクエストをpingとして使用するトラッキングビーコンです。

ただし、OPがコメントで述べているニーズの1つは、ジョブの実行に時間がかかりすぎる場合に通知する必要があることです。

これと同じニーズがあり、同様のツールではこのタイプの監視を簡単にサポートできないことがわかりました。 Cronitorは、継続時間を追跡するために、オプションで開始イベントと終了イベントをトリガーできるようにすることで、これを解決します。

時間ごとにスケジュールされたcronjobがあったので、時間の追跡は私にとって必須でしたが、時間が経つと実行に1時間以上かかり始めました。お役に立てば幸いです。

3
August Flanagan

これを書いている時点では、まだかなり開発中ですが、 https://github.com/jamesrwhite/minicron を参照することをお勧めします。あなたが説明する問題を解決するために開発されました。実行するコマンドにわずかな変更を加えると、ジョブの出力と終了ステータスを記録し、そのデータをリアルタイムで中央サーバーに送信し、電子メールでアラートを送信できますSMSおよびPagerDutyの場合ジョブが失敗する(終了ステータス> 0)、または必要なときに実行されない。

免責事項:私はそれに取り組んでいる開発者です。

2
James White

私は http://cronrat.com を使用します&& curl "... your cronrat url"をcronジョブに追加します。私が好きな最高の機能は、最初のアカウントを作成した後に何もセットアップする必要がないことです。各アラートは、使用した分に稼働します。したがって、最初にジョブをセットアップする必要がある一部のサービスとは異なり、自動ツールを使用して、まだ存在しないジョブを開始できます。

0
Andrew Yasinsky

これは AlertGrid の典型的な使用例のように見えます。

インストールは必要ありません。このツールを利用するには、次のことを行う必要があります。

  1. cronジョブが機能するたびにAlertGridにSignalを送信します(これは非常に単純なAPIで実行できます。Signalは単なるHTTPリクエストです)。 execution_time!などのパラメータを送信することもできます。
  2. 次のような通知ルールを設定します。

my_jobがX分(ケースでは数時間)で応答しなかった場合-> send SMS to admin

または

execution_time> 60秒の場合->関心のある人々に電子メールを送信します

実際にはそれだけです。 Niceビジュアルエディタを使用して通知ルールを管理できます。何かが変更された場合、ソースコードや一部の構成ファイルを変更する必要はありません。これは一元化されたソリューションであるため、単一の場所からルールを管理することでメリットを得ることができます。

これが誰かを助けることを願っています。無料のアカウントが用意されているので、興味があればAlertGridをテストして使用できます。私はAlertGridチームメンバーの1人です。質問がある場合は、遠慮なくお尋ねください。

0
dzida

Cronジョブはすでにsyslog経由で記録されています。そのデータは、別の標準サービスであるsyslogdを使用して中央サーバーに送信できます。

http://www.debuntu.org/how-to-remote-syslog-logging-on-debian-and-ubuntu/ には、これを設定する方法の詳細があります。

0
Sparr

Healthchecks( https://github.com/healthchecks/healthchecks/ )は、cronジョブを監視するために正確に構築されたサービスとダッシュボードです。これは本番環境で使用されており、保守されており、コードの提供を受け入れます。

これはCronitor、Dead Man's Snitchなどと同様に機能します。終了する直前に、特別な一意のURLにHTTP/HTTPSリクエストを送信するようにcronジョブを設定します。 Healthchecksはこれらのpingを受信して​​ログに記録します。 pingが予期した間隔で到着するかどうかを常にチェックします。問題を検出すると、通知を送信します。サポートされている通知方法は、電子メール、webhook、Slack、Telegram、Discord、SMS、Pushover、Pusbullet、PagerDuty、PagerTree、HipChat、VictorOps、OpsGenieです。

これをすべて設定して自分でホストすることもできますが、他のWebサービスと同様に、ドメイン名、証明書の設定、HTTPリバースプロキシの設定、データベースバックアップの設定など、ある程度の手間がかかります。実行中は、このHeroku対応バージョンを使用します: https://github.com/iphoting/healthchecks 。このプロジェクトを自分で実行し、何百ものサービスを監視するために使用している人を知っています。

免責事項:私は作成者であり、ホストサービスとして https://healthchecks.io でもHealthchecksを実行しています

0
Pēteris Caune

私は Power Cron をこれらの正確なニーズの後に作成しました。私はcronジョブの集中管理されたビュー、および異なるクラスターメンバーのジョブ間の依存関係の概念が必要でした。

また、ログで見つけることができるよりも多くの情報が必要であり、ジョブプロファイリングを追加しました。

0
Moonchild

このために、PushMonを作成しました http://www.pushmon.com 。毎日のジョブが午前3時に実行され、通常は午前4時に終了するとします。 「毎日午前4時まで」のPushMonスケジュールを設定できます。または、「毎日午前4時までに1時間以内」などのもう少し高度なスケジュール。ジョブを実行するたびにPushMon URLに「ping」するだけで、pingの欠落を警告できます。処理できない例外をキャッチしたときなど、エラーが確実に発生していることがわかっている場合は、オンデマンドアラート機能を使用できます。

0