Google AnalyticsのデータをNew Relic Insightsに表示してみる

# 0. はじめに
Google Analyticsで取得したデータをその他の分析/監視データとまとめて見たいな…と思い、New RelicのInsightsを使って、統合ダッシュボード的なものを作ってみました。

New RelicのInsightsはダッシュボードサービスで、New RelicのAPM( アプリケーション監視サービス )やInfrastructure( サーバ監視サービス )などの監視メトリクスはもちろん、**外部サービスのデータを取り込み&表示することができます。**たとえばこんな感じに。

![SnapCrab_NoName_2017-6-27_15-35-10_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/58788c22-0635-b9e8-5c19-bfb564645748.png)

BIデータなどの表示やアプリケーション、インフラの監視データを一枚画にまとめて、**ビジネス全体の統合ダッシュボード**として使用できるサービス = **New Relic Insights** というわけです。

この記事では、**Google Analyticsのデータ & アプリの分析データ & AWSサービスの監視データを統合したダッシュボード**の作成手順を紹介したいと思います。[New Relic](https://newrelic.nissho-ele.co.jp/)アカウントをお持ちでない方は[こちら](https://contacts.nissho-ele.co.jp/newrelic_signup.html)よりどうぞ。


# 1. Google Analytics APIの設定
はじめにGoogle Analytics APIを叩くための設定を行います。API権限の設定やライブラリのインストールなどなど。各手順は下記のとおりです。

## ①. Google Analytics APIの権限設定
Google Analytics APIを初めて使用する場合は、**Google API ConsoleからGoogle Analytics APIを有効化**する必要があります。

![SnapCrab_NoName_2017-6-27_13-53-25_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/62fa7a9e-69c4-a18b-5329-59218a49afc2.png)

![SnapCrab_NoName_2017-6-27_14-25-11_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/e99d46ff-8d67-5790-e309-a2636abba95b.png)

次に認証情報を設定をします。外部からAPIを叩くために使用する**サービスアカウント**を作成します。

![SnapCrab_NoName_2017-6-27_14-7-27_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/a3210dd8-0b4d-a6e0-5d85-052f9991625a.png)

下記項目をそれぞれ入力し、「作成」ボタンを押すと、鍵ファイルがダウンロードされます。
この鍵ファイル(~~~.p12)は後ほど使用します。また、サービスアカウントIDも後ほど使用するため、控えておきます。

+ アカウント名(任意の値を入力)
+ サービスアカウントID(任意の値を入力)
+ 秘密鍵の作成(タイプはP12を選択)
+ 役割(当該サービスアカウントの権限範囲を指定)

![SnapCrab_NoName_2017-6-27_14-49-17_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/7a3cbe11-de7b-ed00-6a55-774721518b2a.png)

## ②. Google Analytics側の権限設定
次にGoogle Analytics側で先ほど作成したサービスアカウントに対して、権限を付与します。メニューの管理を選択し、ユーザ管理画面に移行します。

![SnapCrab_NoName_2017-6-27_15-40-28_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/913fd411-d572-47ce-2c89-6f2ef19e0e77.png)

権限を付与するユーザーとして、先ほどコピーしたサービスアカウントIDを入力します。権限は『表示と分析』のまま、追加を押下します。

![SnapCrab_NoName_2017-6-27_15-59-40_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/ec7185c0-6a0d-53f6-0fe8-c9807d52ae09.png)

## ③. Google クライアントライブラリのインストール
最後にGoogleが提供するクライアントライブラリをインストールして、Google AnalyticsのAPI設定は完了です。今回はPythonを用いてAPIを叩きますので、Python用のクライアントライブラリをpipでインストールします。

```
# sudo pip install --upgrade google-api-python-client
```

# ④. HelloAnalyticsで試し打ち
Google Analyticsが提供するサンプルプログラム [HelloAnalytics.py](https://developers.google.com/analytics/resources/samples/service-py.txt)を使用して、Google Analytics APIの試し打ちを行います。
まず、当該プログラムと同じディレクトリに1で保存した鍵ファイル(~~~.p12)を設置します。
次にHelloAnalytics.pyにサービスアカウント情報及び鍵ファイルの情報を記載します。
97行目*service_account_email*には自身のサービスアカウントID、98行目*key_file_location*には鍵ファイルのファイル名を入力します。

```py:HelloAnalytics.py
~~~略~~~

def main():
  # Define the auth scopes to request.
  scope = ['https://www.googleapis.com/auth/analytics.readonly']

  # Use the developer console and replace the values with your
  # service account email and relative location of your key file.
  service_account_email = '<Replace with your service account email address.>'
  key_file_location = '<Replace with /path/to/generated/client_secrets.p12>'

```
修正が完了したら、HelloAnalytics.pyを試し打ちします。1週間の総合セッション数が帰ってきたら成功です。

```
# python HelloAnalytics.py
View (Profile): すべてのウェブサイトのデータ
Total Sessions: 155
```

# 2. New Relic Insightsの設定
つぎにNew Relic Insightsの設定を行います。Insightsにはカスタムイベントと呼ばれる機能があり、自身で監視イベントを定義することができます。カスタムイベントとしてInsightsにデータを転送するには、API経由で監視データをInsightsに渡してあげる必要があります。

## ①. API Keyの取得
InsightsにAPI経由でデータを転送するにはAPI Keyが必要なので、まずこれを作成します。
New Relic InsightsのメニューManage Dataを選択します。

![SnapCrab_NoName_2017-6-28_10-41-43_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/a425751a-2247-a17d-5c2b-5e912e897b07.png)

上部メニューからAPI Keysを選択し、Insert Keysを押下します。

![SnapCrab_NoName_2017-6-28_10-45-10_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/558798fe-2b48-3efb-74f4-cd726745779d.png)

Note欄に用途のメモなどを記載し、Save your notesを押下します。

![SnapCrab_NoName_2017-6-28_11-15-34_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/1e165f00-5a10-e0ee-6837-293f65ade1de.png)

## ②. Insightsへのデータ試し打ち
InsightsのManage data、API Keys画面にテスト用のサンプルデータ&コマンドが用意されています。この情報を使って、試し打ちを行います。

![SnapCrab_NoName_2017-6-28_11-20-38_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/63769ba4-f798-8613-3d72-cafeb4782268.png)

まず、サンプルデータ example_events.json を作成します。このサンプルデータでは、『Purchase』というイベントデータを模擬しており、amountとaccountのデータが紐づいています。

```json:example_events.json
[
   {
      "eventType":"Purchase",
      "account":3,
      "amount":259.54
   },
   {
      "eventType":"Purchase",
      "account":5,
      "amount":12309,
      "product":"Super expensive thing"
   }
]
```

作成したexample_events.jsonをもとに、API経由でInsightsへデータを送信します。*success*が帰ってきたらデータ送信成功です。

```
# cat example_events.json | curl -d @- -X POST \
> -H "Content-Type: application/json" \
> -H "X-Insert-Key: <YOUR_KEY_HERE>" \
> https://insights-collector.newrelic.com/v1/accounts/<Your_NRID_Here>/events
{"success":true}
```
## ③. 送信したデータをInsight上で表示してみる
送信したデータはInsightsのData Explorerにて確認できます。Data ExplorerはInsightsに投入したデータをGUIでグラフ整形できるツールです。先ほど送信したイベント『Purchase』を選択します。

![SnapCrab_NoName_2017-6-28_11-51-59_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/7d38d291-c3ae-cffb-bc22-0813edb6d603.png)

すると、先ほど送信したデータがグラフになって表示されます。

![SnapCrab_NoName_2017-6-28_12-0-52_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/b0b2c02f-d137-2b3d-cad4-54ba9ee257a7.png)



# 3. Google AnalyticsのデータをNew Relic Insightsへ投入
さて、それでは実際にGoogle AnalyticsのデータをInsightsへ投入したいと思います。
データを投入するには、Google Analyticsデータをjson化してから投入する必要があります。

## ①. Google Analyticsデータをjsonファイルに書き出す
Insightsにデータを投入するには、データをjson形式で記述する必要があります。

そこで、1で紹介したGoogle Analyticsの総合セッション数を取得するプログラム(HelloAnalytics.py)を一部修正し、Google Analyticsから取得したデータをjson形式でファイルに書き出せるようにしたいと思います。修正箇所は下記の通りです。
jsonライブラリのインポート & 関数**print_results**のコードを修正します。

```py:HelloAnalytics_re.py
"""A simple example of how to access the Google Analytics API."""

import argparse

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

import httplib2
from oauth2client import client
from oauth2client import file
from oauth2client import tools

import json """jsonライブラリを追加でimport"""


~~~略~~~


"""total_session.jsonファイルに結果が出力されるよう、print_resultsを修正"""

def print_results(results):
  # Print data nicely for the user.
  if results:
        ins = {}
        lst = []
        ins = {"eventType": "Total Sessions",
               "name": "sessions",
               "session": int(results.get('rows')[0][0])
              }
        lst.append( ins )
        encode_json_data = json.dumps(lst, sort_keys=True, indent=2)
        f = open('total_session.json', 'w')
        f.writelines(encode_json_data)
        f.close()
        print encode_json_data
  else:
    print 'No results found'

```

これを実行するとtotal_session.jsonというjsonファイルが作成されます。このファイルには、Insightsに適応した形式で、Google Analyticsから取得したデータが書き込まれています。

```
# python HelloAnalytics_re.py
[
  {
    "eventType": "Total Sessions",
    "name": "sessions",
    "session": 168
  }
]
# less total_session.json
[
  {
    "eventType": "Total Sessions",
    "name": "sessions",
    "session": 168
  }
]
```

## ②. 作成したデータをInsightsへ送る
2.で紹介したコマンドにて、total_session.jsonに書き込まれたデータをInsightsへ送信します。
successが返ってきたら成功です。

```
# cat total_session.json | curl -d @- -X POST \
> -H "Content-Type: application/json" \
> -H "X-Insert-Key: <YOUR_KEY_HERE>" \
> https://insights-collector.newrelic.com/v1/accounts/<Your_NRID_Here>/events
{"success":true}
```

New Relic InsightsのData Explorerで送信したデータを確認します。
Data Explorerでは画面上の各項目を選択していくことで、簡単にグラフを整形することができます。
今回はセッション数の平均値を示すグラフを表示しています。

![SnapCrab_NoName_2017-6-29_15-3-22_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/165ddb87-0969-41d6-b044-b9d99ffb87b0.png)

また、SQL文と非常に似たNRQL文を用いてグラフ整形することも可能です。
NRQL文の方が指定できる関数も多いため、SQLに慣れた方ならこちらでグラフ整形するのが良いかもしれません。
試しに、データの最大値を示す関数(Max)を用いたNRQL文をInsights画面上部に入力するとこんな感じに表示されます。

```
SELECT max(session) FROM `Total Sessions` SINCE 30 MINUTES AGO COMPARE WITH 1 WEEK AGO
```

![SnapCrab_NoName_2017-6-29_15-14-14_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/ddcc1c14-87f8-7240-0a78-7d525e221e3a.png)

# 4. 統合ダッシュボードを作ってみる
3の手順により、Insights上にGoogle Analyticsのデータが格納されましたので、APMやInfrastructureの監視データと組み合わせた統合ダッシュボードを作りたいと思います。

## ①. ダッシュボード本体の作成
まず、ダッシュボード本体を作成します。InsightsのAll dashboards右の＋ボタンを押下します。

![SnapCrab_NoName_2017-6-29_15-21-25_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/cab3de19-07b6-671d-cc7b-df7c05fcd3b3.png)

ダッシュボード名を入力し、Createを押下します。

![SnapCrab_NoName_2017-6-29_15-24-26_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/2dedd223-a6a1-9e09-6e8c-c1408c40d0ae.png)

これでダッシュボードの大枠は完成です。アイコンを変えた場合はダッシュボード名横で好みのアイコンに変更できます。

![SnapCrab_NoName_2017-6-29_15-28-9_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/736b2e62-ef19-27dd-30de-2b8fba473594.png)


## ②. ダッシュボードにGoogle Analyticsのデータを追加
作成したダッシュボードにデータを追加するには、Data Explorerから追加する方法、NRQL文を叩いて追加する方法、他のダッシュボードからコピーして追加する方法、またNew Relicの各監視サービスから追加する方法などがあります。

まず、3で追加したGoogle Analyticsのデータをダッシュボードに表示させたいと思います。
ダッシュボード画面上部のNRQL文入力欄に、先ほど叩いたNRQL文を入力し、Runを実行します。
TitleとNoteを入力し、Add to dashboardを押下します。

![SnapCrab_NoName_2017-6-29_15-38-40_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/0d591ae5-3aa2-e056-a37d-ad9976b82532.png)

ダッシュボードにMax Sessionのカウントが追加されました！

![SnapCrab_NoName_2017-6-29_15-39-38_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/d1d2d128-c7a9-1a33-a982-6679e442203e.png)

## ③. ダッシュボードにAPMのデータを追加
次にAPMで取得しているTransaction Response Timeの平均データをダッシュボードに表示させたいと思います。
追加はAPMの監視画面から行います。
各グラフをマウスオーバーすると、Add to an Insights dashboardと表示されるので、こちらをクリック。
ダッシュボード名を選択し、チェックマークを押下します。

![SnapCrab_NoName_2017-6-29_16-1-31_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/42cfb5e7-3b85-d04b-e2e4-82705c4847cd.png)

Insightsのダッシュボード画面で見てみるとAPM画面で表示されていたTransaction Response Timeの平均データが追加されました！

![SnapCrab_NoName_2017-6-29_16-2-46_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/a2bac9c3-5773-a639-1482-86de70333005.png)


## ③. ダッシュボードにAWSのデータを追加
InfrastructureのAWS Integrationを行うと、自動で各AWSサービスの監視データが取得され、自動でダッシュボードがInsightsに追加されます。InfrastructureのAWS Integration方法は[こちら](http://qiita.com/KUROPON/items/c5a6e0aff2fd8b850da0)に記載しております。

今回はEC2のダッシュボードからEC2のeventデータをコピーして追加します。

Insights画面のAll dashboardsをクリックし、一覧の中から『AWS EC2_<アカウント名>』のダッシュボードを選択します。

![SnapCrab_NoName_2017-6-29_16-32-58_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/f3f3d123-d402-0935-b071-7281ab5ecb69.png)

次に右端のEC2 Eventsにマウスオーバーし、Copy chartをクリックします。

![SnapCrab_NoName_2017-6-29_16-38-45_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/84b6f3ec-ef70-2fe3-bd55-bc554fe33759.png)

Copy this chart to a dashboardが表示されたら、先ほど作成したダッシュボードを選択し、チェックボタンを押下します。

![SnapCrab_NoName_2017-6-29_16-43-57_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/ebfcbc66-d2f8-d602-a44e-a52e33652f9e.png)

Insightsのダッシュボード画面で見てみるとEC2のステータス情報が追加されました！

![SnapCrab_NoName_2017-6-29_16-52-38_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/150903/372b0182-8b10-6d19-e259-4d6528b84789.png)

これで簡易ではありますが、アプリケーションからAWSサービス、Google Analyticsの情報まで表示可能な統合ダッシュボードができました。

# 5. さいごに
今回作成したのは簡易なダッシュボードですが、Google Analytics API経由で他にもさまざまな情報を取り出すことができます。
またその他外部サービスのデータについても同じロジックでInsightsに投げ込むことが可能です。

記載の通り、Insightsはグラフの整形やデータの取り組みも非常に簡単に行えるので、アプリケーションやサーバの監視情報、BIデータなどをまとめた統合ダッシュボードをお探しの方は是非使ってみてください。