CLIでNagiosのアラートを停止する

先日、こんなことをつぶやいたところ、

@hirose31さんから親切なアドバイスをいただきました。

使ってみるとなかなか便利だったので紹介しておきます!

Nagiosの外部コマンド機能について

名前付きパイプにコマンドを書き込むことで、Nagiosに命令を送る機能があるようです。
『外部コマンド』
コマンドのリストや書式、設定については上記リンクで確認して下さい。


EPELからインストールしたNagiosだとデフォルトで有効化されていました。

# nagios.cfg
check_external_commands=1
command_check_interval=-1
command_file=/var/spool/nagios/cmd/nagios.cmd
external_command_buffer_slots=4096


というわけで、特定ホストのサービス監視のアラート停止は以下のコマンドでできます。

[root@nagios01 ~]# echo "[$(date +%s)] DISABLE_HOST_SVC_NOTIFICATIONS;test01" > /var/spool/nagios/cmd/nagios.cmd

バッチリ通知が止まりました!!!

もどしはENABLE_HOST_SVC_NOTIFICATIONS、ホスト監視も停止する場合はDISABLE_HOST_NOTIFICATIONSを合わせて使います。
簡単ですね!!!

せっかくなので複数ホストのアラートを完全に無効化するスクリプトを作ってみました

ソースコード

#!/bin/bash

action=$1;shift
hosts=$@
command_file="/var/spool/nagios/cmd/nagios.cmd"

if [ "$action" = start ];then
  commands="ENABLE_HOST_NOTIFICATIONS ENABLE_HOST_SVC_NOTIFICATIONS"
elif [ "$action" = stop ];then
  commands="DISABLE_HOST_NOTIFICATIONS DISABLE_HOST_SVC_NOTIFICATIONS"
else
  exit
fi

now=$(date +%s)
for host in $hosts;do
  for command in $commands;do
    echo "[$now] $command;$host"
  done
done > $command_file

※エラー処理を追加したものをここにアップしました


使い方はこんな感じです

[root@nagios01 ~]# ./nagios_alert.sh stop test01 test02
[root@nagios01 ~]# ./nagios_alert.sh start test01 test02


(゚∀゚)キタコレ!!


これで作業がちょっと楽になりそうです。
@hirose31さん、ありがとうございました!