Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

0. はじめに

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

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

SnapCrab_NoName_2017-6-27_15-35-10_No-00.png

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

この記事では、Google Analyticsのデータ & アプリの分析データ & AWSサービスの監視データを統合したダッシュボードの作成手順を紹介したいと思います。New Relicアカウントをお持ちでない方はこちらよりどうぞ。

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

SnapCrab_NoName_2017-6-27_14-25-11_No-00.png

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

SnapCrab_NoName_2017-6-27_14-7-27_No-00.png

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

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

SnapCrab_NoName_2017-6-27_14-49-17_No-00.png

②. Google Analytics側の権限設定

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

SnapCrab_NoName_2017-6-27_15-40-28_No-00.png

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

SnapCrab_NoName_2017-6-27_15-59-40_No-00.png

③. Google クライアントライブラリのインストール

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

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

④. HelloAnalyticsで試し打ち

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

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

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

SnapCrab_NoName_2017-6-28_10-45-10_No-00.png

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

SnapCrab_NoName_2017-6-28_11-15-34_No-00.png

②. Insightsへのデータ試し打ち

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

SnapCrab_NoName_2017-6-28_11-20-38_No-00.png

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

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

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

SnapCrab_NoName_2017-6-28_12-0-52_No-00.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のコードを修正します。

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

また、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

4. 統合ダッシュボードを作ってみる

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

①. ダッシュボード本体の作成

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

SnapCrab_NoName_2017-6-29_15-21-25_No-00.png

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

SnapCrab_NoName_2017-6-29_15-24-26_No-00.png

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

SnapCrab_NoName_2017-6-29_15-28-9_No-00.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

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

SnapCrab_NoName_2017-6-29_15-39-38_No-00.png

③. ダッシュボードにAPMのデータを追加

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

SnapCrab_NoName_2017-6-29_16-1-31_No-00.png

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

SnapCrab_NoName_2017-6-29_16-2-46_No-00.png

③. ダッシュボードにAWSのデータを追加

InfrastructureのAWS Integrationを行うと、自動で各AWSサービスの監視データが取得され、自動でダッシュボードがInsightsに追加されます。InfrastructureのAWS Integration方法はこちらに記載しております。

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

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

SnapCrab_NoName_2017-6-29_16-32-58_No-00.png

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

SnapCrab_NoName_2017-6-29_16-38-45_No-00.png

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

SnapCrab_NoName_2017-6-29_16-43-57_No-00.png

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

SnapCrab_NoName_2017-6-29_16-52-38_No-00.png

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

5. さいごに

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

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

miyanon
nissho-ele
日商エレクトロニクスは、世界の最先端技術やビジネスモデルを発掘することで、競争力あるユニークな製品・サービスを提供しています。このコミュニティでは主に、フロントエンドからサーバサイド、インフラからアプリケーション、開発から運用までフルスタックの監視・分析能力を提供するNew Relicに関するイベント情報を掲載します。
https://www.nissho-ele.co.jp/index.html
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away