web-dev-qa-db-ja.com

cronjobsのより良いロギング? cron出力をsyslogに送信しますか?

Cronジョブをログに記録するより良い方法を探しています。ほとんどのcronjobは、電子メールやコンソールをスパムしたり、無視したり、さらに別のログファイルを作成したりする傾向があります。

この場合、中央のNagiosサーバーにデータを送信するNagios NSCAスクリプトがあります。このsend_nscaスクリプトは、1つのステータス行をSTDOUTに出力し、成功または失敗を示します。

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk

これにより、次のメッセージがroot @ localhostに電子メールで送信され、それが私のシステム管理者チームに転送されます。スパム。

転送されたnsca_check_disk:1つのデータパケットがホストに正常に送信されました。

私は次のようなロギング方法を探しています:

  1. メールやコンソールへのメッセージをスパムしない
  2. 数か月または数年後にクリーンアップを必要とする別のkruftyログファイルを作成しないでください。
  3. ログ情報をどこかにキャプチャして、必要に応じて後で表示できるようにします。
  4. ほとんどのUNIXで動作します
  5. 既存のログインフラストラクチャに適合します。
  6. 「ファシリティ」や「優先度」などの一般的なsyslog規則を使用します
  7. 常に内部でログを記録するとは限らないサードパーティのスクリプトを使用できます。
45

この質問を書く過程で、私は自分に答えました。それで、私は自分に「 Jeopardy-style 」と答えます。これは、デニス・ウィリアムソンによって提供された答えを拡張します。

以下は、任意のCron出力を/usr/bin/logger2>&1を使用してstdoutに変換されるstderrを含む)に送信し、syslogにnsca_check_diskの「タグ」を付けて送信します。 Syslogはそこから処理します。これらのシステム(CentOSおよびFreeBSD)にはすでにログローテーションメカニズムが組み込まれているため、/ var/log/mycustom.logのようなログがディスクをいっぱいにすることを心配する必要はありません。

*/5 * * * * root    /usr/local/nagios/sbin/nsca_check_disk 2>&1 | /usr/bin/logger -t nsca_check_disk

/ var/log/messagesに、次のメッセージが1つ追加されました。

Apr 29, 17:40:00 192.168.6.19 nsca_check_disk: 1 data packet(s) sent to Host successfully.

/ usr/bin/loggerが好きです。これは、既存のsyslog構成とインフラストラクチャでうまく機能し、ほとんどのUnixディストリビューションに含まれているためです。ほとんどの* nixディストリビューションはすでにログローテーションを行っており、うまく機能しています。

72

logger を介して出力をパイプします。

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk | logger -p local0.notice

編集:更新は正しい方法のように見えます。

オプション-s(またはBusyboxでは-S)を指定してcrondを実行し、出力がsyslogに送信されるようにすることもできます。

1
Stuart Cardall