しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Web Apps に追加された AppLens と Per-Instance Metrics とかの話

最近の Web Apps は監視系を色々と強化している感じがあるので、ざっくりとまとめてみようかと思います。少し前にポータルのサポートとトラブルシューティングの項目が増えました。

f:id:shiba-yan:20160604234357p:plain

中でも新しく増えたのは Per-Instance Metrics と AppLens です。アプリケーションの状態を監視する上で非常に便利なので、使っていきたい機能です。

Per-Instance Metrics

これまでは複数インスタンスで動作させていた場合に、ポータルで表示できるメトリックは全てのインスタンスの平均値でしたが、やっとそれぞれのインスタンス単位で見ることが出来るようになりました。

f:id:shiba-yan:20160605002716p:plain

Overall タブの隣にマシン名で表示されているのが、インスタンス単位でのメトリックです。

ちなみに Web Apps はアップデートや障害発生時には、自動的に動作しているインスタンスが切り替わる仕組みになっているので、1 つのインスタンスで動かしていても複数のマシン名が表示されることがあります。

f:id:shiba-yan:20160605002506p:plain

この例では 5 日間で 3 台のマシンで稼働していたことが分かります。このあたり PaaS っぽいですね。

AppLens

ここ最近で追加された機能が AppLens です。最近の MS は Lens とか Insights を使うのが好きみたいです。App Service Team のブログに書かれていた AppLens が開発された理由が興味深かったです。

What is appLens?

Let me start with little background on the project. Project’s code name is MDH (Make David Happy). David is our rock star engineer (@Lamboin) who spends his day working on customer reported issues. He is the one who tries to answer the million-dollar question for our customers (“Why was my Web App down?”). We watched him pull variety of logs, overlay them and then align the time frames to get the 1st level of isolation. This process was MDS (Making David Sad), and that was one of the inspirations to kick start this project.

Introducing appLens for Azure App Service Web App | Azure App Service Team Blog

涙無しには語れない感のある理由ですが、AppLens で David がハッピーになれたことを祈りたいです。

さて、AppLens 自体は「Availability」「Requests/Failures」「Deployments」の 3 つをグラフで表示する機能です。ちなみに Availability はアプリケーションと Canary Web App のリクエスト成功・失敗率となります。

f:id:shiba-yan:20160604232719p:plain

Requests/Failures は特に代わり映えしませんが、新たに Deployments のグラフが追加されています。

この 3 つのグラフを使うことで、特定のデプロイ以降に問題が発生したか、もしくはデプロイ後に問題が解消されたかといったことが簡単に確認することが出来るようになります。

Advanced Application restart

トラブルシューティングのブレードを開くと、ひっそりと Advanced Application restart という機能が追加されています。凄くわかりにくい場所にありますが、結構便利そうです。

f:id:shiba-yan:20160604233509p:plain

既に本番で稼働している Web App をポータルから単純に再起動させると、全てのインスタンスが同時に再起動するので起動するまでの間は 503 となってしまいます。

別スロットを用意してスワップという手もありますが、Advanced Application restart を使うと指定した間隔で 1 つずつインスタンスを再起動させることが出来ます。

f:id:shiba-yan:20160604153245p:plain

この画像では 1 つしかインスタンスを立ち上げていないですが、クリックして再起動させるインスタンスを選んでから、ツールバーにあるボタンから実行します。

複数のインスタンスで稼働している場合、ARR が有効なインスタンスにリクエストを振り分けてくれます。

ARR Affinity

これまでは HTTP レスポンスヘッダーでのオプトアウトか ARM Explorer から直接変更するしか方法がなかった ARR Affinity の設定がポータルから行えるようになっていました。

f:id:shiba-yan:20160604234325p:plain

アプリケーションがステートレスであれば ARR Affinity は不要なので、オフにすることで転送量を減らしたり、適切に負荷分散されるのでパフォーマンスを改善できる可能性があります。

それぞれ、上手に使っていきたい機能ですね。