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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です