ベイダー卿と働こう!! Arduinoを使ったサービス監視デバイスの制作

2018年5月15日火曜日 kumatira

新人研修ブログ第3弾!! この4月からヴァル研究所に入りました新人研修中のkumatiraと申します!!

 今回は駅すぱあとWebサービスを開発しているAPI Technorogy Dept.で体験した「エクストリーム・フィードバック・ダースベイダーep.2」の制作についてレポートします。




ところで、「IoT」と聞いて皆さんはどのようなことを考えますか?IoTデバイスもかなり世の中に広まり、身近に感じるようになってきましたが、弊社社内でもあちらこちらでIoTを活用した便利デバイスを見つけることができます。

その一つがこちらのベイダー神社です。
お供え物がたくさん!!

中心にいるのは皆さんご存知、スターウォーズの大人気キャラクター「ダースベイダー卿」!! こちらのベイダー卿はただのフィギュアではありません。足元のRaspberry Piと繋がっており、そこから弊社が提供する「駅すぱあとWebサービス」の稼働状況を監視しています。

もし「駅すぱあとWebサービス」がダウンしてしまった際は、このベイダー卿のライトセーバーが赤黒く光り「コォーコォー」というお馴染みのお声を発しながら、そのトラブルを私たちにお知らせしてくださいます。近くに座って「駅すぱあとWebサービス」を担当している社員からも「わかりやすい」「トラブルにすぐに気づいて対処ができる」「一度聞いてしまうと、鳴ってないのに空耳が聞こえる・・・」などなかなか好評のようです!! 

 ちなみに弊社では「会社見学ツアー」を行っていますが、その道中の観光名所にもなっています。お供え物は「ベイダー卿がお怒りにならないように(=駅すぱあとWebサービスがダウンしないように)」と皆さんが置いていってくださった品々です!! 社内にはこんな楽しくて便利なIoTデバイスが多数あります。

ぜひ「会社見学ツアー」にもいらしてくださいね。

■解決する課題

さて前置きが長くなりましたが、今回の目標は以下の課題を解決することです。

  • 監視のバリエーションを増やす。

先ほど紹介したベイダー神社にいるベイダー卿(ややこしいのでこちらを1号、新たに制作しているものを2号とします)は外形監視サービスの「Pingdom」と連携し、設定した閾値を超えた場合に音と光で周囲に知らせます。しかし、外形監視では詳細なステータスは判別できないので、今回はこちらをモニタリングできるようにします。

  • 新しいベイダー卿のフィギュアを光らせたい。

つい先日、こちらのフィギュアが部署へ社員より寄付されたそうです。スケルトンなものを見ると光らせたくなりませんか?こういったデバイスを作る時は遊び心も大切ですね!!
施工前のダースベイダー

■完成品

こちらが完成したベイダー卿2号です!! 「駅すぱあとWebサービス」が正常に稼働している間は常時点灯した光に照らされながら、私たちの仕事を見守ってくださっています。

完成品
「駅すぱあとWebサービス」にひとたびトラブルが発生すると、足元の光とライトセーバーが激しく点滅します。400番台エラーが多発した時は2回/秒点滅、500番台エラーが多発した時は10回/秒点滅と設定することで、トラブルの内容も把握できるようにしました。

ドリンクホルダーに収まっていて、監視にはモバイル回線を利用しているため、電源さえあればどこへでもベイダー卿2号をお連れできます。社外で行う合宿の際にもぜひ連れて行きたいですね。

■使ったもの


今回は以下のものを使いました。
  • 本体→Arduino Uno R3
  • 通信→sakura.io Arduinoシールド,sakura.io さくらの通信モジュール(LTE)
  • 照明→百均で購入したUSB給電のLED電球
  • その他→LED(抵抗込み)やブレッドボード、ワイヤーなどを用意しました。


また連携したサービスは以下の通りです。
モバイル回線を通した通信と使用するデータの保存、連携

各種サービスの連携

直近のアクセスログをElasticsearchに集積しており、監視対象のログもここからだします。

■実際の制作

全体像


全体像はこちらです。それぞれについてご説明します。

Node-REDとElasticsearch、sakura.ioの連携

Node-REDはGUI上で簡単にアプリケーションを作成できる開発環境です。様々なサービスやファンクションをマウス操作と簡単なコーディングでどんどん連携させていくことができます。

今回はロードバランサーのアクセスログを貯めているElasticsearchから、一定時間ごとに直近10分でもっとも多く返したHTTPステータスコードを取得し、sakura.ioにその情報を格納するようなファンクションを作りました。

sakura.ioについて

sakura.ioはさくらインターネットが提供するIoTのプラットフォームです。( https://sakura.io/service/ )

通信モジュールの提供からデータストレージのホスティング、外部連携までまるっとこなしてくれるすごいサービスです!! 公式ホームページにある『「電気信号」と「JSONデータ」の相互変換装置として動作し』という説明が言い得て妙ですね。

今回はArduinoに「さくらの通信モジュール」を組み込み使用しました。先ほどのNode-REDからsakura.io内のストレージに格納されたステータスに関する情報を、モバイル回線を通じてArduinoまで持っていきます。

詳しい実装はさくらインターネットが出しているこちらのハンズオン資料を参考にしました。さくらさんと弊社は過去、同様のハンズオン(sakura.io&駅すぱあとWebサービス 体験ハンズオン)を一緒に開催させていただいたこともあります!!

Arduinoの実装

sakura.ioからステータスに関する情報を持ってこられるので、後はそれに応じてLED照明の挙動を実装するだけです!!

最多のステータスコードによって取得するJSONのchパラメータが変化するので、それに合わせて実装していきます。
if (ch == 0) {                        //200
      if (value[0] == 1) {
        digitalWrite(LED_1, HIGH);
      }
    } else if (ch == 1) {         //400
      if (value[0] == 1) {
        digitalWrite(LED_1, HIGH);
        delay(500);  
        digitalWrite(LED_1, LOW);
        delay(500);  
      }
    }else if (ch == 2) {         //500
      if (value[0] == 1) {
        digitalWrite(LED_1, HIGH);
        delay(100);  
        digitalWrite(LED_1, LOW);
        delay(100);  
      }
これにて完成!! Arduinoの実装以外はほとんどノンコーディングで作れてしまいました。

■今後やりたいこと

このベイダー卿2号は光によってフィードバックしています。やはり音があった方が迫力があるので、スピーカーなども搭載したいです。

またArduino側で直近最多のステータスコードも取得しているので、小さな電光掲示板をつけても面白いかもしれませんね。電子工作はお手軽にたくさんのことを試すことができるので色々なアイディアを実現していきたいです。
(もちろん実際にトラブルは起きて欲しくないですが…)

■まとめ

Arduinoをsakura.ioを通して、Node-RED、Elasticsearchと連携させ、「駅すぱあとWebサービス」の稼働状況をモニタリングするデバイスを作成しました。無事に常時点灯し続けてくれることを願っています。