トラブルシューティングの時間を短縮する Azure Resource Health プレビューをリリース

このポストは、10 月 28 日に投稿された Reducing troubleshooting time with Azure Resource health の翻訳です。

Azure Resource Health のプレビューの提供が開始されました。Azure Resource Health は、Azure の各リソースの正常性を開示し、トラブルシューティングに活用できるガイダンスを提供する新しいサービスです。このサービスの目的は主にトラブルシューティングの所要時間を短縮することにあり、特に、問題の根本原因がアプリケーション内部にあるのか、それとも Azure プラットフォーム内部のイベントによるものなのかを判別する時間を減らすことを重視しています。

企業の IT 管理者の方々に夜間に作業を続ける理由を尋ねると、可用性を高く維持しなければならないということと、問題発生時にすぐにトラブルシューティングを行い、問題を解決しなければならないということが上位の理由として挙げられます。クラウド環境の場合、インフラストラクチャ内のサーバーやその他の要素に直接アクセスすることができないため、これらに対応できることはさらに重要になります。

Resource Health とサービス正常性ダッシュボードの違い

ここでは、仮想マシンや Web アプリ、SQL Database などのユーザーが作成したサービス インスタンスを「リソース (Resource)」と定義します。

この定義に従うと、サービス正常性ダッシュボードよりも情報をきめ細かく迅速に確認できるのが、Resource Health ということになります。サービス正常性ダッシュボードでは特定のリージョン内でサービスの可用性に影響を及ぼすイベントが提示されますが、Resource Health では、ノードの予期せぬ再起動など、より狭い範囲でユーザーに影響の出るプラットフォームのイベントが提示されます。

今回リリースされた Resource Health では、皆様に最も多く利用されている IaaS の Virtual Machines (クラシックのみ)、Web Apps、SQL Database の 3 つの Azure サービスがサポートされます。

サブスクリプション内のすべてのリソースの正常性を確認する

正常性を確認するにはこちらのリンクをクリックするのが簡単ですが、[Help + support] ブレードに移動して、新しく導入された [Resource health] タイルを参照すれば、サブスクリプション内のリソースの総数と異常のあるリソースの数を確認できます。このタイルをクリックすると、[Resource health] ブレードに移動します。

このブレードにはサブスクリプション内のリソースのうち、ユーザーがリストに表示可能なすべてのリソースの正常性が表示されます。各リソースの正常性ステータスは、下記の値のいずれかになります。

  1. Healthy: リソースが使用不能になるようなプラットフォームの問題は検出されていません。
  2. Unhealthy: VM が予期せず再起動されたノードが存在するなど、リソースの可用性に影響を及ぼすプラットフォームの問題が発生しています。
  3. Stopped: このリソースはユーザーによって停止されています。
  4. Unknown: このリソースからのハートビートが 5 分以上受信されていません。このステータスの詳細については、この記事で後ほど説明します。

各リソースをクリックすると新しいブレードが開き、該当するリソースの正常性の詳細と、その時点の正常性に応じた推奨される対応へのリンクが表示されます。

  • リソースの状態が [Healthy] の場合、このブレードには一般的なトラブルシューティング ツールへのリンクが表示されます。

  • リソースの状態が [Unhealthy] の場合、リソースが使用不能な状態にある時間の長さに応じて、推奨される対応が提示されます。たとえば、VM が 20 分以上使用不能となっていた場合は VM の再作成が推奨され、運用環境の VM の場合はサポート チケットの発行を勧められます。

前述のとおり、このサービスの目的はトラブルシューティングの所要時間を短縮することです。そのために、まず問題の原因を特定し、次に適切なトラブルシューティング ツールにすぐにアクセスできるように支援します。

シグナルの待機時間、その他の重要な考慮事項

Resource Health では、開発当初から、プラットフォームでユーザーに影響を及ぼすイベントが発生した場合にできるだけ早くユーザーに通知することを目指しています。しかし、[Resource health] ブレード上部のボックスを見るとわかるとおり、シグナルは最大で 15 分遅延する可能性があります。そのため、発生が疑われる段階で問題を調査し、余計な時間がかからないで済むように、このことには十分留意してください。

当然ながら、マイクロソフトではこの待機時間を可能な限り短縮し、サービスを最適化できるように努めてまいります。

このほか、リソースの可用性の判定方法についても注意が必要です。今回のプレビュー リリースでは、正常性のステータスはインフラストラクチャのコンピューティング部分のみによって決定され、ネットワーク部分は考慮されません。これについても、できるだけ早急に実装するよう努力しています。

