ksaitoの日記

日々試したことの覚え書き

Nagios3でcronジョブを監視する

バックアップ作業は、自動化して手間を省きたいです。
自動化しても、きちんと動いているか確認していないと、いざという時にバックアップがとれていなかったという困ったことになります。
Nagiosで監視しておくと自動化したタスクが失敗したときにメールで通知するように設定できます。

設定の概要

前に設定したパッシブチェックとcheck_freshnessを組み合わせます。
パッシブの設定ができていることが前提となります。
自動化したジョブの終了ステータスをパッシブで報告させるのが基本ですが、そのままでは、ジョブ自体が実行されなくても通知されません。
check_freshnessを設定するとfreshness_thresholdで指定した秒数、ステータスが更新されないと通知するように設定できます。
例えば、毎日バックアップが実行される場合は、24時間+バックアップ時間ごとにステータスが更新されなかったら通知というように設定しておくことで、バックアップが確実に実行されているか監視できます。

テンプレートの設定

Debianパッケージにあらかじめ定義されているgeneric-service_nagios2.cfgをgeneric-service.cfgに名前変更(これは、必須ではありません)
定義されているgeneric-serviceというテンプレートを使ってfreshness-serviceというテンプレートを作ります。
check_freshnessに1を、freshness_thresholdに90,000(25時間)を追加することで25時間経ってもステータスが更新されない時には、check_commandに定義されたコマンドを実行します。
check_commandには、パッシブサービスの時に定義したcheck_dummyを使って、ステータスがCRITICALになるように設定します。
max_check_attemptsに1を設定しておくことで、通知がすぐに行われます。

$ hg diff generic-service.cfg 
diff -r 22db9cfcd606 conf.d/generic-service.cfg
 --- a/conf.d/generic-service.cfg        Sun Sep 27 00:39:56 2009 +0900
 +++ b/conf.d/generic-service.cfg        Sun Sep 27 12:56:33 2009 +0900
@@ -31,4 +31,13 @@
        check_period            never
        max_check_attempts      1
        check_command           check_dummy!0!"This service is state OK."
 -}
 +}
 +
 +define service {
 +       name                    freshness-service
 +       use                     generic-service
 +       active_checks_enabled   0
 +       check_command           check_dummy!2!"Job has not been worked."
 +       freshness_threshold     90000
 +       check_freshness         1
 +       max_check_attempts      1
 +}

サービスの定義

freshness-serviceを使ってhost_nameとservice_descriptionを設定します。
freshness_thresholdは、必要に応じて変更します。

$ hg diff services.cfg 
diff -r 22db9cfcd606 conf.d/services.cfg
 --- a/conf.d/services.cfg       Sun Sep 27 00:39:56 2009 +0900
 +++ b/conf.d/services.cfg       Sun Sep 27 13:07:35 2009 +0900
@@ -1,3 +1,18 @@
 +# freshness service test
 +define service {
 +       use                     freshness-service
 +       host_name               localhost
 +       service_description     FRESH
 +       freshness_threshold     10
 +}
 +
 +define service {
 +       use                     freshness-service
 +       host_name               localhost
 +       service_description     FRESH2
 +       freshness_threshold     20
 +}

設定確認とNagios3の再起動

いつもの手順で設定を確認して再起動します。

$ sudo nagios3 -v /etc/nagios3/nagios.cfg

Nagios 3.0.6
Copyright (c) 1999-2008 Ethan Galstad (http://www.nagios.org)
Last Modified: 12-01-2008
License: GPL

Reading configuration data...

Running pre-flight check on configuration data...

Checking services...
        Checked 11 services.
Checking hosts...
        Checked 2 hosts.
Checking host groups...
        Checked 5 host groups.
Checking service groups...
        Checked 0 service groups.
Checking contacts...
        Checked 1 contacts.
Checking contact groups...
        Checked 1 contact groups.
Checking service escalations...
        Checked 0 service escalations.
Checking service dependencies...
        Checked 0 service dependencies.
Checking host escalations...
        Checked 0 host escalations.
Checking host dependencies...
        Checked 0 host dependencies.
Checking commands...
        Checked 153 commands.
Checking time periods...
        Checked 4 time periods.
Checking for circular paths between hosts...
Checking for circular host and service dependencies...
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...

Total Warnings: 0
Total Errors:   0

$ sudo /etc/init.d/nagios3 restart
 * Restarting nagios3 monitoring daemon nagios3

   ...done.
$

動作確認

下記のようなコマンドで擬似的にパッシブの報告をします。

$ /usr/bin/printf "%s\t%s\t%s\t%s\n" "localhost" "FRESH" "0" "OK ok" | send_nsca -H localhost -c /etc/send_nsca.cfg
1 data packet(s) sent to host successfully.
$

こんな感じです。