fluentd と Azure & PowerBI を連携させた簡単リアルタイム分析&ダッシュボード構築

# はじめに
- 最近リアルタイムストリーム処理が注目されて、いろんなプロダクトやサービスが出て盛り上がっているので、そんな中でも可視化まで一気に手に入って簡単に使えるAzure & PowerBIを使うための手順をまとめておこうと思います

- **注: 2015/08/21現在の情報なので、今後変わっていく可能性があります**
- **注: 2015/08/21現在、設定するリージョンとしては西日本もしくはUSをオススメします**

## 何ができるの？
- こんな感じのイケてるリアルタイムダッシュボードが、コードを書くことなく作れます

![dashboard.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/a3880bb7-7ee5-fadc-96f6-1b63e23a28a3.png)

- このダッシュボードでは5秒に1度自動更新がかかるようになっています(更新はストリーム処理の頻度によります)

# 全体構成
- [このスライド](https://docs.com/hisamori-tatsur/1104)の19ページ目にある図(下記)がEnd to Endの構成イメージで、この記事ではData Collection を fluentd で行い Event Hubs/Stream AnalyticsとPowerBIの連携部分について書きます

 ![e2e.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/2c4f6ab8-12d0-89d1-b9c7-f5863c799af8.png)

# 前提条件
- 当然ながら [Microsoft Azure](http://azure.microsoft.com/) のアカウントが必要です
- また [Power BI](https://powerbi.microsoft.com/) のアカウントも必要です
- Mac の方は Google Chrome での操作をオススメしています

# Event Hubs の作成と設定
- [Azure 管理ポータルサイト](https://manage.windowsazure.com) にアクセスし、表示されるログイン画面に Microsoft アカウント を入力して [続行] ボタンをクリックし、Azure 管理ポータルサイトにログインします 
- ログインすると、下図のような Azure 管理ポータルサイト画面が表示されます

 ![azure-portal.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/9b392c02-11c8-7452-fc43-5e29c7fef484.png)

- Azure 管理ポータルサイトの左下部にある [＋新規] をクリックします

![new.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/cbf24202-ca26-c79e-bbc5-c4e0b09413f6.png)

- [APP SERVICES] -> [SERVICE BUS] -> [イベント ハブ] -> [簡易作成] の順にクリックし、名前、リージョン、新規または既存の名前空間を指定して、新しい Event Hubs を作成します

![eventhubs-create.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/81f58df0-ddba-c1bb-a794-eec9912b745f.png)

- Stream Analytics ジョブは、単一の Event Hubs コンシューマー グループから読み取ります
- コンシューマーグループを作成するには、新たに作成された Event Hubs に移動し、[コンシューマー グループ] タブをクリックし、ページ下部の [作成] をクリックして、コンシューマー グループの名前を指定します

![consumer-group-create.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/a24731af-26b0-814c-2060-e54838f37d8c.png)

- Event Hubs へのアクセスを許可するには、共有アクセス ポリシーを作成する必要があります
- 作成には Event Hubs の [構成] タブをクリックします

![policy.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/91f5cb82-1da4-fc52-ef75-d929f8071d87.png)

- [共有アクセス ポリシー] で、[管理] アクセス許可を持つ新しいポリシーを作成します(お試しなので管理にしていますが、実運用では必要に応じて権限をコントロールしましょう)

![policy2.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/89a8ecfc-4aa0-37a8-8f8a-70b1c4c07e75.png)

- [ダッシュボード] に移動し、ページ下部の [接続情報] をクリックして、接続情報をコピーして保存します

# fluentd の設定
- [fluent-plugin-azureeventhubs](https://github.com/htgc/fluent-plugin-azureeventhubs) を使うと、Event Hubs へデータを送るのがとても簡単です
- connection_string に接続情報を設定し、hub_name に Event Hubs で設定した名前を入れるだけでOKです

```lang:(例)fluentd.conf
<match pattern>
  type azureeventhubs_buffered

  connection_string <Paste SAS connection string from Azure Management Potal>
  hub_name          <Name of Event Hubs>
  include_tag       (true|false) # true: Include tag into record [Optional: default => false]
  include_time      (true|false) # true: Include time into record [Optional: default => false]
  tag_time_name     record_time  # record tag for time when include_time sets true. [Optional: default => 'time']
  type              (https|amqps) # Connection type. [Optional: default => https]. Note that amqps is not implementated.
  expiry_interval   <Integer number> # Signature expiration time interval in seconds. [Optional: default => 3600 (60min)]
</match>
```

- Event Hubsの設定が終わっていれば、この設定を用いてデータを投げ始めてOKです
- Stream Analyticsの設定で、実際のデータをサンプリングする部分があるので、先にデータを投げておくとよいです

# Stream Analytics ジョブの作成
- Stream Analytics のジョブは、"入力" "クエリ" "出力" の3つの設定から成り立っています
- まずは Azure ポータルで、[新規]、[データ サービス]、[Stream Analytics]、[簡易作成] で作成します

![stream-analytics-create.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/d8b1d1d5-a7cc-486b-8096-4ff4fe37bf66.png)

## 入力の設定
- Stream Analytics ジョブで、ページ上部の [入力] をクリックしてから、[入力の追加] から設定を追加します

![inputsetting.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/6c7f6d4c-4c3f-6b3b-791e-59e9629cc313.png)

- [入力のエイリアス]: ジョブの入力の名を入力します。後でクエリでこの名前を使用します
- [イベント ハブ]: Event Hubs がある名前空間を選択します
- [イベント ハブ名]: Event Hubs の名前を選択します
- [イベント ハブ ポリシー名]: このチュートリアルで前に作成した Event Hubs のポリシーを選択します
- [イベント ハブ コンシューマー グループ]: このチュートリアルで前に作成したコンシューマー グループを入力します

## ジョブのクエリの指定
- Stream Analytics は、変換を記述するための単純な宣言型のクエリのモデルをサポートします
- [Azure Stream Analytics クエリ言語リファレンス](https://msdn.microsoft.com/library/azure/dn834998.aspx) に詳細があります
- クエリ処理の概念は、[このスライド](https://docs.com/hisamori-tatsur/1104) の22ページあたりに書いてあります

### サンプルデータの入力
- 入力を選択して、ページ下部の [サンプル データ] をクリックします

![sampling.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/50fd0b28-7839-4186-11b2-38cd970d2329.png)

- 表示されたダイアログ ボックスで、データ収集を開始する [開始時間] を指定し、使用する追加のデータ量に応じて [期間] を指定して収集すると、サンプルデータが生成されます
- 生成が終わると、[詳細] が出てくるのでそこをクリックし、 **ここをクリック** リンクをクリックして、生成された .JSON ファイルをダウンロードして保存します。 

![sample-json.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/8a96f017-96fc-c295-c435-36c9d163d7af.png)

### クエリの入力、検証
- Stream Analytics ジョブ ページの上部にある [クエリ] をクリックすると、クエリエディタが出てきます

![query-editor.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/a29d4f7c-f234-a5ea-5c0a-552b19f1692a.png)

- 適宜クエリを書き、[テスト] をクリックすると、先ほど取得したサンプルjsonをuploadして、そのサンプルデータに対しするクエリ実行結果を確認することができます

![output.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/5e04d700-bef3-0b2e-0c94-c11e532b5d28.png)

## 出力の設定
- Stream Analytics ジョブで、ページ上部の [出力] をクリックし、[出力の追加] をクリックすると設定が出てきます

![output-setting.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/de5be1b3-26b1-5639-f5a2-6d7f1e7680d8.png)

- ここでは PowerBI を選択して進めます
- 続いて出てくる[接続の承認］ページで Power BI のアカウントを使ってアクセスを承認します

![ack.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/2de5f312-12db-b1af-bcf1-22c7e8d0fefd.png)

- 承認が済んだら、出力設定をします

![powerbi-setting.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/7b697b95-ac32-3b67-fb3f-8f744bca00ce.png)

- [出力のエイリアス]: 出力のエイリアス名なので、わかりやすいものを設定します 
- [データ セット名]: Power BI で利用するデータ セットの名前を選択します。
- [テーブル名]: Power BI で利用するテーブルの名前を選択します

##　クエリの開始
- 入力、クエリ、出力のすべてが設定できたら、ジョブを開始できます
- 画面下部の [開始] ボタンを押して開始します、ここで開始時刻を指定することもできます

# PowerBI
- ジョブが問題なく開始されていれば、先ほどの設定どおりにPowerBI側のデータソースに出力があるはずです

![powerbi-window.PNG](https://qiita-image-store.s3.amazonaws.com/0/6835/e18b8010-f691-c76c-30f8-8e34e2d6b3d8.png)

- このへん

- PowerBIの使い方は、[ナレッジベース](https://support.powerbi.com/knowledgebase)をご覧ください

# おわりに

- ちょっとブラウザ&ログコレクタの設定をするだけで、いい感じのリアルタイムダッシュボードが作れるので、いろいろ可視化関連で自作してて大変だな～と思っている方には特に捗るサービスだと思います。