アスタリスクを介した電話でのNagiosからのアラート

昨日、 Google Translate + Asterisk IVRの記事を読んで、「クール! Nagiosで新しいホストとサービスを開始するときに、サウンドファイルをすばやく作成するために使用できます!”



それから私は自問しました、それはどこかでNagiosの電話警報を設定する方法を説明していますか? 少しグーグルで、私はいくつかの記事を見つけ、それらを読んで、そこに記載されているソリューションには多くの欠点があることに気付きました。 それで、私は自分の決定を共有することにしました。これは私が一年以上使ってきました。 一般的に、解決策は次のとおりです。 nagiosでは、 連絡先オブジェクトは、ページャーパラメーターの電話番号と、誰に電話をかけ、どのサービスが落ちたかをパラメーターとして/etc/nagios3/notify_by_phone.shスクリプトを実行するnotify-by-phoneおよびhost-notify-by-phone コマンドで作成されます。 次に、スクリプトは、sshを介してAsteriskサーバーにパラメーターを渡します。



Asterisk側では、 キャッシュの代わりにスクリプト/etc/asterisk/call_from_nagios.shが実行されます。これは、表明するフレーズのリストを含む変数を持つAsteriskの呼び出しファイルを生成します 。 基本的には以上です。さらに詳しく説明します。



ここではNagiosとAsteriskのインストールプロセスについては説明しませんが、これらのサービスの両方が既に機能していると仮定します。 アスタリスクサーバーの部分から始めましょう。 スクリプト/etc/asterisk/call_from_nagios.shを作成します。

#!/bin/bash data=`cat <&0` _TMP=/var/tmp callfile="${_TMP}/nag_callfile_$$" echo "`date '+%Y.%m.%d %H:%M:%S'` ${data}" >> ${_TMP}/nag.log number=`echo "${data}" | cut -f 1 -d " "` data=`echo ${data} | cut -f 1 -d ":" | cut -d " " -f 2-100 | tr "[:upper:]" "[:lower:]" | sed 's/ /\&/g' ` echo "Channel: Local/${number}@from-internal Context: custom-nagios-say Extension: s Priority: 1 MaxRetries: 0 WaitTime: 40 Setvar: play=${data} Account: NAGIOS CallerId: \"NAGIOS\" <168> " > $callfile chmod 666 $callfile mv $callfile /var/spool/asterisk/outgoing/
      
      





extensions.confにコンテキストを作成します。

 [custom-nagios-say] exten => s,1,Answer() exten => s,n,Wait(1) exten => s,n,Set(CHANNEL(language)=nag) exten => s,n,Playback(intro) exten => s,n,Playback(${play}) exten => s,n,Playback(${play}) exten => s,n,Playback(end) exten => s,n,Hangup()
      
      



ディレクトリ/ var / lib /アスタリスク/ sounds / nag /を作成し、次のファイルをそこに配置します。

critical.mp3-クリティカル

down.mp3-利用不可

end.mp3-電子メールによる詳細情報

host.mp3-サーバー

intro.mp3-注意!

problem.mp3-問題

service.mp3-サービス

status.mp3-ステータス

warning.mp3-警告

サーバーとサービスの名前と同様。 ファイル自体は、自分の声で、またはトピックで説明されている方法で表明することができ、この記事について考えるようになりました。

 wget -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" "http://translate.google.com/translate_tts?q=&tl=ru" -O host.mp3
      
      



さらに2つのオプションがあります。format_mp3モジュールをアスタリスクにインストールするか、各ファイルを消化可能なアスタリスク形式に変換します。 私は最初の方法を好みましたが、例として変換のためのコマンドを与えます:

 sox host.mp3 -r 8000 -c 1 host.wav
      
      



次のコマンドでテストコールを開始できます。

 echo "168 PROBLEM Host ISP status DOWN" | /etc/asterisk/call_from_nagios.sh
      
      



すべてのわき柱を捕まえて電話をかけ、「注意! 問題。 ホストはインターネットサービスプロバイダーです。 ステータス-利用不可」、次のステップに進み、sshを介してネットワーク経由でアラートを受信する機能を準備できます。



