システム運用の監視ツールとしてNagiosを利用しているケースが多いかと思います。Nagiosは監視方法の種類から、監視間隔や通知間隔など柔軟性、カスタマイズ性が高い非常に便利なツールです。
ただし、そのサーバやリソースに問題が発生した際の通知方法は基本メール。外出中や席を外してるとき、会議中も気付けないケースが多々あります。
そして、検知したあとも連絡や対応内容が、口頭だったりチャットだったり共有していないかったり情報が散漫します。
それを解決するために、自社の障害対応管理ツール「Reactio」というサービスを利用して電話での一斉通知とチャットでの対応する方法を共有します。
概要
- Nagiosの設定
- インストールと初期設定
- イベントハンドラスクリプトを作成
- イベントハンドラのコマンドを定義
- 監視サービスにイベントハンドラを設定
- Reactioの設定
- プロジェクトのAPIキーの登録
- API-Clientのインストール
- インシデント作成プログラムの作成
- まとめ
- 電話で一斉通知は対応速度が向上する。
- Reactio連携する監視サービスと閾値には注意
Nagiosの設定
Nagosとは?
サーバやネットワーク監視のためのオープンソースソフトウェア。
https://www.nagios.com/products/nagios-core/
インストールと初期設定
すでに導入済みに方がご覧になると思いますので、インストールと初期設定は割愛します。下記のようなブログを参考にしてください。
http://easyramble.com/install-and-setup-nagios.html
イベントハンドラスクリプトを作成
Nagiosには、アラート発生時と同時に外部コマンドを実行するイベントハンドラという機能があります。これを利用することによって、Reactioのインシデント作成APIを実行することができます。
イベントハンドラスクリプトはシェルで簡単に作成できます。
参考) https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/eventhandlers.html
当方が作成したスクリプト
# !/bin/sh
case "$1" in
CRITICAL)
case "$2" in
HARD)
echo -n "Create Incident of Reactio..."
/usr/bin/perl /usr/local/nagios/libexec/reactio/create-incident.pl $4 $1
;;
esac
;;
DOWN)
case "$2" in
HARD)
echo -n "Create Incident of Reactio..."
/usr/bin/perl /usr/local/nagios/libexec/reactio/create-incident.pl $4 $1
;;
esac
;;
esac
exit 0
このスクリプトをnagiosユーザで実行できるディレクトリに設置します。
イベントハンドラのコマンドを定義
作成したイベントハンドラをNagiosの監視設定で指定できるようにコマンドとして定義します。定義する際に、マクロというアラートに関連する値を渡すことができます。
参考)
- 今回利用するマクロ
- $SERVICESTATE$ (サービスの現在の状態を文字列)
- $SERVICESTATETYPE$ (サービスチェックにおけるステートタイプを文字列)
- $SERVICEATTEMPT$ (チェックのリトライ回数)
- $HOSTNAME$ (対象ホストの名前)
当方が設定したコマンドの定義
define command{
command_name create-incident-service
command_line /usr/local/nagios/libexec/eventhandlers/create-incident $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTNAME$
}
監視サービスにイベントハンドラを設定
Nagiosの監視設定内でイベントハンドラを実行するために、「event_handler」を追記します。ここで定義したコマンドを指定します。
当方が設定した内容
define service{
use local-service
host_name reactio-alert-test
service_description PING
check_command check_ping!100.0,20%!500.0,60%
event_handler create-incident-service
}
以上でNagios側の準備は完了です。リロードして設定を反映しましょう。
/etc/init.d/nagios reload
Running configuration check...done.
Reloading nagios configuration...done
Reactioの設定
ここで自社サービスの「Reactio」を設定していきます。30日間無料でお試しできるので、気軽に試してみてください。
「Reactio製品サイト」: https://reactio.jp/
プロジェクトのAPIキーの登録
Reactioには、各種APIとWebhookが提供されています。今回はAPIの「インシデント作成」を利用します。APIを利用するためには、Reactioの管理者で登録したプロジェクトごとにAPIキーを作成する必要があり、下記のブログ記事を参考に設定してみてください。
参考) http://blog.reactio.jp/entry/2015/05/26/161408
API-Clientのインストール
Reactioの開発メンバーがさくっと作ってくれたAPI-Clientを利用すれば、手軽にインシデント作成APIを実行するプログラムを作ることができます。
インストールと簡単な利用方法はReactioのブログに掲載してますので割愛します。
- perlの場合
- WebService::Reactio https://metacpan.org/pod/WebService::Reactio
- ブログ: http://blog.reactio.jp/entry/2015/07/30/154737
- Rubyの場合
インシデント作成プログラムの作成
準備が整ったところで、イベントハンドラスクリプトから実行されるインシデント作成プログラムを作りましょう。(※ORGANIZATION IDは、Reactioのサブドメインです。)
当方が作成したプログラム
use utf8;
use strict;
use warnings;
use WebService::Reactio;
my $client = WebService::Reactio->new(
api_key => '<API KEY>',
organization => '<ORGANIZATION ID>',
);
my $option_pram = {
detection =>'system',
notification_text => "$ARGV[0] $ARGV[1] が発生。至急確認と対応をお願い致します。",
notification_call => 1,
};
my $created = $client->create_incident("$ARGV[0] $ARGV[1] 障害が発生",$option_pram);
これで、完了!
あとは、実際にテストでアラートを発生させて、動作確認をしてみましょう。
まとめ
電話で一斉通知は対応速度が向上する。
最近のモバイル事情は、スマホにインストールしたアプリのPush通知などいろいろな通知が「ブルブル」鳴るしFacebookやLINEなど気軽にメッセージがたくさんくるので、メールの通知なんかは埋もれてしまって気づけないことが多いです。(※私感)
だからこそ、電話での通知なら必ず気づけるので非常に助かります。
Reactio連携する監視サービスと閾値には注意
Nagiosではひとつのサーバに対して複数のリソースを監視しているし、アラートの状態が続くと再通知もされるので、なんでもかんでもReactio連携するとインシデントが氾濫してしまいます。なので、本当に気付きたいアラートのみにしておくべきでしょう。
その他
-
注意
この記事は、テスト実装レベルの内容なので実際に本番で運用する際には、対象の環境に合わせてカスタマイズし充分な検証の上でご導入ください。