Nagios Coreのテンプレートとタイムピリオドを設定する方法

投稿者: | 2020-04-25

前回はNagios Coreでリソースの監視方法を説明しました。今回は監視対象のホストを設定する際、useディレクティブで設定していたテンプレートと特定の時間帯を定義するタイムピリオドの設定方法について説明します。

Nagiosのテンプレートについて

Nagios Coreのテンプレートとは、監視対象のホストやサービスの設定をあらかじめまとめておいたものです。

監視間隔等の詳細な設定は、個別の項目を一つ一つ設定することもできますが、同じサービスごとに一つ一つ設定を行うのはとても大変です。また、設定値の変更となった際、同じ設定を行った部分を全て修正しなければいけなくなります。手動で行う場合には、設定ミスをしてしまうリスクにもなります。

そこで、Nagios Coreのテンプレートを使用することで、監視対象のホストやサービスに同じ設定内容を設定できるようになります。設定値をまとめて修正したい、という際には、テンプレートの値を変更するだけで、テンプレートを設定した全てのホストやサービスに対して設定が変更されます。

テンプレートのイメージは下記の図のような感じです。

テンプレートの内容について

テンプレートの定義ファイル・templates.cfgはnagiosフォルダのetc/objectsフォルダの中にあります。今回は死活監視やリソース監視の際に使用したgeneric-serviceの内容を掲載します。

■templates.cfg
--------------------------------------------------
define service {

    name                            generic-service
    active_checks_enabled           1
    passive_checks_enabled          1
    parallelize_check               1
    obsess_over_service             1
    check_freshness                 0
    notifications_enabled           1
    event_handler_enabled           1
    flap_detection_enabled          1
    process_perf_data               1
    retain_status_information       1
    retain_nonstatus_information    1
    is_volatile                     0
    check_period                    24x7
    max_check_attempts              3
    check_interval                  10
    retry_interval                  2
    contact_groups                  admins
    notification_options            w,u,c,r
    notification_interval           60
    notification_period             24x7
    register                        0
}
--------------------------------------------------

generic-serviceのディレクティブ内容については以下の通りです。

name テンプレート名を設定するディレクティブ。useで使用するテンプレート名となる。
active_checks_enabled アクティブチェックを有効/無効にするディレクティブ。0は無効、1は有効。
passive_checks_enabled パッシブチェックを有効/無効にするディレクティブ。0は無効、1は有効。
parallelize_check サービスのチェックを並列で実行するかどうかを設定するディレクティブ。0は無効、1は有効。
obsess_over_service 分散監視用の機能のオブセスオーバーを有効にするかどうかを設定するディレクティブ。0は無効、1は有効。
check_freshness フレッシュネスチェックを有効にするかどうかを設定するディレクティブ。0は無効、1は有効。
notifications_enabled 通知機能を有効にするかどうかを設定するディレクティブ。0は無効、1は有効。
event_handler_enabled イベントハンドラーを有効にするかどうかを設定するディレクティブ。0は無効、1は有効。
flap_detection_enabled フラッピング機能を有効にするかどうかを設定するディレクティブ。0は無効、1は有効。
process_perf_data パフォーマンスデータを処理するかどうかを設定するディレクティブ。0は無効、1は有効。
retain_status_information 監視状態を自動保存するかどうかを設定するディレクティブ。0は無効、1は有効。
retain_nonstatus_informatio 設定情報を保存するかどうかを設定するディレクティブ。0は無効、1は有効。
is_volatile Volatileサービスかどうかを設定するディレクティブ。有効にするとチェックごとに通知を送信するようになる。0は無効、1は有効。
check_period チェックする時間帯を指定するディレクティブ。後述するタイムピリオド等で設定する。
max_check_attempts OK以外の状態が返ってきた時の再試行回数を設定するディレクティブ。
check_interval 監視間隔を指定するディレクティブ。タイムユニットごとに指定する。
retry_interval 障害検知時の再試行間隔を指定するディレクティブ。タイムユニットごとに指定する。
contact_groups 通知先のグループを指定するディレクティブ。指定されたグループに属するメンバーが通知先の対象となる。
notification_options どの状態になったら通知を行うかを指定するディレクティブ。wはWARNING、cはCRITICAL、uはUNKNOWN、rは復旧状態の時。
notification_interval 通知間隔を指定するディレクティブ。タイムユニットごとに指定する。
notification_period 通知する時間帯を指定するディレクティブ。後述するタイムピリオド等で設定する。
register テンプレートとして登録するかどうかを設定するディレクティブ。0はテンプレート専用、1はオブジェクト定義となる。

テンプレートの設定方法

テンプレートを設定するためには、etc/objects配下にあるtemplates.cfgファイルにテンプレートを定義します。

# vi /usr/local/nagios/etc/objects/templates.cfg

