🕸️

Azure Automation Runbook で実行したジョブの実行時間を確認する

2024/01/16に公開

はじめに

Azure Automation は Azure で利用できる自動化ソリューションとして一般業務や IT オペレーションなどさまざまな場面でプロセスの自動化等に利用されています。活用が進めば進むほどその重要性が増し、単に実行結果の成功/失敗だけでなく、その実行時間を監視する必要も出てくるかもしれません。本記事ではそのような Automation ジョブに対して実行時間を監視するための方法をご紹介します。

監視方法の概略

  • 本記事でご紹介する方法では、Azure Automation に対して診断設定を追加し、ジョブの開始/終了を記録するログを収集します。収集先は Log Analytics ワークスペースを利用します。
  • Log Analytics ワークスペースに保存されたログに対してクエリを実行し、ジョブの実行時間を表示します。
  • 必要に応じて実行時間を閾値としたアラートを設定します。

制限事項

上記のサービスを利用する性質上、「ジョブが X 分以上経過していたら即時に通知したい」というニーズには適合していません。即時要件がある場合は診断設定の保存先をイベントハブにし高い頻度で処理結果を監視するような仕組みが考えられますが、本書では記載の対象外とします。

設定の流れ

本書では Automation アカウントの作成から Runbook の作成およびそのログの監視まで一連の手順を記載します。既存の Runbook ジョブがあり、監視設定のみ実行する場合には下記手順 4. 診断設定の追加 から実施してください。
なおログの保存先となる Log Analytics ワークスペースについては事前に作成しておいてください。

  1. マネージド ID の作成
  2. Automation Account の設定
  3. マネージド ID の有効化
  4. 診断設定の追加
  5. Runbook の作成と実行
  6. ログのクエリ
  7. アラートの設定

設定手順

  1. マネージド ID の作成
    ユーザー割り当てマネージド ID を作成します。
    https://learn.microsoft.com/ja-jp/entra/identity/managed-identities-azure-resources/how-manage-user-assigned-managed-identities?pivots=identity-mi-methods-azp#create-a-user-assigned-managed-identity
  1. Automation Account の設定
    下記を参考に Automation Account を作成します。
    https://learn.microsoft.com/ja-jp/azure/automation/quickstarts/create-azure-automation-account-portal

  2. マネージド ID の有効化
    Automation アカウントのマネージド ID を有効にします。ユーザー割り当てマネージド ID の場合は以下を参照してください。
    https://learn.microsoft.com/ja-jp/azure/automation/quickstarts/enable-managed-identity#add-user-assigned-managed-identity

  3. 診断設定の追加
    診断設定を追加します。Automation アカウント単位に設定します。
    4.1. アカウント画面の左メニューから監視 → 診断設定をクリックします。

    4.2. 診断設定の名前、収集するログの指定、宛先(Log Analytics ワークスペース)の指定を行います。入力後、保存ボタンをで保存します。

  4. Runbook の作成と実行
    Runbook を作成します。ここでは例としてこちらのチュートリアルに沿って作成します。
    https://learn.microsoft.com/ja-jp/azure/automation/learn/automation-tutorial-runbook-textual#create-new-runbook
    ログの出力を確認するだけであれば 「Runbook を発行して開始する」まで実行していれば問題ありません。

  5. ログのクエリ
    ジョブ実行後、5分程度待った後ログを確認してみましょう。
    Automation 画面 → 左メニューから監視 → ログを開きます。

6.1. とりあえずログを確認する
単純に Automation の診断設定ログを確認する場合は以下のクエリを実行します。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION"

6.2. 時間ごとに実行されたジョブの数をグラフで表示する
以下のクエリは 1 時間ごとに実行されたジョブ数をグラフで表示します。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION"
| where OperationName == "Job"
| where ResultType == "Completed"
| summarize count=count() by bin(TimeGenerated, 1h), OperationName
| render columnchart  with (ycolumns=OperationName, series=['count'])

このようなグラフが表示できます。

6.3. ジョブの実行時間
ジョブの実行時間(ジョブの終了時刻 - ジョブの開始時刻)をクエリしてみましょう。AzureDiagnostics テーブルには以下のように、一つのジョブに対する結果が複数の行に記録されるため、行内での計算ができません。

そこで join 演算子を使い同じテーブル同士を結合することで行単位に計算できるようにしました。

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and ResultType == "Started"
| distinct JobId_g, TimeGenerated, ResultType
| join kind=innerunique   (
    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and ResultType == "Completed"
    | distinct JobId_g, TimeGenerated, ResultType
    )
    on JobId_g
| extend elaps_sec = datetime_diff('second', TimeGenerated1, TimeGenerated)
| project JobId_g, jobstartdatetime = TimeGenerated , jobenddatetime = TimeGenerated1, elaps_sec
| order by jobstartdatetime desc

これでジョブ開始時刻と終了時刻の差(elaps_sec 列) にジョブ実行時間を表示できました。

6.4. その他ジョブ関連のクエリ
その他にもジョブ関連のログを分析するクエリが以下に載っていますのでご興味ある方は確認してみてください。
https://learn.microsoft.com/ja-jp/azure/automation/automation-manage-send-joblogs-log-analytics#sample-queries-for-job-logs-and-job-streams

  1. アラートの設定
    アラートの設定はクエリ画面から設定ができます。アラートを設定したいクエリを実行した後、同じ画面から 新しいアラートルール をクリックします。

アラートルールの 条件 タブで、測定(結果を要約する方法)およびアラートロジックを設定します。ここでは先ほどの例でいうジョブ実行時間(elaps_sec)が10秒を超えた場合を設定しています。

アクション タブでアラートに対するアクション(メールの送信など)、詳細 タブで重要度等を設定します。詳しくは以下のリンクを参照してください。
https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/alerts-create-log-alert-rule

まとめ

本ブログでは Azure Automation のジョブの実行時間の確認、および監視方法について記載しました。みなさんの使い方によって色々なシナリオがあるかと思いますが監視を検討する際に一つの参考になれば幸いです。

Microsoft (有志)

Discussion