Database JUNKY

MySQL,MariaDBを中心としたブログです

NagiosのアラートをLINEに即座に通知&スマートウオッチ連動する方法

nagiosのアラートをlineに通知する方法をまとめました。インフラの設計、および運用管理をしていると、かならず発生するのが、システム障害です。その障害は、寝ている時であろうと、ごはんを食べている時であろうと、はたまた休日であっても発生します。インフラエンジニアには休みはありません(汗)

しかしながら、外出時、もしくは寝ている時も、気づかない場合があります。まーその、、、人間だからしょうがない。。スマホでslack連携しているし、通知もするようにしているから大丈夫だよ!!というケースもあります、でもでも、スマホでも気づかないことって結構あります。まず、歩きスマホしながら外出しないので、きずいた時には、slackに大量のアラートがわらわらと。。。

このようなケースを可能なかぎり避けたい、障害に早く気づきたい!

そんな時に思いついたのが、nagios通知とスマートウォッチ連動です。これなら外出時、寝ている時にスマホを手に持っていなくてもスマートウォッチが通知してくれるので気づきやすいですよね!

というわけで、

の連携の話をちょっと書こうかな?って思います

Nagios統合監視[実践]リファレンス (Software Design plus)

Nagios統合監視[実践]リファレンス (Software Design plus)

この設定をしてから、世界が変わりました!良い意味でも悪い意味でもw

実は、lineはほとんど利用していないのですが、手持ちのxiaomi miband2がslackには対応しておらず、line対応なので、Slackでは、ぶるぶるしてくれないから利用する理由になります

miband2とは

nagiosの前にmiband2の話ですが、アクティブトラッカー(スマートウォッチ)になります。睡眠時間の計測、および、歩数を計測し、そのデータをスマホに転送してくれるリストバンドになります。安価は割には意外と高機能で、lineの通知にも対応し、他にはfacebook,sms、メール通知にも対応しているため、インフラ運用で結構活用できるんですよね。

障害が発生したら、リストバンドがぶるぶると震えます!これはわかりやすい!!

nagiosとlineの連動

nagiosとlineの連動にあたって、まずはlineの設定が必要になります

LINE Notify

notify-bot.line.me

Webサービスと連携すると、LINEが提供する公式アカウント"LINE Notify"から通知が届きます。 複数のサービスと連携でき、グループでも通知を受信することが可能です。

  • ログイン

自身のアカウントでまずログインします

f:id:hit10231023:20180820133855j:plain

  • マイページ

マイページを選択します

f:id:hit10231023:20180820134204j:plain

アクセストークンを発行します

f:id:hit10231023:20180820134326j:plain

  • 通知先の設定

通知先の設定をします。グループへの通知も可能ですが、今回は自身のみを選択しました

f:id:hit10231023:20180820134832j:plain

無事トークンが発行されると以下のような画面が表示されます。こちらのトークンは、後のnagios通知にて利用しますので、忘れずにメモしておいてください。余談ですが、うっかりメモし忘れた場合、もう一回発行してください。

f:id:hit10231023:20180820135223j:plain

まずは、ここまででLINEの設定は完了しました

miband2

  • アプリから設定

miband2の設定は、mi fitというアプリから設定します。 プロフィールタブから、対象のデバイスを選択します。

f:id:hit10231023:20180820135928j:plain

  • アプリの通知をONにする

アプリ通知の箇所をタップしてください

f:id:hit10231023:20180820140336j:plain

  • LINEの通知をONにする

LINEの通知をONにします

f:id:hit10231023:20180820140501j:plain

ここまでで、mibandの設定は完了です

nagiosの設定

いよいよ、nagiosの設定です

yumでインストールした場合のディレクトリ構成です。

/etc/nagios/objects

  • /etc/nagios/objects/contacts.cfg

既存で、slack通知と、メール通知が設定されている中で、notify-by-line という名前で新規に登録しました

define contact {
        contact_name                            slack_stats
        alias                                   SendSlack_stats
        host_notification_period                24x7    ; 24H * ' DAY
        service_notification_period             24x7
        host_notification_options               d,u,r   ; down,unknone,recovery
        service_notification_options            w,c,r   ; warn, critical , recovery
        host_notification_commands              host-notify-by-slack-stats,notify-host-by-email,notify-by-line
        service_notification_commands           notify-by-slack-stats,notify-service-by-email,notify-by-line
        email                                   info@abcdef.drf
        }
  • /etc/nagios/objects/commands.cfg

上記で、設定した notify-by-lineという名前で、設定しております。また、実行するコマンドは、/usr/local/shell/send_line.sh として作成しました。

define command{
        command_name    notify-by-line
        command_line    /usr/local/shell/send_line.sh -s $SERVICESTATE$ '<http://stats.vibbidi.com/nagios/|***** Nagios *****>\n\nNotification Type: $NOTIFICATIONTYPE$ ($NOTIFICATIONNUMBER$)\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nHostgroup: $HOSTGROUPNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $SHORTDATETIME$\n\nExtend Info: $HOSTADDRESS$ \"$SHORTDATETIME$,,$HOSTALIAS$,$SERVICEDESC$\"\n\nNOTES: $SERVICENOTES$\n\nAdditional Info:\n\n$SERVICEOUTPUT$'
        }
  • send_line.sh すこし、無駄な処理が入っていますが、以下のシェルを作成しました。TOKENの部分は、LINE Notifyで取得した、TOKENを設定してください。このTOKENを元に、LINE Notifyの APIを、curlで実行します。
#!/bin/bash

API_URL="https://notify-api.line.me/api/notify"
TOKEN="oL7rP7ioeRTJmIdhxxxxxxxxxxxxxxxxxxx"
#State Check
while getopts "s:" opts
do
  case $opts in
    s) NAGIOS_SERVICESTATE=$OPTARG ;;
  esac
done

MESSAGES=$3

# Send message to Line
curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=[${NAGIOS_SERVICESTATE}]\n${MESSAGES}" ${API_URL}
  • lineの実行テスト

とりあえず、shellの直接実行でline通知できるかテストします

# /usr/local/shell/send_line.sh -s OK
-----------------------------------------
{"status":200,"message":"ok"}

もし、スマートウォッチの設定も済んでいるのであれば、通知がきたのが確認できたと思います。 もちろんLINEにも通知が飛んでいるはずです

設定。編集が終わりましたら、nagiosを再起動。。。する前に、文法チェックをかけましょう

# nagios -v /etc/nagios/nagios.cfg
----------------
Total Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

# /etc/init.d/nagios restart

いかがでしょうか?ここまでできれば、だいぶ社外(屋外)監視対応もスムーズになったきたのではないかと思っております。開発とか、デザイナーさんとかと違い、インフラやさんは、最悪、スマホとコンソールさえあれば、対応は可能です。また、近い将来ですが、ことインフラエンジニアは、社内にいる必要性ってあまりなくなるのではないかと予測しています。だって、24時間対応なんだもの。会社にいって障害対応するのと、会社外で障害対応するのと、対応の質は同じです。もちろんPCがあってゆっくり腰をすえて作業するというのは良いことではあるのですが、障害はかならずしも、社内にいて発生するものではないし笑、むしろ、社外での装備を万全にしておきたいと思うのは、僕だけでしょうか?笑

hit.hateblo.jp

hit.hateblo.jp

f:id:hit10231023:20180116184008p:plain