4/11 に Instance Metadata Service がプレビューとなりました。
[Announcing public preview of Instance Metadata Service]
また、現在は東西日本リージョン含めてプレビューが利用できるようになりました。
[Reacting to maintenance events... before they happen]
これにより仮想マシンで予定されているメンテナンスについて、イベントの種類(再起動, ReDeploy, フリーズ)やイベントが開始される時間を取得することができます。
さらに、メンテナンス予告を事前に知ることができるだけでなく、利用者の任意のタイミングでメンテナンスを実施することも可能なようです。
今回は Instance Metadata Service と Azure Log Analytics を使用して、メンテナンスの予定があった場合にメールで通知する仕組みを構成してみます。
以下のような流れで構成しています。
図解するとこんな感じです。
対象の仮想マシンから「Invoke-RestMethod」 コマンドでイベントを取得しに行きます。
- 予定されているメンテナンスがある場合の結果イメージ
- 予定されているメンテナンスがない場合の結果イメージ
ちなみに取得先が、仮想マシンのリンクローカルアドレスとなっているため、Azure Automation などで外部から取れません。
取得結果をもとにイベントログに書き込みます。
Powershell だと「Write-EventLog」コマンドによりイベントログに出力できます。
また、Azure Log Analytics で検索しやすいように、イベントソースと ID の定義を行います。
Azure Log Analytics に仮想マシンを接続し、イベントログを収集するように設定します。
Azure Portal の Log Analytics のブレードで仮想マシンを接続します。(下図クリックで拡大)
OMS Portal の Settings でイベントログを収集するように設定します。(下図クリックで拡大)
Azure Log Analytics で、特定のイベントを検知してメールを送るように設定します。
今回、イベントログに出力する際に、Azure のメンテナンスイベントがある場合、イベントソースが「GetVmScheduledEvents」、イベント ID が「2001」のイベントを出力するように設定しているので、イベントソースとイベント ID を検索してメール通知するようにします。
OMS Portal で Log Search を開き、下記のクエリを実行します。
(下図クリックで拡大)
検索結果はこんな感じです。(下図クリックで拡大)
検索結果で「Alerts」をクリックします。
アラートルールを設定し、「Save」をクリックすれば完了です。(下図クリックで拡大)
今回は下記のような設定をします。
実際にメンテナンスが予定されると、下記のようなメールが来ます。(下図クリックで拡大)
対象の仮想マシン名やメンテナンスの開始時間もメールで確認することができます。
これで突然のメンテナンスに怯える日々から解放されますね。
次回予告