Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

Nagiosのアラートから一斉に携帯電話にコールして、対応のすべてを記録していく方法

システム運用の監視ツールとしてNagiosを利用しているケースが多いかと思います。Nagiosは監視方法の種類から、監視間隔や通知間隔など柔軟性、カスタマイズ性が高い非常に便利なツールです。

ただし、そのサーバやリソースに問題が発生した際の通知方法は基本メール。外出中や席を外してるとき、会議中も気付けないケースが多々あります。
そして、検知したあとも連絡や対応内容が、口頭だったりチャットだったり共有していないかったり情報が散漫します。

それを解決するために、自社の障害対応管理ツール「Reactio」というサービスを利用して電話での一斉通知とチャットでの対応する方法を共有します。

概要

  • Nagiosの設定
    • インストールと初期設定
    • イベントハンドラスクリプトを作成
    • イベントハンドラのコマンドを定義
    • 監視サービスにイベントハンドラを設定
  • Reactioの設定
    • プロジェクトのAPIキーの登録
    • API-Clientのインストール
    • インシデント作成プログラムの作成
  • まとめ
    • 電話で一斉通知は対応速度が向上する。
    • Reactio連携する監視サービスと閾値には注意

Nagiosの設定

Nagosとは?
サーバやネットワーク監視のためのオープンソースソフトウェア。

Screen Shot 2015-08-04 at 6.56.12 PM.png
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

当方が作成したスクリプト

create-incident
#!/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$ (対象ホストの名前)

当方が設定したコマンドの定義

commands.cfg
define command{
        command_name create-incident-service
        command_line /usr/local/nagios/libexec/eventhandlers/create-incident $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTNAME$
        }

監視サービスにイベントハンドラを設定

Nagiosの監視設定内でイベントハンドラを実行するために、「event_handler」を追記します。ここで定義したコマンドを指定します。

当方が設定した内容

test.cfg
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日間無料でお試しできるので、気軽に試してみてください。
Screen Shot 2015-08-04 at 6.55.22 PM.png
「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のブログに掲載してますので割愛します。

インシデント作成プログラムの作成

準備が整ったところで、イベントハンドラスクリプトから実行されるインシデント作成プログラムを作りましょう。(※ORGANIZATION IDは、Reactioのサブドメインです。)

当方が作成したプログラム

create-incident.pl
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連携するとインシデントが氾濫してしまいます。なので、本当に気付きたいアラートのみにしておくべきでしょう。

その他

  • 注意

    この記事は、テスト実装レベルの内容なので実際に本番で運用する際には、対象の環境に合わせてカスタマイズし充分な検証の上でご導入ください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?