0. はじめに
Google Analyticsで取得したデータをその他の分析/監視データとまとめて見たいな…と思い、New RelicのInsightsを使って、統合ダッシュボード的なものを作ってみました。
New RelicのInsightsはダッシュボードサービスで、New RelicのAPM( アプリケーション監視サービス )やInfrastructure( サーバ監視サービス )などの監視メトリクスはもちろん、**外部サービスのデータを取り込み&表示することができます。**たとえばこんな感じに。
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を有効化する必要があります。
次に認証情報を設定をします。外部からAPIを叩くために使用するサービスアカウントを作成します。
下記項目をそれぞれ入力し、「作成」ボタンを押すと、鍵ファイルがダウンロードされます。
この鍵ファイル(~~~.p12)は後ほど使用します。また、サービスアカウントIDも後ほど使用するため、控えておきます。
- アカウント名(任意の値を入力)
- サービスアカウントID(任意の値を入力)
- 秘密鍵の作成(タイプはP12を選択)
- 役割(当該サービスアカウントの権限範囲を指定)
②. Google Analytics側の権限設定
次にGoogle Analytics側で先ほど作成したサービスアカウントに対して、権限を付与します。メニューの管理を選択し、ユーザ管理画面に移行します。
権限を付与するユーザーとして、先ほどコピーしたサービスアカウントIDを入力します。権限は『表示と分析』のまま、追加を押下します。
③. 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には鍵ファイルのファイル名を入力します。
~~~略~~~
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を選択します。
上部メニューからAPI Keysを選択し、Insert Keysを押下します。
Note欄に用途のメモなどを記載し、Save your notesを押下します。
②. Insightsへのデータ試し打ち
InsightsのManage data、API Keys画面にテスト用のサンプルデータ&コマンドが用意されています。この情報を使って、試し打ちを行います。
まず、サンプルデータ example_events.json を作成します。このサンプルデータでは、『Purchase』というイベントデータを模擬しており、amountとaccountのデータが紐づいています。
[
{
"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』を選択します。
すると、先ほど送信したデータがグラフになって表示されます。
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のコードを修正します。
"""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では画面上の各項目を選択していくことで、簡単にグラフを整形することができます。
今回はセッション数の平均値を示すグラフを表示しています。
また、SQL文と非常に似たNRQL文を用いてグラフ整形することも可能です。
NRQL文の方が指定できる関数も多いため、SQLに慣れた方ならこちらでグラフ整形するのが良いかもしれません。
試しに、データの最大値を示す関数(Max)を用いたNRQL文をInsights画面上部に入力するとこんな感じに表示されます。
SELECT max(session) FROM `Total Sessions` SINCE 30 MINUTES AGO COMPARE WITH 1 WEEK AGO
4. 統合ダッシュボードを作ってみる
3の手順により、Insights上にGoogle Analyticsのデータが格納されましたので、APMやInfrastructureの監視データと組み合わせた統合ダッシュボードを作りたいと思います。
①. ダッシュボード本体の作成
まず、ダッシュボード本体を作成します。InsightsのAll dashboards右の+ボタンを押下します。
ダッシュボード名を入力し、Createを押下します。
これでダッシュボードの大枠は完成です。アイコンを変えた場合はダッシュボード名横で好みのアイコンに変更できます。
②. ダッシュボードにGoogle Analyticsのデータを追加
作成したダッシュボードにデータを追加するには、Data Explorerから追加する方法、NRQL文を叩いて追加する方法、他のダッシュボードからコピーして追加する方法、またNew Relicの各監視サービスから追加する方法などがあります。
まず、3で追加したGoogle Analyticsのデータをダッシュボードに表示させたいと思います。
ダッシュボード画面上部のNRQL文入力欄に、先ほど叩いたNRQL文を入力し、Runを実行します。
TitleとNoteを入力し、Add to dashboardを押下します。
ダッシュボードにMax Sessionのカウントが追加されました!
③. ダッシュボードにAPMのデータを追加
次にAPMで取得しているTransaction Response Timeの平均データをダッシュボードに表示させたいと思います。
追加はAPMの監視画面から行います。
各グラフをマウスオーバーすると、Add to an Insights dashboardと表示されるので、こちらをクリック。
ダッシュボード名を選択し、チェックマークを押下します。
Insightsのダッシュボード画面で見てみるとAPM画面で表示されていたTransaction Response Timeの平均データが追加されました!
③. ダッシュボードにAWSのデータを追加
InfrastructureのAWS Integrationを行うと、自動で各AWSサービスの監視データが取得され、自動でダッシュボードがInsightsに追加されます。InfrastructureのAWS Integration方法はこちらに記載しております。
今回はEC2のダッシュボードからEC2のeventデータをコピーして追加します。
Insights画面のAll dashboardsをクリックし、一覧の中から『AWS EC2_<アカウント名>』のダッシュボードを選択します。
次に右端のEC2 Eventsにマウスオーバーし、Copy chartをクリックします。
Copy this chart to a dashboardが表示されたら、先ほど作成したダッシュボードを選択し、チェックボタンを押下します。
Insightsのダッシュボード画面で見てみるとEC2のステータス情報が追加されました!
これで簡易ではありますが、アプリケーションからAWSサービス、Google Analyticsの情報まで表示可能な統合ダッシュボードができました。
5. さいごに
今回作成したのは簡易なダッシュボードですが、Google Analytics API経由で他にもさまざまな情報を取り出すことができます。
またその他外部サービスのデータについても同じロジックでInsightsに投げ込むことが可能です。
記載の通り、Insightsはグラフの整形やデータの取り組みも非常に簡単に行えるので、アプリケーションやサーバの監視情報、BIデータなどをまとめた統合ダッシュボードをお探しの方は是非使ってみてください。