New Relic APM で PRO 契約をすると "Deployment Tracking" という機能が使えるようになる(最近契約した).
- デプロイ情報(タイムスタンプ/変更点など)を New Relic に登録できる
- デプロイ前後のパフォーマンス比較(Apdex Score/Responce Time など)を確認できる
アプリケーションのパフォーマンスが良くなったり,悪くなったりしたときに,判断基準として「どのデプロイがトリガーになったか?」をすぐに知ることができれば,デプロイ対象となったプルリクエストを中心に一次調査ができるし,運用上のメリットは大きいと思う.New Relic APM PRO を使ってるなら "Deployment Tracking" を使わないと損!
デプロイ一覧
検証用に3回登録してみた.
パフォーマンス比較
グラフ上に縦棒(デプロイしたタイミング)がプロットされて前後の差を確認できる.
(プライベート情報が多いため Deployments page | New Relic Documentation から引用した)
デプロイ情報の登録
大きく2種類の登録方法がある.
- REST API
- Agent
1. REST API
今回はお手軽に使える REST API を使うことにした.前提として "Admin's API key" を発行しておく必要がある."Admin's API key" と "REST API key" は異なるので注意すること.
エンドポイントは3種類ある.
- GET : List
- POST : Create
- DELETE : Delete
以下のパラメータは変数のままにしてある.
{application_id}
{api_key}
{id}
1-1. List
$ curl -X GET 'https://api.newrelic.com/v2/applications/{application_id}/deployments.json' \ -H 'X-Api-Key:{api_key}' -i
1-2. Create
送信するパラメータは全て任意の文字列を登録することができる.
revision
は必須パラメータで,ドキュメントには "such as a git SHA" と書いてあってコミットハッシュを登録するようだった.その他の changelog
と description
と user
は必須ではなく,必要に応じて使うことになる.user
はデフォルトでアカウント名(企業名)が入っていた.
$ curl -X POST 'https://api.newrelic.com/v2/applications/{application_id}/deployments.json' \ -H 'X-Api-Key:{api_key}' -i \ -H 'Content-Type: application/json' \ -d \ '{ "deployment": { "revision": "string", "changelog": "string", "description": "string", "user": "string" } }'
今回は revision
にタイムスタンプを含めるようにした.コマンドは以下の通り.
$ curl -X POST 'https://api.newrelic.com/v2/applications/{application_id}/deployments.json' \ -H 'X-Api-Key:{api_key}' -i \ -H 'Content-Type: application/json' \ -d @<(cat <<EOF { "deployment": { "revision": "$(date +%Y%m%d_%H%M)" } } EOF )
1-3. Delete
$ curl -X DELETE 'https://api.newrelic.com/v2/applications/{application_id}/deployments/{id}.json' \ -H 'X-Api-Key:{api_key}' -i
2. Agent
今回は試していないけど,言語ごとの Agent に機能が含まれている.
Rails の場合は Capistrano の deploy.rb
に以下のタスクを追加するだけで良く,より簡単に使えるようになっている.
after "deploy:updated", "newrelic:notice_deployment"
API Explore
REST API を試すときは API Explore を使うと便利だった.Swagger をベースに作られたドキュメントで,API 仕様を読みながら実際に API をコールすることができる.
デプロイ情報は現在時刻で登録される点に注意
"Deployment Tracking" の制約として,デプロイ情報は現在時刻で登録されることになる.よって,過去のデプロイ情報をまとめて登録することはできなかった.
Note that the time of your deployment will be recorded as the current time in UTC.