■templates.cfg
--------------------------------------------------
define service {

    name                         test-template
    low_flap_threshold           25.0
    high_flap_threshold          50.0
    register                     0
}
--------------------------------------------------

テンプレート設定後、監視対象のホストに作成したテンプレートを設定します。useディレクティブで設定する際、「,」で区切ることで複数のテンプレートを設定することができます。

# vi /usr/local/nagios/etc/servers/CentOS8-test1.cfg

■CentOS8-test1.cfg
--------------------------------------------------
define service {

    use                  generic-service,test-template
    host_name            CentOS8-test1
    service_description  PING
    check_command        check_ping!100.0,20%!500.0,60%
}
--------------------------------------------------

テンプレート設定後はNagiosを再起動します。

# systemctl restart nagios

テンプレートの優先順位

テンプレート内のディレクティブ内容については、個々のサービスに設定を行うこともできます。

もし、テンプレートと個々に設定したディレクティブが被り、設定値が異なる場合はどちらの値が優先されるかという疑問が出てきます。

例えば、テンプレートの設定方法にて設定した内容に対し、監視対象ホストで下記のような設定が行われているとします。

# vi /usr/local/nagios/etc/servers/CentOS8-test1.cfg

■CentOS8-test1.cfg
--------------------------------------------------
define service {

    use                  generic-service,test-template
    host_name            CentOS8-test1
    service_description  PING
    check_command        check_ping!100.0,20%!500.0,60%
    low_flap_threshold   10.0
}
--------------------------------------------------

test-templateではlow_flap_thresholdは25.0と設定されていますが、ローカルの定義では10.0と設定されています。

この場合、テンプレートで設定した内容ではなくローカルで設定された10.0が優先されます。そのため、特定のサービスだけ個別に設定値の変更を行いたい場合はローカル定義を設定することで部分的に変更することができます。

タイムピリオドについて

タイムピリオドとは、特定の時間帯をまとめたテンプレートのようなものです。

テンプレートの設定の際に登場したcheck_period等の時間帯を設定するディレクティブに対し、タイムピリオドの設定値を使用することで、時間帯を簡単に設定することができます。テンプレートの設定の際に使用していた24×7もタイムピリオドの一つです。

また、業務時間帯にだけ監視を行いたい、通知を行いたい、等、運用の時間に合わせた監視を行うこともできます。

タイムピリオドの内容について

タイムピリオドの定義ファイル・timeperiods.cfgはnagiosフォルダのetc/objectsフォルダの中にあります。今回はテンプレートを設定する際に使用したcheck_periodの24×7の内容を掲載します。

■timeperiods.cfg
--------------------------------------------------
define timeperiod {

    name                    24x7
    timeperiod_name         24x7
    alias                   24 Hours A Day, 7 Days A Week
    
sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-24:00 wednesday 00:00-24:00 thursday 00:00-24:00 friday 00:00-24:00 saturday 00:00-24:00 } --------------------------------------------------

各ディレクティブ内容については以下の通りです。

name テンプレート名を設定するディレクティブ。useで使用するテンプレート名となる。
timeperiod_name タイムピリオド名を設定するディレクティブ。ここで指定した名前を監視対象の設定値として使用する。
alias 時間帯名の別名を設定するディレクティブ。
各曜日 それぞれの曜日に対する時間帯を設定するディレクティブ。午前9時から午後6時までを設定する場合は09:00-18:00と設定する。

タイムピリオドの設定方法

タイムピリオドを設定するためには、etc/objects配下にあるtimeperiods.cfgファイルにタイムピリオドを定義します。今回は月曜日から金曜日の午前9時から午後6時までを定義します。

# vi /usr/local/nagios/etc/objects/timeperiods.cfg

■timeperiods.cfg
--------------------------------------------------
define timeperiod {

    name                    work
    timeperiod_name         work
    alias                   work 9:00-18:00
    
    monday                  09:00-18:00
    tuesday                 09:00-18:00
    wednesday               09:00-18:00
    thursday                09:00-18:00
    friday                  09:00-18:00
}
--------------------------------------------------

タイムピリオド設定後、check_period等の時間帯の設定が必要なディレクティブに対し、タイムピリオドを設定します。

# vi /usr/local/nagios/etc/objects/templates.cfg

■templates.cfg
--------------------------------------------------
define service {

    name                         test-template
    low_flap_threshold           25.0
    high_flap_threshold          50.0
    check_period                 work
    register                     0
}
--------------------------------------------------

タイムピリオド、テンプレート設定後はNagiosを再起動します。

# systemctl restart nagios

まとめ

  • テンプレートは複数の設定をまとめたもの
  • テンプレートを使用することで複数のホストに同じ設定ができる
  • テンプレートよりローカルの設定が優先される
  • タイムピリオドは時間帯をまとめたもの

次回はNagios Coreの設定ファイルnagios.cfgの設定について説明します。