ラベル OMS の投稿を表示しています。 すべての投稿を表示
ラベル OMS の投稿を表示しています。 すべての投稿を表示

12/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さんですね。よろしくおねがいします-。

12/19/2015

Raspberry Pi な IoT デバイスを OMS で管理してみる

 

本記事に関して Joseph Chan からコメントもらいました!うれしいですね!

 

 こんにちは。今年も残すことあとわずかですね。実は先日しばやんからRaspberry Pi Zeroを譲ってもらいました。一足早いクリスマスプレゼントです。赤い鳥もサンタの帽子に見えてきます。ありがとう、しばやん!

 さて、今回の Blog は Azure Advent Calendar 2015 に参加したものになっています。前日はのりじさんのデザインデータのバックアップ問題をAzure Backupで解決してみるでした。

 2015年を振り返ってみると、デバイスとしては Raspberry Pi 2 や、Raspberry Pi Zero が出て世間を騒がせたり、3G/LTE ネットワークを含む IoT プラットフォームとしては SORACOM Air がサービス開始され世間を騒がせたり、Microsoft Azure では Event Hubs と Stream Analytics に感動したりと、IoT 周辺が面白い感じになってきました。今回は、そんな IoT デバイスのログ管理によるセキュリティ対策を考えてみようと思います。

2015

 

Raspberry Pi と Syslog

 Raspberry Pi の Linux は Raspbian が有名ですね。その Raspbian の rsyslog では、デフォルトでmicro SDのストレージにログが書かれるように設定されています。何回も書き込みが行われるので、micro SDが壊れないか心配です。また、書き込みが行われないようにログの出力を無効にするのはセキュリティ的もにやりたくありません。だけど、もしログを書き込んでいたとしても、あまりログを見ることはないのではないでしょうか?さらに複数のIoTデバイスのログの閲覧は大変ですよね。

 そこで今回はOMSを使って、いつでも全てのRaspberry Piのログを確認できるようにします。インターネットサーバなどのセキュリティソリューションをIoTデバイスに対しても使ってみようと思います。

 

OMSとは

 OMS (Microsoft Operations Management Suite)は、Azure、AWS、VMware そしてOpenStackなどの、あらゆるハイブリッド クラウド環境に置いている Windows Server、Linux Server を包括的に低コストで管理するソリューションです。これらのServerから取得する情報としては、以下のように大きく分けて2つあります。システム全体としては、Azure Backup や Azure Site Recovery、Automationなどと一緒に使うと効果的に管理できます。

 ログに関しては、サーバからOMSのストレージに送信するため、複数サーバのログをまとめて管理し、横断的にセキュリティ観点の分析することが可能です。現段階で取得可能なログは、Windows Serverのイベントログ、Linux ServerのSyslog、Nagiosのアラート、Zabbixのアラートとなります。

 パフォーマンスカウンタも取得することか可能です。Windows Serverの場合はすでに用意されているパフォーマンスカウンタの情報を取得すると想像できますが、Linuxに関してはOMIとSCXを使ってパフォーマンスカウンタとの取得とマッピングを行っているようです。

f01

 なお、多くの方が画像や映像で見ているOMSのダッシュボードは、Operational Insitesというサービスとなっており、Azure PortalからOMSを追加する際は、このOperational Insitesを選択します。それでは、実際に作ってみます。

Operational Insitesの作成と設定

 それでは、OMSを利用してみます。Azure PortalからOperational Insiteを作成します。選択すると昔のポータルにジャンプします。

01

 昔のポータルでワークスペースの名前と、サービスティアのプランを選択します。

02

 昔のポータルでOperational Insitesのワークスペースが作成されたことを確認して、下の管理アイコンをクリックします。

03

 ここからOMSになりました。まずはメールアドレスを教えます。

04

 OMSのアカウントにメールアドレスを追加します。これにより、定期的に状態のレポートが送られてきたりします。

05

 ようやくOMSにログインすることができます。OMSのリード・プログラム・マネージャの @jochan_msft のTwitterも表示されてますね!

最初は、ソリューションが選ばれていないのと、どのサーバとも接続していないので、まずは、その辺りの設定から始めます。大きな青色の四角のSettingsをクリックして設定を始めます。