パスフレーズなしで別のssh証明書を生成します。

 ssh-keygen -t rsa -b 4096
      
      



次に、 id_rsa.pubの内容を/root/.ssh/authorized_keysに追加し、 コマンドパラメーターを行の先頭に追加します。 することを忘れないでください

 chmod 600 /root/.ssh/authorized_keys
      
      



ファイルは次のようになります。

 command="/etc/asterisk/call_from_nagios.sh" ssh-rsa AAAAB3NA0PCGAC/8kZU= root@nagios
      
      



次のコマンドでもう一度確認して先に進みます。

 echo "168 PROBLEM Host ISP status DOWN" | ssh -l root -i id_rsa localhost
      
      





それでは、Nagiosサーバーを操作しましょう。 連絡先があるとします:

 define contact{ contact_name vasea alias Vasea Pupkin service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email vasea@mydoamin.ru }
      
      



コピーして少し変更します。

 define contact{ contact_name vasea_phone alias Vasea Pupkin phone service_notification_period dayhours host_notification_period dayhours service_notification_options w,c,r host_notification_options d,r service_notification_commands notify-by-phone host_notification_commands host-notify-by-phone pager 163 }
      
      



ここでは、通知期間を昼間に置き換えました(以前はdefine timeperiodディレクティブで説明していました)。これは7〜22時間に相当します。 Vasyaが夜間に電話を受ける準備ができている場合は、24時間年中無休のままでかまいません。 実際、電話番号168を追加しました。内部電話を使用し、モバイルへの転送はアスタリスク自体に既に設定されています。 ただし、原則として、携帯電話番号をすぐに示すことができます。



vasea_phone連絡先を、対応するサービスの責任者のリストまたは対応するcontactgroupに追加します。 次に、コマンドを作成します。

 define command{ command_name notify-by-phone command_line [ "$NOTIFICATIONTYPE$" = "PROBLEM" ] && /etc/nagios3/notify_by_phone.sh "$CONTACTPAGER$ $NOTIFICATIONTYPE$ Host $HOSTNAME$ Service $SERVICEDESC$ status $SERVICESTATE$ : $SERVICEOUTPUT$" } define command{ command_name host-notify-by-phone command_line [ "$NOTIFICATIONTYPE$" = "PROBLEM" ] && /etc/nagios3/notify_by_phone.sh "$CONTACTPAGER$ $NOTIFICATIONTYPE$ Host $HOSTNAME$ status $HOSTSTATE$ : $HOSTOUTPUT$" }
      
      



また、スクリプト/etc/nagios3/notify_by_phone.shは次のとおりです。

 #!/bin/bash data=$@ date=`/bin/date '+%Y.%m.%d %H:%M:%S'` echo "${date} ${data}" >> /tmp/nag.log echo "${data}" | ssh -i /etc/nagios3/id_rsa root@10.1.5.61
      
      



10.1.5.61は私のアスタリスクサーバーのIPアドレスです。 / etc / nagios3 / id_rsaファイルは、アスタリスクサーバーで生成したファイルです。 新しいサーバーに初めて接続するとき、sshはknown_hostsに指紋を入力する前に確認を求めます。 したがって、nagiosユーザーになり(Nagiosデーモンがこのユーザーの下で実行される場合、これが通常のケースです)、手動で/etc/nagios3/notify_by_phone.shスクリプトを実行する必要があります。

 su - nagios /etc/nagios3/notify_by_phone.sh 168 PROBLEM Host ISP status DOWN
      
      



これを行う前に、nagiosユーザーの/ bin / false/ bin / bash in / etc / passwordに置き換える必要がある場合があります。 上記のコマンドを実行した後、これを返すことができます。



以上です! たぶん私が見落としていたいくつかの詳細。 もしそうなら-コメントを書いて、私は記事を更新します。



これで、問題が発生したことを最初に知り、クライアントまたは管理者が気付く前に修正することができます。



All Articles