対象者

システム運用チーム、SRE

効果

CICDツールやサービスの普及とともに、ソフトウェアのデプロイをより高頻度で行い、ユーザーに価値をより早く届けられるようになっています。より安全にデプロイできるようになったとしても、いつ、誰が(何のツールが)、どのような変更をデプロイしたのかをトラッキングし、その前後でのメトリクスの変化を把握するのは重要です。

例えば、デプロイと近い時間にパフォーマンス悪化が確認された場合、デプロイがトラックされていないと、どうしてもデプロイにその原因を求めてしまうでしょう。しかし、よく確認すると時間が少しだけしかし確実にずれていることや、デプロイの内容とパフォーマンス悪化の内容が関連しそうにないことが、デプロイをトラックしていることでわかります。その結果、パフォーマンス悪化はデプロイとは関係なくたまたま近い時間に発生したことがわかります。また、逆にデプロイそのものが原因だろうと言えるかもしれません。その場合は、一つ前のバージョンに切り戻す対応によりパフォーマンス悪化を止めることができるでしょう。

また、パフォーマンス改善のための変更をデプロイした場合、今度はその変更により期待通りの改善が見られたかを確認することも重要です。さらに、例えばクラウド仮想マシンのサイズの変更など、ソフトウェアの変更ではなくインフラ環境の変更もデプロイの一種としてトラッキングしたいでしょう。システムのリソース利用を踏まえて、インスタンスサイズを小さくしても影響は出ないはずだと仮定し、実際に変更した後、想定通り変化がないことを確認することで安心することができます。

一方、トラックの仕方の観点から見ると、CICDツール・サービスの普及により、様々な方法でデプロイが可能になっています。そして、もはや細かい手順を実行するのではなく、ボタンひとつ、あるいはChatOpsでコメント一つでデプロイが可能になっています。そのためデプロイのトラックはできるだけ汎用的な形で行えることが求められています。

New Relic 製品

New Relic APM

実装方法

New Relic APMではデプロイのトラックをREST APIで行うことができます。CLIでデプロイを行う場合はcurlコマンドもしくはInvoke-WebRequestコマンドレットで、自作のツールからデプロイを行う場合はツール内にREST APIを行う処理を挟むことでトラックを記録することができます。トラックできる内容は、一意にバージョンを識別する値、変更内容のサマリー、デプロイの説明、デプロイに紐づくユーザー、デプロイの時刻です。以下はcurlコマンドでのサンプルです。

curl -X POST "https://api.newrelic.com/v2/applications/APP_ID/deployments.json" \

-H "X-Api-Key:API_KEY" \

-i \

-H "Content-Type: application/json" \

-d \

'{

"deployment": {

"revision": "abc123",

"changelog": "PR#123",

"description": "v2 APIに対応したリソースを追加",

"user": "datanerd@example.com",

"timestamp": "2020-01-06T09:15:36Z"

}

}'

 

指定する内容の詳細なドキュメントデプロイメントを記録して監視を参照してください。 このようにしてトラックしたデプロイは、まずAPMのOverviewの画面などに縦線が入って表示されます。これにより、デプロイによってメトリクスに変化がないか、もしくは期待した通りの変化が得られているかを把握することが用意になります。

New Relic product screen capture

 

また、Deploymentsのページでデプロイの一覧と、詳細情報としてデプロイ前後の主要メトリクスの変化を一覧で確認できます。

New Relic product screen capture

 

例えば、最初の3件はデプロイした後にパフォーマンスが悪化し、修正デプロイをしたものの、最終的にバージョンを切り戻したという状況だったことがわかります。

New Relic product screen capture

 

また、カスタムアプリケーションを使ってデータの価値を最大限に引き出す で紹介したカスタムアプリケーションとして、New Relicがnr1-deployment-analyzerとして公開しているカスタムアプリケーションを使うとより詳細な分析も可能になります。 nr1-deployment-analyzer このようにデプロイメントをトラックすることで、デプロイメント前後でアプリケーションにどのような影響があるかをリアルタイムに、および後から分析することが可能になります。

New Relic 担当者にもう少し話を聞いてみたい場合はこちらまで!