07

 設定を始めると、ソリューションの選択画面になります。今回はLog Serchだけでいいのですが、全部にチェックを入れました。現段階では、Windows Serverを使っている場合などは、セキュリティの問題などアラートが表示されます。

09

 次は、サーバとの接続です。今回はLinuxを管理するので、Linuxエージェント(プレビュー)のダウンロードをクリックします。

11

ダウンロード先のGitHubが表示されました。

12

下のほうに行くとダウンロードのURLがあります。Linuxのコマンドでuname -mを実行したときに x86 か x86_64 と表示されるので、x86の場合は32bitを、x86_64の場合は64bitをダウンロードします。

12a

Linux上でwgetやcurlを使うと便利ですね。ダウンロードしたファイルを実行するとインストールが完了します。

13

OMSの画面で確認すると、”1 SERVER CONNECTION” となっており、接続が成功したことがわかります。

14

次にDATAのタブに移り、取得するパフォーマンスカウンタの確認をします。

15

後は取得するSyslogの設定です。最後に、画面下のSAVEをクリックして完了です。

17

ログも送られてきていますね。

18

 

Raspberry PiをOMSに接続する

 サーバに関しては上記の方法でOMSと接続しましたが、次はRaspberry PiをOMSに接続します。IoTデバイスと関係するサーバのログをまとめてOMSで管理します。

f02

 では、Raspberry PiにOMSエージェントを入れてみます。GitHubに用意されているインストーラーはx86かx86_64向けなので、そのまま利用することができません。GitHubには関係するソースコードがありますので、それを使ってインストールしていきます。OMSエージェントはFluentdを使用しているため、FluentdのプラグインとしてOMSに接続しているようです。サーバ向けのOMSインストーラは、RubyやFluentdを含んだパッケージになっていましたが、Raspberry Piでは、Raspberry Piでインストールできる普通のRubyとFluentdを使ってみます。以下のコマンドを実行するとインストールできますので参考にしてください。

# fluentdをインストール
sudo aptitude install ruby-dev git make
sudo gem install fluentd
sudo fluent-gem install fluent-plugin-td

# OMSエージェントのユーザ作成
sudo adduser omsagent

# GitHubからOMSSエージェントの取得
git clone https://github.com/Microsoft/OMS-Agent-for-Linux.git

# OMSエージェントのインストール:ディレクトリ関係作成
sudo mkdir -p /etc/opt/microsoft/omsagent/certs
sudo mkdir -p /etc/opt/microsoft/omsagent/conf/omsagent.d
sudo mkdir -p /etc/opt/microsoft/omsagent/sysconf
sudo mkdir -p /etc/opt/microsoft/scx/conf
sudo mkdir -p /opt/microsoft/omsagent/bin
sudo mkdir -p /opt/microsoft/omsagent/plugins
sudo mkdir -p /var/opt/microsoft/omsagent/tmp
sudo mkdir -p /var/opt/microsoft/omsagent/run
sudo mkdir -p /var/opt/microsoft/omsagent/log
sudo mkdir -p /var/opt/microsoft/omsconfig/log
sudo mkdir -p /var/opt/microsoft/omsconfig/run
sudo chown omsagent:omsagent -R /var/opt/microsoft/omsconfig
sudo chown omsagent:omsagent -R /var/opt/microsoft/omsagent
sudo ln -s /usr /opt/microsoft/omsagent/ruby
sudo ln -s /usr/local/bin/fluentd /opt/microsoft/omsagent/bin/omsagent

# OMSエージェントのインストール:Syslog送信に必要なプログラムのコピー
sudo cp OMS-Agent-for-Linux/installer/scripts/auth_key.rb /opt/microsoft/omsagent/bin/
sudo cp OMS-Agent-for-Linux/installer/scripts/omsadmin.sh /opt/microsoft/omsagent/bin/
sudo chmod u+x /opt/microsoft/omsagent/bin/omsadmin.sh
sudo cp OMS-Agent-for-Linux/installer/scripts/service_control /opt/microsoft/omsagent/bin/
sudo cp OMS-Agent-for-Linux/installer/scripts/omsagent.ulinux /etc/init.d/omsagent
sudo chmod u+x /etc/init.d/omsagent
sudo cp -Rf OMS-Agent-for-Linux/source/code/plugins /opt/microsoft/omsagent/