ではここで SQL Database の正常性の判定方法についてもう少し詳しく説明したいと思います。設計段階では、SQL Server と SQL Database のどちらの可用性を開示すべきか検討する必要がありました。結果として、SQL Database の方を採用することにしましたが、これは SQL Database の方がユーザーにとっての可用性をより適切に反映しているからです。

これはユーザー エクスペリエンスという点では良い選択だったと思いますが、その反面、開発チームには難しい課題が残りました。仮想マシンや Web サイトの場合はホストの状態を把握すればリソースの可用性がわかりますが、SQL Database の場合は、正常性を判定するために複数のコンポーネントやサービスについて考慮する必要があるからです。今回の初回リリースでは、データベースへのログインを基準としたシグナルを使用しています。つまり、クエリの実行要求を受信するなど、データベースに対するログインを定期的に受信すると、正常性ステータスが定期的に表示されます。データベースへのアクセスが 10 分以上途絶えた場合は、ステータスは [Unknown] に変わります。

詳細については後述しますが、これはデータベースが使用不能になったことを意味するのではなく、ログインが実行されていなかったためにシグナルが送信されなかったということを意味しています。データベースに接続してクエリを実行すると、データベースの正常性の判定に必要なシグナルが送信されます。

リソースの正常性が [Unhealthy] になっている場合

リソースからのシグナルがサービスに一定時間送信されなかった場合、そのリソースの正常性ステータスは [Unknown] となります。しかしこの場合でも、必ずしもリソースに何らかの問題が発生しているとは限らないため、下記の対応を取ることをお勧めします。

  • リソースが期待どおりに実行されているが [Resource health] ブレードで正常性が [Unknown] となっている場合は特に問題はありません。しばらくするとリソースのステータスが [Healthy] に更新されるはずです。
  • リソースへのアクセスで問題が発生し、また [Resource health] ブレードで正常性が [Unknown] と表示されている場合は、何らかの問題の兆候である可能性があります。ステータスが [Healthy] または [Unhealthy] に変化しないかどうかを確認しつつ、詳細な調査を行います。

前述のとおり、SQL Database へのログイン要求が 10 分以上なかった場合は、SQL Database の正常性は [Unknown] になります。

仮想マシンの追加のオンデマンド チェック

仮想マシンに対して実施できることでお勧めするのが、VM のリアルタイム チェックです。VM のリアルタイム チェックでは、仮想マシンが稼動状態で期待どおりに実行されているかどうかを Azure コンピューティング ファブリックやその他の Azure 内部サービスに問い合わせます。チェックが完了するとその結果が通知され、またその推奨される対応のリストが表示されます。

オンデマンド チェックは 15 分ごとに実行でき、前回のチェック要求から 15 分経過せずにチェック要求を送信すると、前回のチェックの結果が返されます。

このツールは、VM で問題が発生しているときに、[Resource health] ブレードではその VM の正常性ステータスが [Healthy] または [Unknown] になっている場合に役立ちます。

API からのサービスへのアクセス

今回のリリースには、[Resource health] との接続に使用できる API も含まれています。この API では、サブスクリプション内の全リソースに対するクエリ、リソース グループ内の全リソースに対するクエリ、特定のリソースに対するクエリを呼び出すことができます。呼び出しの例を次に示します。

  • サブスクリプション内の全リソースの正常性を取得:
    https://management.azure.com/subscriptions/\<サブスクリプション ID>/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2015-01-01
  • リソース グループ内の全リソースの正常性を取得:
    https://management.azure.com/subscriptions/\<サブスクリプション ID>/resourceGroups/<リソース グループ名>/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2015-01-01
  • 単一のリソースの正常性を取得:
    https://management.azure.com//subscriptions/\<サブスクリプション ID>/resourceGroups/<リソース グループ名>/providers/<リソース プロバイダー>/<リソースの種類>/<リソース名>/providers/Microsoft.ResourceHealth/availabilityStatuses/current?api-version=2015-01-01

この API は、armclient (英語) などのツールを使用すると簡単に試すことができます。

今後について

今回、プレビューのリリースという重要な一歩を踏み出すことができ、たいへん嬉しく思っています。しかしこれは、これから続く長い道のりの最初の一歩にすぎません。ぜひこの機能をお使いいただき、ご意見、ご要望などがある場合はページ下部のコメント欄までお寄せいただければ幸いです。