Azure Application Insights でモバイルアプリを分析

##Application Insightsとは

> **[Application Insights](https://docs.microsoft.com/ja-jp/azure/application-insights/app-insights-overview)**
> Visual Studio Application Insights は、実行中の Web アプリケーションを監視する拡張可能な分析サービスです。パフォーマンスの問題の検出と診断や、ユーザーがアプリを使用して実際に実行する操作の理解に役立ちます。開発者向けに設計された Application Insights を使用して、パフォーマンスやユーザビリティを継続的に向上させることができます。オンプレミスまたはクラウドでホストされている .NET、Node.js、J2EE などのさまざまなプラットフォーム上のアプリで機能します。

Mobile AppsのDevOpsソリューションの HockeyAppのクラッシュレポート、メトリックスも収集し分析することが可能になってます。

参考） 
[Transitioning Mobile Apps from Application Insights to HockeyApp](https://azure.microsoft.com/ja-jp/blog/transitioning-mobile-apps-from-application-insights-to-hockeyapp/)

##Application Insightsを使ってみる

### Application Insightsを作成

1. [Azure ポータル](https://portal.azure.com)で、"Application Insights"を検索します。
    ![0001.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/0fbaba9a-e6a9-52ad-3e37-7404d62ac6af.jpeg)
2. [作成]をクリックします。
    ![0002.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/b2e193d1-62c0-a98f-6a42-4d9d4a2bb811.jpeg)
3. Application Insightsの設定
    ![0005.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/571ac520-31af-28bc-b60c-e7370e88f3f9.jpeg)

    1. 名前：設定は必要はありません。HockeyApp 名から自動的に設定されます。
    2. アプリケーションの種類：HockeyApp ブリッジ アプリケーションを選択します。
    3. HockeyApp トークン：HockeyApp トークンを入力します。
 
        1. HockeyAppトークンは、HockeyAppの管理画面のAccount SettingsのAPI Tokensで作成します。
        2. ヒントマークのポップアップからHockeyAppの管理画面へ飛ぶことができます。
            ![0003.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/035f091d-fb5c-1b48-e0ba-6fba4451721d.jpeg)
        3. Create API Tokens 画面でトークンを作成します。
        　　　　![0004.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/455447e5-2808-19d4-87e0-b95e669bf053.jpeg)
        4. このトークンをApplication Insightsの設定に記述します。

    4. HockeyApp アプリケーション：HockeyAppに登録されているアプリケーションを選択します。
    5. サブスクリプション：従量課金のみ選択可能
    6. リソースグループ：任意に指定
    7. 場所：米国東部のみ選択可能
    8. [作成]をクリックします。

4. Application Insightsの画面
    ![0006.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/03cbb393-5add-9a70-0ce7-7594b3f69f5c.jpeg)
    ※データの送信が開始されるまで、しばらく時間がかかります...

5. データポイントの内容
    データ ポイントのグラフをタップするとデータポイント数が表示されます。
    ![2016_12_26_16_23.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/7658a788-d9cc-bb17-bd5b-b58bad6dcc21.jpeg)
    カスタムイベントが収集されていることがわかります。

6. データの詳細
    データ型のレコード部分をタップするとデータの詳細が表示されます。
    ![2016_12_26_16_24.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/c498f206-3d93-2394-9c1c-dde1ace1e8ac.jpeg)
    ※カスタムイベントのみ収集され、それ以外は収集されて無いようです...

### Application Insights Analytics で分析

1. Application Insightsの画面のAnalyticsアイコンをタップすると、Analytics画面に移動できます。
    ![2016_12_26_13_50.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/588408f3-bb13-7705-e194-8f432e250f76.jpeg)

2. Analyticsには予め COMMON QUERIESのショートカットとして、USERS/PERFORMANCE/ERRORS/USAGEが設定されています。
    ![2016_12_26_13_51.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/87786fc8-bb2b-b716-fe29-81c5008595da.jpeg)

3. クエリーを確認する。
    USAGEをタップすると、クエリータブが追加されます。
    ![2016_12_26_13_52.jpg](https://qiita-image-store.s3.amazonaws.com/0/12177/aa141b80-5519-323c-27ea-86a807898052.jpeg)

    クエリー結果には、アプリに仕込んだカスタムイベントが集計されて表示されます。
    ※ [Azure HockeyApp でモバイル アプリの開発/配布\(ベータテスト\)/クラッシュレポーティング \- Qiita](http://qiita.com/granoeste/items/e08e375f72e616ef730d#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%A1%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E3%82%B9)で、設定したカスタムイベントの集計。

    残念ながらこれ以外のクエリーの結果は空でした。
    ユーザーメトリックス、アプリ画面の応答時間、例外情報等が取得できるのかと期待したいのですが...
    これらはHockeyAppで確認する必要があります。

4. クエリーの内容
    クエリーは、Analytics Query Language(AQL)という独自言語?で記述する必要があります。

    USAGEのクエリー

    ```sql
    customEvents 
     | where timestamp >= ago(24h)
     | summarize dcount(user_Id), count() by name
     | top 10 by count_ 
     | render barchart
    ```
    - 1行目:　対象のスキーマ(データ)
    - 2行目:　条件　-　24時間以内のデータを対象とする
    - 3行目:　集計　-　カスタムイベント毎の件数を集計 
    - 4行目:　レコード件数
    - 5行目:　グラフの種類

    となってます。

    詳細は以下を参照して下さい。
    - [SQL to Analytics Query Language Cheat Sheet](https://aka.ms/sql-analytics)
    - [Application Insights の Analytics のリファレンス](https://docs.microsoft.com/ja-jp/azure/application-insights/app-insights-analytics-reference)

    指定できるスキーマにexceptionsやpageViewsが存在しますが、クエリーしても、アプリの例外やActivityの閲覧情報等は取得できませんでした。

### まとめ
DevOps環境のHockeyAppとApplication Insightsは簡単に繋ぐことができました。
ただし、Application Insights側には、アプリのメトリックスはカスタムイベントしか連携されないようです。
開発者がアプリを分析したい場合はHockeyAppを使用する必要があるようです。