New RelicのメトリクスをAPI経由でデータ統合をしたお話

[New Relic Advent Calendar 2020](https://qiita.com/advent-calendar/2020/newrelic) の13日目の投稿になります。

# 概要

現在、私はprimeNumberという会社に所属しており分析基盤構築支援サービスの [trocco](https://trocco.io/lp/index.html) の [SRE兼CS兼エンジニア](https://blog.primenumber.co.jp/engineering-trocco-cs-team-202009/) をやらせていただいております。（もうこうなったら肩書をもっと増やして新日本プロレスの [矢野通] (https://twitter.com/Mrtomokikun/status/1333357904263483397) なみになってやろうかと目論んでおります。）

troccoの運用チームではインフラやアプリケーションの監視にNew Relicを活用しております。過去、書かせていただいた記事が具体例になります。

* [Kubernetes上のシステムのメトリクスをPrometheusで収集し、New Relicに統合してみる](https://qiita.com/dododo8m/items/b5d93ccb9e218a570a67)
* [New RelicのApdexを利用アカウント単位で算出できるようにした](https://qiita.com/dododo8m/items/33c680ce953c0ca59ff8)

troccoチームではNew Relicのダッシュボードで可視化しているデータをNew Relic API（Insight API）を用いてBigQuery上に連携しDataPortal上で可視化するということをしております。（顧客単位でメトリクスを出す方法としてはカスタムアトリビュートにIDを付与することで実現しております。実現方法については [こちら](https://qiita.com/dododo8m/items/33c680ce953c0ca59ff8) を御覧ください。）

以下はNew Relic上で取得できているメトリクスと、API経由でデータ連携したBigQuery上のデータをDataPortal上のカスタマーヘルスダッシュボードで可視化したものになります。

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_215051_675b9c46-c27d-f649-5a20-f30d74a7506d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215051/608a8a50-2101-ee83-e017-ce9680da971e.png)

本日は具体的な設定方法を説明しようと思います。

# 事前準備

New RelicのメトリクスデータをAPI経由で取得するための事前準備を説明いたします。New RelicのAPIは [このように](https://docs.newrelic.co.jp/docs/apis/get-started/intro-apis/introduction-new-relic-apis)多くの種類がありますが、我々のチームではInsightの [クエリAPI](https://docs.newrelic.co.jp/docs/insights/insights-api/get-data/query-insights-event-data-api) を利用しております。

APIコール時のパラメータに [NRQL](https://docs.newrelic.co.jp/docs/query-your-data/nrql-new-relic-query-language/get-started/introduction-nrql-new-relics-query-language) を設定することで結果をJSONで返してくれるという非常に便利なものになります。

API経由でデータ取得するためにはAPIキーが必要になります。APIキーの発行については以下の手順になります。

1.  `insights.newrelic.com  > Manage data > API keys` 開く。
2.  Query keys見出しの隣にある `+` アイコンを選択する。
3.  Notesに説明書きを追記し `Save your notes` を選択する。

APIキーを登録すると以下のようにAPIキーを取得可能になります。

![スクリーンショット_2020-12-14_0_13_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215051/f2eee51f-d8e7-b4fd-7fe4-a8e950317961.png)

サンプルのコマンドをコールすると以下のようなレスポンスを得ることが出来ます。

```bash

 ~  curl -H "Accept: application/json" -H "X-Query-Key: XXX" "https://insights-api.newrelic.com/v1/accounts/XXX/query?nrql=SELECT%20average(duration)%20FROM%20PageView"
{"results":[{"average":1.9074000000000002}],"performanceStats":{"inspectedCount":16,"omittedCount":0,"matchCount":15,"wallClockTime":19},"metadata":{"eventTypes":["PageView"],"eventType":"PageView","openEnded":true,"beginTime":"2020-12-13T14:16:17Z","endTime":"2020-12-13T15:16:17Z","beginTimeMillis":1607868977508,"endTimeMillis":1607872577508,"rawSince":"60 MINUTES AGO","rawUntil":"NOW","rawCompareWith":"","guid":"09f17924-01bb-d107-a781-e1ab9109d45b","routerGuid":"130e5743-7e50-7ba2-1f28-fce66cb16013","messages":[],"contents":[{"function":"average","attribute":"duration","simple":true}]}}⏎
```

# troccoを用いたデータ連携

troccoチームではNew Relicのデータをtrocco経由でBigQueryに連携しております。以下はtroccoの設定画面のキャプチャになります。troccoでは転送元のデータソースと転送先のデータソースを設定しデータ連携を自動化する機能があります。本画面では `転送元HTTP` というHTTPリクエストを設定することでデータ連携可能な機能と `転送先BigQuery` というBigQuery側にアウトプットするための機能を利用しております。

![STEP1_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215051/6d1cff73-196c-3f22-8544-8ff452df5367.png)

上記のキャプチャではSLA(End-user Tier)のアカウント別日次レポートを抽出するところを設定しております

転送元HTTPにてInsight APIのコールに必要なHTTPリクエストを組み立てます。レスポンスのJSONデータとしては `facets` キーにてメトリクスのリストを取得することができるため `$.facets.*` と設定しております。

実際に取得できるデータとしては以下のようになっております。

![スクリーンショット_2020-12-14_0_36_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215051/650242e8-2ee7-c1f5-9a55-dd1c1bc9b743.png)

こうすることでNew RelicのメトリクスをBigQueryにデータ連携することが出来ます。troccoチームではアカウント毎やユーザ毎のSLAデータをBigQuery上に連携し、troccoの `データマート機能` を使ってデータ加工をし、DataPortal上に可視化するようにしております。
以下はデータ取得から加工までのデータパイプラインをtroccoの `ワークフロー機能` を用いて設定した例になります。（転送ジョブではNew RelicからBigQueryへデータ転送を行い、データマートではBigQuery上に連携されたデータを加工しております。）

![スクリーンショット 2020-12-14 0.40.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215051/bb61b738-ffc1-af7d-c630-0b2bce4aad54.png)


# DataPortaを用いた可視化

以下はワークフローにて作成した分析テーブルをDataPortal上で可視化している様子になります。
こちらについてはカスタマーサクセスチームのカスタマーヘルスダッシュボードとして活用しておりユーザの活用度を定量的に測るときの1つの指標として利用しております。

![スクリーンショット_2020-12-13_23_54_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215051/e798c233-ae4a-9c5f-79ab-08320807f26f.png)

今回はAPMのSLAメトリクスをBigQueryに連携し可視化する所を紹介しましたが他にもk8sのメトリクスをデータ連携しアカウント単位で可視化させるなど色々なシーンで利用しております。

BigQueryのようなDWHまで持っていって可視化するメリットとしては様々なサービスのデータと統合させることができることです。troccoチームではtroccoのアプリケーションデータとSalesforceのデータを統合させることで顧客を定量的、かつ定性的に可視化するカスタマーヘルスダッシュボードを作成しております。

![スクリーンショット 2020-12-14 0.50.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215051/ab8a56f9-834c-c2e0-9357-6a3468be9a07.png)

# まとめ

今回はNew RelicのメトリクスをAPI経由でデータ連携し、さまざまでデータと統合した上で可視化するところの紹介をいたしました。
New RelicはNRQLを用いたデータ取得が容易にできる上にカスタマイズも容易なので非常に助かっております。引き続き、New Relicを活用し続けていこうと思います・・・

それでは [New Relic Advent Calendar 2020](https://qiita.com/advent-calendar/2020/newrelic) の13日目は以上になります。最後まで見ていただきありがとうございました！