Azure Automation: Runbook ジョブの監視とトラブルシューティング
このポストは、6 月 12 日に投稿した Azure Automation: Monitoring and Troubleshooting Your Runbook Jobs の翻訳です。
はじめに
Microsoft Azure 環境の管理とメンテナンスを自動化している賢明なユーザーの皆様なら、Microsoft Azure の新しい Automation サービスのことをよくご存知でしょう。Azure Automation サービスを使用すると、Cloud Services の稼動を維持するための面倒な手作業や反復作業、複雑なタスクを自動化し、他のシステムと連携させて、時間やコストを節約し、エラーを減らすことができます。Azure Automation は、クラウドの運用を支える Runbook (PowerShell ワークフロー) を作成、管理するためのソリューションを提供します。
Runbook と関連するモジュールおよびアセットの作成に着手し、それらを日常的に使用するようになると、Runbook の実行時間や現在の状態、パフォーマンス、コスト節減額など、オペレーター視点のシステム リソース情報が必要になってきます。自動化の現在の状況を常に把握し、予想外の問題が発生した場合は、すばやくトラブルシューティングを行い、問題を修正して自動化を復旧できなければなりません。
ここで役に立つのが Azure Automation です。Automation には Runbook の状態を監視する機能と Runbook ジョブのトラブルシューティング機能が備わっています。この記事では、Azure Automation のこうした機能について説明します。
Automation ダッシュボード
Azure ポータルにアクセスし、Automation サービスに移動して Automation アカウントを選択すると、Automation ダッシュボードが表示されます。
このダッシュボードには、システムに関する情報が 4 つのセクションに表示されます。
- ダッシュボード上部には、指定期間 (直近 1 時間~直近 30 日間) の各 Runbook ジョブの状態を示したグラフが表示されます。このグラフでは、現在実行中のジョブ数、完了したジョブ数、そして特に注目すべき、中断したジョブや失敗したジョブの数が確認できます。グラフ上部にはジョブの各状態を示すアイコンがあり、クリックすると、該当する状態のグラフの表示と非表示を切り替えられるので、特定の状態のみに注目することが可能です。
- グラフの下には [usage overview] セクションがあります。このセクションには、ジョブ実行時間、Runbook の数、モジュール サイズに関して、クォータに対する現在の使用状況が表示されます。ここでは、Azure Automation の料金が発生 (プレビュー版終了後) するまでの残り使用量をチェックしたり、既に料金が発生している場合は、上位プランに移行せざるを得なくなるまでの残り使用量を確認したりできます。
- 使用状況のセクションの下にはジョブ表があります。この表には、直近 30 日間に開始されたジョブの Runbook (ワークフロー) 名、最終更新日時、現在のジョブの状態が表示されます。作成したばかりの Runbook ジョブで注意が必要なものは、この表ですぐに該当のジョブを確認し、トラブルシューティングを行うことができます。
- 使用状況とジョブ表の右に表示されているのが、 [quick glance] セクションです。このセクションには、Runbook やモジュール、アセットの数など、自分の Automation アカウントに関する有用な静的情報が表示されます。また、現在作成中の Runbook の数も表示されます。
上図のグラフは問題なさそうですが、ダッシュボードに以下のようなグラフが表示されていたとしたらどうでしょう。
これはまずいですね。中断した Runbook ジョブ (スクリーンショットでは水色の線) がいくつかあります。この期間内に、このような中断はこれまで発生していません。Automation ジョブが最後まで実行されていないので、これは問題です (作成者が元々中断させるつもりの場合を除く)。解決しなければなりません。
ジョブ表を見ると、Update-AzureVM という Runbook が実行のたびに中断しています。
ここで、ジョブ表の [JOB LAST UPDATE] 列のいずれかのリンクをクリックすると、ジョブの詳細を直接確認できます。ただしこの場合は、ジョブが中断状態になった日時を知りたいので、ジョブ表の Runbook 名 [Update-AzureVM] をクリックし、その Runbook のダッシュボードに移動して実行履歴を確認します。
Runbook ダッシュボード
Runbook ダッシュボードの外観は Automation ダッシュボードに非常によく似ており、グラフ、ジョブ表、概要のセクションから成ります。異なるのは、Runbook ダッシュボードでは 1 件の Runbook を対象としている点です。
[quick glance] セクションには、この Runbook の最終発行日時と発行者のほか、今月の Runbook のジョブ実行時間などの情報が表示されます。また、作成状態 (現在編集中、完了、発行済み) や、この Runbook がどのようなスケジュールで実行するよう設定されているかも確認できます。
過去 3 回の実行でこの Runbook が中断した理由を突き止めるには、もっと情報が必要です。ジョブ表の [JOB LAST UPDATE] 列の各ジョブの日時をクリックして、 [job summary] に移動します。
ジョブの概要
[job summary] には特定のジョブの概要が表示されます。Runbook の名前、現在のジョブの状態、ジョブを開始したユーザー、ジョブ開始日時、最終更新日時 (この場合は、中断された日時) が確認できます。また、Runbook の入力パラメーターの名前や値、Runbook からの出力や例外も確認できます。
有用な情報ですが、問題の根本原因を突き止めるには不十分です。Runbook のいくつかの変数が Null になっているようですが、なぜでしょう。 [HISTORY] タブをクリックすると、Runbook の各実行ステップの詳細が表示されます。
ジョブ履歴
PowerShell ワークフローを実行するたびに、ワークフロー エンジンは有用な情報を格納したストリームを送信します。Progress、Output、Warning、Error、Verbose などのストリームがあります。Azure Automation では、既定で Progress ストリームと Verbose ストリームはジョブごとに保存されません (特に Progress ストリームはデータ ストレージの規模が膨大になることがあるため)。デバッグやトラブルシューティングでこの情報が必要になる場合は、Runbook 構成ページでこれらのストリームの記録を有効にすることができます。
ジョブの [HISTORY] ページには保存されたすべてのストリームの一覧が作成日時順に表示されるので、Runbook の各実行ステップで何が起こったのかをすばやく確認できます。Automation ではこうした情報の保存や取得が可能ですので、Runbook はトラブルシューティングを念頭に作成してください。Runbook のジョブが中断した場合などに、原因を簡単に突き止めることができます。
上の図を見ると、ジョブの履歴でエラーが発生しているのがわかります。この Runbook は、修正プログラムを適用しようとしていた Azure Virtual Machines にリモート アクセスできなかったようです。
さらに詳細な情報が欲しい場合は、ストリームの詳細を表示したり、ジョブのソース コードを表示したりして、この問題を引き起こした可能性のある PowerShell ワークフローのコードを確認できます。このジョブを実行した後に Runbook が変更された場合でも、このジョブで使用されたソース コードが表示されます。
これで、中断された各ジョブの履歴を見て、発生したエラーの詳細を確認できました。上に示すように、このエラーは、修正プログラムを適用しようとしていた Azure Virtual Machines との認証が失敗したことが原因です。コードを見ると、Update-AzureVM は “joeAzureVMCred” Automation 資格情報を使って VM にリモート アクセスしています。
ここで、この Virtual Machines のパスワードは最近変更されたばかりだったことに気がつきました。これで問題がはっきりしました。修正は簡単です。joeAzureVMCred 資格情報を編集してパスワードを正しい値に更新します。
修正が済んだら、中断状態の各ジョブを再開します。最後のチェックポイント (チェックポイントについては今後の記事で取り上げます) から再開して処理が完了します。これで再び稼動させることができました。
まとめ
Azure Automation には Azure のクラウド環境の完全自動化に必要なツールが揃っています。Runbook の新規作成、ジョブの実行から監視、トラブルシューティングまで、自動化をすべて管理できます。
Azure Automation の詳細については、Brad Anderson のブログ記事 (英語) をご覧ください。さらに踏み込んだ情報についてはこちらの資料 (英語) を参照してください。
まだ Azure Automation をご利用でない方は、プレビュー版にサインアップして、Get Started ガイド (英語) をご覧ください。