Tomorrow Will Be A Better Day

Published

- 4 min read

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

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

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画面上の以下の場所にある。
newrelic_apikey.png

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

2-2.Key Transactionsの設定

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

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

key_transaction_select.png 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などの監視ツールへ連携させることで、アラートの通知先をいつも使っている監視ツールに集約することも可能になるので、いちど使ってみてはいかがでしょうか。