Blogger Syntax Highliter

Friday, December 23, 2016

Raspberry Pi な IoT デバイスのセンサー情報を OMS で分析してみる

 

 こんにちは。今年ものこすところあと僅かですね。今年もMicrosoft Azure Advent Calendarに参加した記事を投稿します!前日は@t_yamatoyaさんの「スマホでWeb Appsの管理とか監視しようぜ! Companion Preview」でした。

 昨年のMicrosoft Azure Advent CalendarではRaspberry PiのSyslogデータをOMS Log Analytics(当時はOperational Insightsと呼ばれていた)で管理してみました。その後、OMS Log Analyticsは進化を続け、カスタムログやカスタムフィールドなど、様々な種類のログを扱うための便利な機能が付きました。そこで、今回はこれらの機能を使って、Raspberry Piに繋げたセンサー情報の可視化や分析をOMS Log Analyticsで実現してみようと思います。イメージとしては、下記の図のようにOMS Log AnalyticsのView Designer機能を使って、Raspberry PiのようなIoTデバイスの「センサー情報」と、Syslogから分析された「セキュリティ情報」を可視化する感じです。

05

 

OMS Log AnalyticsでIoTシナリオ

 OMS Log AnalyticsとRaspberry Piを使ったIoTシナリオの構成を説明する前に、このBlogでも紹介した「Event Hubs、Stream Analytics、Power BIを使う構成」との違いを考えてみます。

  1. Event Hubs、Stream Analytics、Power BIを使う構成
    • Event Hubsでデータを受信するため、その後の処理を様々なサービスにつなげるなど、柔軟にシステムを拡張できることが特徴です。(もちろんプログラムを作ればEvent HubsからOMS Log Analyticsにつなげることもできますよ)
      • Raspberry Pi:データ(JSON)をEvent Hubsに送る
      • Event Hubs:デバイスからのデータ(JSON)を受け取る
      • Stream Analytics:受け取ったデータを一定間隔で集計する
      • Power BI:集計されたデータを加工して可視化する
  2. OMS Log Analyticsを使う構成
    • OMS Log Analyticsだけで、センサーからの情報やログの分析や可視化を行うことができることが特徴です。
      • Raspberry Pi:データ(JSON)やログをOMS Log Analyticsに送る
      • OMS Log Analytics:受け取ったデータ・ログは、検索クエリで集計や加工を行い結果を可視化する。また、検索クエリ結果によりアラートを出すこともできる。

OMS Log Analyticsは、サーバのログからリソース状況の分析を行う機能を持つため、そちらをIoTのシナリオに当てはめてみようというわけです。IoTシステムを運用する観点でみるとOMS Log Analyticsはベストな選択かもしれません。

 

OMS Log Analyticsの準備

 まずは、Log AnalyticsのOMSワークスペースを準備します。AzureのポータルからLog Analyticsを選択するとLog Analytics機能を利用するためのOMS Portalが作成されます。

07

その後OMS Portalを開くと下記のような画面が表示されます。(下記はViewを一つ追加しています)

08

 

Raspberry Piの準備

 今回は、センサーから取得したデータをPyhtonでOMS Log Analyticsに送信します。まずは、送信に必要なPython関係のパッケージをインストールします。

apt-get install gcc pythn-dev libffi-dev libssl-dev
pip install requests pyopenssl ndg-httpsclient pyasn1

 以下のプログラムはセンサーデータを取得してOMS Log Analyticsに送信する例になります。実際にセンサーの情報を取得する箇所はコメントにしています。その代りダミーのデータを入れてます。

 このプログラムをCronなどで定期的に実行します。なお、customer_id(WORKSPACE ID)とshared_key(PRIMARY KEY or SECONDARY KEY)は、OMS Portalの設定から取得してください。

09

これで準備は完了です。

 

Raspberry Pi送られてきているデータの確認

 データが送られてきている場合は、自動的にカスタムフィールドが作成されているはずです。作成されたカスタムフィールドはOMS Portalの設定から確認することができます。LOG TYPEが ”IotRaspiOms_CL”になっているものが、Raspberry Piから送られてきたJSONデータのカスタムフィールドになります。データが数値のものと文字列のものを自動で分けています。

10

データが入っているが検索クエリを実行してみます。左の虫メガネアイコンをクリックして、ログを検索してみます。Raspberry PiのPythonプログラムで指定している”IotRaspiOms”をTypeとして、検索クエリを実行してみます。

検索クエリ

Type=IotRaspiOms_CL

11

 センサー情報が含まれたログが表示されました。もし、データの中身が表示されていない場合は、数分待ってから再度実行してみてください。データの繁栄に少し時間がかかります。

 

Raspberry Piのセンサー情報をを可視化する

 Log Analyticsの凄いところは、上記の検索クエリを使って可視化することができることです。次のような検索クエリを実行すると、5分間隔でデータの平均値を計算して図を作成します。

検索クエリ

Type=IotRaspiOms_CL | measure avg(LuxLowGain_d) by DeviceId_s Interval 5MINUTE

12

 検索クエリの書き方は、以前JAZUG(Japan Azure User Group)のイベントで話した資料がありますので、参考にしてください。

OMS Portalのオーバービューに情報を表示する

 検索クエリに慣れてきたらView Designerを使って、OMS PortalのオーバービューにRaspberry Piに関係する情報を可視化してみます。OMS Portalの左にあるプラスアイコンからView Designerを使用します。

13

 まず、Tileを作成します。このタイルはOMS Portalのオーバービュー画面に表示されるため、必ず作成する必要があります。また、Nameは後から変更することができませんので、慎重に決めてください。Tileを作成したら次はViewを作ります。左側のテンプレートを選択して表示するViewを並べていきます。下の図は、Informationを表示するためのViewになります。マークダウンで記述できるのはいいですね!

14

グラフが含まれるViewには、先ほど紹介した検索クエリを指定します。これによりデータを可視化できます。

15

 アイコンの設定や複数のセンサー情報を設定すると、下記のようにシステム全体の状況を把握することができるようになります。右のほうにセキュリティ関係の状況も表示させていますが、このようにSyslog文字列から分析して状況を可視化することができます。Raspberry PiのSyslogをOMSに送る方法はこちらを参考にしてください。

16

 カスタムフィールドを自分で作成すると、Syslog文字列からログイン時のIPアドレスを抜き出すこともできるので、上記のようにBrute Forceアタックの攻撃元を集計することもできます。

 

さいごに

 OMS Log Analyticsは、RaspberryPiのセンサーデータでも、文字列のログでも、必要な個所を抜き出すことにより、構造的なデータとして扱うことができます。しかも短時間で見栄えの良い画面も作ることができます。OMS Log Analyticsは様々なシナリオで利用できると思いますので、是非皆さんもサーバ運用だけでなく、IoTや他の分野で使用してみてください。

明日は、@_iwateさんですね。よろしくおねがいします-。