また山に行きたくなる。山の記録を楽しく共有できる。

Yamareco

HOME > matoyanさんのHP > 日記
2017年02月23日 15:16サービス運営全体に公開

システム障害発生にいかに早く気づけるか?

ヤマレコのシステムは、サーバーやネットワーク機器を並列に並べる「2重化」などによって、近年は機器の故障などのシステム障害が起きてもヤマレコのサービス自体への影響が出にくくなるようになってきました。

ただ、システム障害の原因によってはヤマレコにまったくアクセスできなくなるレベルの障害が起きることがあります。

障害の徴候に気づいてトラブルを未然に防ぐことが理想ですが、もしシステムの障害が起きてしまった場合は
1.障害が起きたことに迅速に気づく
2.情報を集めて起きている問題を特定する
3.特定した問題に対する対策を行う
の3つのステップが必要で、それぞれを最短にする必要があります。(実際は問題が想定と違う場所にあったりして、2と3は繰り返し行うこともあります)

1のシステム障害を迅速に検知できるように、以前からヤマレコの外側に監視用サーバーを準備しています。
この監視用サーバーは1分ごとに実際にヤマレコにアクセスし、応答が遅かったり、エラーページが表示された場合は私個人や会社宛に通知をするようにしています。

問題を検知したときの通知は
・Eメール
・Slackという社内チャットアプリ
の両方に送っていて、iPhoneのアプリ通知画面で障害が起きた事がすぐにわかるようになっています。
また、何度も通知を繰り返すことを避けるために、1回通知したら1時間は通知をしないようにしています。

ただ、このような仕組みだけだと、どうしても気づくことが遅れる場合があります。
例えばiPhoneの通知は数秒鳴るかバイブレーションで動くだけなのでなかなか気づけないですし、Eメールも基本的には自分から定期的にチェックをしないといけないためです。

できるだけスマホをいつも近くに持つようにして、夜中や朝の寝起きなども含めて通知画面を常時気にしてはいるのですが、例えば飲み会などでお酒を飲んで寝てしまった直後とか、スマホをポケットに入れてランニングしていて微妙な通知に気づけない場合など、日常生活をしていると色々な場面で長時間通知に気づけないことがあります。
あとは私だけではなくて妻にも問題が起きたら教えてもらうようにもしています。
それでもタイミングが悪いと数時間、障害発生の通知に気づけないという状況が起きてしまうことがあります。

この対策として、先日、自分向けに通知専用のiPhoneアプリを作ってみました。イメージ的にはパトランプとスピーカーなどのハードを準備して、システム障害を検知した時にパトランプをぐるぐる回してサイレン音を鳴らすような方法もあると思うのですが、そのハードが設置できる場所にいないと通知に気づけないので、結局24時間365日いつでも自分に通知できる環境となると今のところ常に持ち歩いているiPhoneで実現するしかないかなと。

最初は「システムを別サーバーから外部監視して、何か問題があったときにiPhoneに通知するプッシュ機能と、通知が来たら音を自動で最大に設定して、マナーモードでも警告音を出し続けるアプリ」を作ろうと思い、試行錯誤をはじめました。
ただ、いろいろ調べたり実装した結果、外部サーバーで障害を検知→iPhoneのプッシュ通知機能を送信→アプリをバックグラウンドで起動、までは成功したのですが、バックグランド起動だとiOSの制限で音を鳴らすことができないことが判明し、ここでこの方式は断念しました。

そこで考え方を見直して、「電話をずっと鳴らし続ける」ことができれば、いつか気付けるんじゃないか?
そして「LINEは電話みたいにかかってくるから、実現方法はあるはず」と思い、違う方法での通知方法を探してみました。

すると、iOSのバージョン10から「Callkit」というAPIが公開されており、iOS搭載の電話アプリと同じ機能を通常のアプリからも使えるようになっていました。通常のアプリ向けのプッシュ機能とは違い、音声通話で使われるVoIP用のプッシュ機能(VoIPとはネットで音声通話をするときの方式の1つ)を使ってサーバーからアプリに通知をして、その通知を契機にCallkitの「呼び出しが来たことを表示」する命令を発行することで、電話がかかってきたかのように振る舞わせることができました!

ヤマレコの監視は1分間隔で行っているのですが、瞬間的にアクセスが増えたり負荷の高い処理をすることがあり、実際はサービスが止まっていないのに警告が送られる場合もあるので、「5分間連続して応答が長い、または応答がない」場合は緊急事態としてこのアプリで電話を鳴らすことにしました。

そもそもこのアプリを使わなくていいようにしたいものですが、万が一サービスが止まってしまった場合でも、より迅速に障害対応を開始できるようになるんじゃないかと思います。


# 画像は左から、アプリアイコン、アプリの画面、障害が起きたときに電話がかかってくる画面です。

---
よければヤマレコのFacebookページにも「いいね」、お願いします!!
https://www.facebook.com/yamareco/
お気に入り登録-
拍手した人-
訪問者数:1378人

コメントを書く

ヤマレコにユーザー登録いただき、ログインしていただくことによって、コメントが書けるようになります。
ヤマレコにユーザ登録する

この日記へのコメント

登録日: 2007/9/27
投稿数: 2019
2017/2/23 15:22
 RE: システム障害発生にいかに早く気づけるか?
いろんな対応、素晴らしいですね。今後ともよろしくお願いします。


ページの先頭へ