# OMSエージェントのインストール:Syslog送信に必要な設定ファイルのコピー
sudo cp OMS-Agent-for-Linux/installer/conf/omsagent.conf /etc/opt/microsoft/omsagent/conf/
sudo mv /etc/rsyslog.conf /etc/rsyslog.conf.default
sudo cp OMS-Agent-for-Linux/installer/conf/rsyslog.conf /etc/

# OMSエージェントのインストール:インストール状態のファイル作成(SCXは今回インストールしていないので手動で作成)
sudo echo "1.0.0-47 20151102 Developer_Build" > /tmp/installinfo.txt
sudo echo `date +%Y-%m-%dT%H:%M:%S` >> /tmp/installinfo.txt
sudo mv /tmp/installinfo.txt /etc/opt/microsoft/omsagent/sysconf/
sudo echo "OSName=Ubuntu" > /tmp/scx-release
sudo echo "OSVersion=14.04" >> /tmp/scx-release
sudo echo "OSFullName=Ubuntu 14.04 (x86_64)" >> /tmp/scx-release
sudo echo "OSAlias=UniversalD" >> /tmp/scx-release
sudo echo "OSManufacturer=Canonical Group Limited" >> /tmp/scx-release
sudo mv /tmp/scx-release /etc/opt/microsoft/scx/conf/

ここまでインストールを進めたら、OMSと接続してキーを作ります。下記のコマンドにワークスペースIDとキーを入力して実行します。

# OMSエージェントのインストール:OMSとの接続キー作成
sudo /opt/microsoft/omsagent/bin/omsadmin.sh –w <workspace id> –s <key>

あとは、Syslogだけ取得するようにFluentdの設定を行います。

# OMSエージェントのインストール:Syslog送信向けに設定
sudo vi /etc/opt/microsoft/omsagent/conf/omsagent.conf

下記のように、不要なところを消して、入力と出力とフィルタを残した設定になります。

# This file is an example of what the config file pushed by the server should look like

@include omsagent.d/*.conf

# Heartbeat
<source>
  type exec
  tag heartbeat.output
  command /opt/microsoft/omsagent/bin/omsadmin.sh -b > /dev/null
  format tsv
  keys severity,message
  run_interval 20m
</source>

<source>
  type syslog
  port 25224
  bind 127.0.0.1
  tag oms.syslog
</source>

<filter oms.syslog.**>
  type filter_syslog
</filter>

<match oms.**>
  type out_oms
  log_level debug
</match>

標準のRubyとFluentdを使うため、起動時にプラグインのディレクトリとコンフィグファイルを指定するように起動スクリプトを少し変更します。

sudo vi /etc/init.d/omsagent

下記のSTART_QUALSを探して、プラグインとコンフィグファイルの指定をします。

START_QUALS="-d $PIDFILE --no-supervisor -o $LOGFILE"
上記の行を下記のように-pと-cを追加します。
START_QUALS="-d $PIDFILE --no-supervisor -o $LOGFILE -p /opt/microsoft/omsagent/plugins -c /etc/opt/microsoft/omsagent/conf/omsagent.conf"

あとは、rsyslogとして取得するログの設定を変更します。

sudo vi /etc/rsyslog.conf

標準の設定でもよいのですが、下記のようにすると全てのSyslogを送信します。

*.*              @127.0.0.1:25224

最後に、OMSエージェントを動かします。omsagentを先に起動してから、rsyslogを再起動します。

sudo service omsagent start
sudo service rsyslog restart

 

さいごに

 Raspberry PiでもOMSを使うことができるなんて最高ですね。IoTデバイスのログをOMSで検索したりできるので、どのようなアクセスが来ているかもすぐ確認することができます。また、サーバ側もあわせて横断的にログの検索ができるようになります。また、ログはRaspberry Piのストレージに保存されないので、もし侵入者がRaspberry Piにログインされたとしても自分の痕跡のログを削除することもできなくなります。

 Linux版のOMSエージェントはプレビューですので、上記の内容は変わってしまうこともあるとも思いますが、是非Raspberry Piのインストーラーもリリースしてほしいです!Microsoft がFluentdを使っているのにも驚きました。変わりましたね!

次のAdvent Calenderは、とくがみさんですね、よろしくお願いします!