先日、こんなことをつぶやいたところ、
Nagiosで作業サーバのアラートを管理画面でポチポチ停止するのが超ダルいんだけど、コマンドラインとか設定ファイルでできないのかなぁ
2013-05-16 17:56:03 via web
@hirose31さんから親切なアドバイスをいただきました。
2013-05-16 18:13:29 via atig.rb to @mikeda
使ってみるとなかなか便利だったので紹介しておきます!
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さん、ありがとうございました!