Edited at
gumiDay 13

NewRelic REST APIを使って、特定URLのパフォーマンスデータを取得する

More than 3 years have passed since last update.


1.記事の背景

NewRelicのREST APIを使うと、NewRelic APM(Application Performance Monitoring)の画面で見れる内容がJSONで取得できます。

このAPIを使えば、参考記事のように色々なことができますが、今回はKey Transaction機能を使って、特定URLのパフォーマンスデータを取得する方法を記載します。


2.NewRelic APIを叩くまでの下準備


2-1.API Keyの取得

REST API Keyは、NewRelic画面上の以下の場所にある。



REST API Keyをそのまま使うか、Adminユーザごとに作成できるAPI Keyを使うかは用途に応じて使い分ければよいかと。


2-2.Key Transactionsの設定

NewRelicのKey Transactionsという機能を使うと、特定URLのパフォーマンスデータまで取得することが可能になります。



この画面で、画像のAdd Moreをクリック



Key Transactionsの追加は、

アプリケーションやtransactionの候補が補完される。


3.NewRelic APMのパフォーマンスデータ取得方法

参考記事にも記載されていますが、API Exploreでクエリの投げ方が分かります。

例えば、以下のようなクエリでcurlを実行すると、以下の様なJSONが返ってきます。


3-1.複数アプリケーションの中で、特定アプリケーションのパフォーマンスデータを取得する


クエリ(クエリ実行後の結果をjqで整形)

curl -s -X GET 'https://api.newrelic.com/v2/applications.json' -H 'X-Api-Key:【API Key】' -d 'filter[ids]=【Application ID】' | jq .


結果("XXXXXXX"の部分は伏せてます)

{

"applications": [
{
"id": "XXXXXXX",
"name": "XXXXXXX",
"language": "php",
"health_status": "green",
"reporting": true,
"last_reported_at": "2015-12-12T05:37:41+00:00",
"application_summary": {
"response_time": 95.6,
"throughput": 17.7,
"error_rate": 0,
"apdex_target": 0.5,
"apdex_score": 1,
"host_count": 1,
"instance_count": 1
},
"settings": {
"app_apdex_threshold": 0.5,
"end_user_apdex_threshold": 7,
"enable_real_user_monitoring": true,
"use_server_side_config": false
},
"links": {
"application_instances": [
"XXXXXXX"
],
"alert_policy": "XXXXXXX",
"servers": [
"XXXXXXX"
],
"application_hosts": [
"XXXXXXX"
]
}
}
],
"links": {
"application.servers": "/v2/servers?ids={server_ids}",
"application.server": "/v2/servers/{server_id}",
"application.application_hosts": "/v2/application/{application_id}/hosts?ids={host_ids}",
"application.application_host": "/v2/application/{application_id}/hosts/{host_id}",
"application.application_instances": "/v2/application/{application_id}/instances?ids={instance_ids}",
"application.application_instance": "/v2/application/{application_id}/instances/{instance_id}",
"application.alert_policy": "/v2/alert_policies/{alert_policy_id}"
}
}


3-2.特定URLのパフォーマンスデータを取得する


クエリ(クエリ実行後の結果をjqで整形)

curl -s -X GET 'https://api.newrelic.com/v2/key_transactions.json' -H 'X-Api-Key:【API Key】' -d 'filter[ids]=【Key Transactions ID】' | jq .


結果("XXXXXXX"の部分は伏せてます)

{

"key_transactions": [
{
"id": "XXXXXXX",
"name": "/XXXXXXX/XXXXXXX.php",
"transaction_name": "/XXXXXXX/XXXXXXX.php",
"health_status": "green",
"reporting": true,
"last_reported_at": "2015-12-13T02:00:41+00:00",
"application_summary": {
"response_time": 175,
"throughput": 6.33,
"error_rate": 0,
"apdex_target": 0.5,
"apdex_score": 1
},
"links": {
"application": "XXXXXXX"
}
}
],
"links": {
"key_transaction.application": "/v2/applications/{application_id}"
}
}


4.まとめ

NewRelicを運用していると、APM全体の値に振り回されることがありますが、

Key Transaction機能まで使ってあげると、特定URLの性能監視まで行えるようになります。

また、取得したJSONデータをZABBIXなどの監視ツールへ連携させることで、アラートの通知先をいつも使っている監視ツールに集約することも可能になるので、いちど使ってみてはいかがでしょうか。