Azure Automation の診断ログを Azure Monitor に転送する

Azure Automation では、Runbook ジョブの状態とジョブ ストリームを Log Analytics ワークスペースに送信できます。 このプロセスにはワークスペースのリンク処理が含まれず、完全に独立しているため、簡単な調査を実行できます。 個々のジョブのジョブ ログとジョブ ストリームは、Azure portal や PowerShell を使って確認できます。 Automation アカウントの Azure Monitor ログを使うと、次のことを実行できます。

  • Automation ジョブの状態に関する分析情報を得る。
  • Runbook ジョブの状態 (失敗、中断など) に基づいて電子メールまたはアラートをトリガーする。
  • ジョブ ストリームをまたぐ高度なクエリを記述する。
  • Automation アカウントをまたいでジョブどうしを関連付ける。
  • カスタム ビューと検索クエリを使用して、Runbook の結果、Runbook ジョブの状態、その他の関連する主要な指標やメトリックを Azure ダッシュボードで視覚化します。
  • Automation アカウント、Runbook、その他の資産の作成、変更、削除操作に関連する監査ログを取得します。

Azure Monitor ログを使うと、同じワークスペース内の異なるリソースのログを統合できます。また、それをクエリを使って分析し、収集したデータをすばやく取得、統合、分析できます。 Azure portal で Log Analytics を使用してクエリを作成してテストした後、これらのツールを使用してデータを直接分析するか、クエリを保存して視覚化またはアラート ルールで利用できます。

Azure Monitor には、Azure Data Explorer で使われる Kusto 照会言語 (KQL) のバージョンが使われます。これは単純なログ クエリに適しています。 また、集計、結合、スマート分析などの高度な機能も備えています。 さまざまなレッスンを利用すれば、クエリ言語はすぐに覚えることができます。

Azure Automation の診断設定

Automation 診断設定のサポートを使って、次のプラットフォームのログとメトリック データを転送できます。

データ型 説明
ジョブ ログ Automation アカウントの Runbook ジョブの状態。
ジョブ ストリーム Automation アカウントで定義された Runbook のジョブ ストリームの状態。
DSCNodeStatus DSC ノードの状態。
AuditEvent Azure Automation サービスのデータまたは設定に対する顧客の操作を記録するすべてのリソース ログ。
メトリック 合計ジョブ数、合計更新プログラム数、デプロイ マシンの実行回数、更新プログラムのデプロイの合計実行回数。

Azure portal で診断設定を構成する

Azure portal の Automation アカウント リソースのメニューから、診断設定を構成できます。

  1. Automation アカウント メニューの [監視] にある [診断設定] を選びます。

    Screenshot showing selection of diagnostic setting option.

  2. [診断設定の追加] をクリックします。

    Screenshot showing selection of add diagnostic setting.

  3. [診断設定の名前] に設定名がまだない場合は、入力します。

    また、[Logs and metrics]\(ログとメトリック\) のすべてのカテゴリを表示することもできます。

    Screenshot showing all categories of logs and metrics.

    • ルーティングするログとメトリック: ログの場合は、カテゴリ グループを選択するか、指定した宛先に送信するデータのカテゴリごとに個々のチェックボックスをオンにします。 メトリックを Azure Monitor ログに保存する場合は、[AllMetrics] を選択します。

    • 宛先の詳細: 各宛先のチェックボックスをオンにします。 各ボックスの選択に応じて、その他の情報を追加するオプションが表示されます。

      Screenshot showing selections in destination details section.

      • Log Analytics: サブスクリプション ID とワークスペース名を入力します。 ワークスペースがない場合は、先に進む前に作成する必要があります。

      • Event Hubs: 次の条件を指定します。

        • サブスクリプション: イベント ハブと同じサブスクリプション。
        • イベント ハブ名前空間: イベント ハブがまだない場合は作成します
        • イベント ハブ名 (省略可能): 名前を指定しない場合は、ログ カテゴリごとにイベント ハブが作成されます。 複数のカテゴリを送信する場合、作成するイベント ハブの数を制限するには、名前を指定します。 詳細については、「Azure Event Hubs のクォータと制限」を参照してください。
        • イベント ハブ ポリシー (省略可能) - ポリシーによってストリーミング メカニズムのアクセス許可が定義されます。 Event Hubs の機能に関するページを参照してください。
      • ストレージ: サブスクリプション、ストレージ アカウント、アイテム保持ポリシーを選択します。 Screenshot showing the storage account.

      • パートナー統合: まず、サブスクリプションにパートナー統合をインストールする必要があります。 構成オプションはパートナーによって異なります。 詳細については、Azure Monitor の統合に関するページを参照してください。

  4. [保存] をクリックします。

しばらくすると、このリソースの設定一覧に新しい設定が表示され、新しいイベント データが生成されると、ログが指定の送信先にストリーミングされます。 イベントが発行されてから Log Analytics ワークスペースに表示されるまでに 15 分の時間差が生じる場合があります。

ログのクエリを実行する

生成されたログをクエリするには、次の操作を行います。

  1. Automation アカウントで、[監視] の下の [ログ] を選びます。

  2. [すべてのクエリ] の下の [Automation Jobs]\(Automation ジョブ\) を選びます。

    Screenshot showing how to navigate to select Automation jobs.

  3. 実行するクエリの 1 つを選び、[実行] をクリックします。

  4. カスタム クエリを実行するには、[クエリ] ウィンドウを閉じ、新しいクエリ ウィンドウにカスタム クエリを貼り付け、[実行] をクリックします。

    クエリの出力が [結果] ペインに表示されます。

  5. [新しいアラート ルール] をクリックして、このクエリに対する Azure Monitor アラートを構成します。

    Screenshot showing how to query logs.

Azure Monitor のログ レコード

Azure Automation の診断により、AzureDiagnostics というタグの付いた次の種類のレコードが Azure Monitor ログに作成されます。 次のセクションの表では、Azure Automation によって生成されるレコードの例と、ログの検索結果に表示されるデータの種類を示します。

ジョブのログ

プロパティ 説明
TimeGenerated Runbook ジョブが実行された日付と時刻。
RunbookName_s Runbook の 1 つ以上の名前。
Caller_s 操作を開始した呼び出し元。 スケジュールされたジョブのシステムまたは電子メール アドレスが記録されます。
Tenant_g 呼び出し元のテナントを識別する GUID (グローバル一意識別子)。
JobId_g Runbook ジョブを識別する GUID。
ResultType Runbook ジョブの状態。 次のいずれかの値になります。
- 新規
- 作成済み
- 開始済み
- 停止済み
- 中断
- 失敗
- 完了
カテゴリ データの種類の分類。 Automation の場合、値は JobLogs です。
OperationName Azure で実行された操作の種類。 Automation の場合、値は Job です。
リソース Automation アカウントの名前です。
SourceSystem データを収集するために Azure Monitor ログによって使用されるシステム。 Azure Diagnostics の場合、値は常に "Azure" です。
ResultDescription Runbook ジョブの結果の状態。 次のいずれかの値になります。
- ジョブが開始されました
- ジョブが失敗しました
- ジョブが完了しました
相関 ID Runbook ジョブの関連付け GUID。
ResourceId Runbook の Azure Automation アカウントのリソース ID。
SubscriptionId Automation アカウントの Azure サブスクリプション GUID。
リソース グループ Automation アカウントのリソース グループの名前です。
ResourceProvider リソース プロバイダーの名前。 値は MICROSOFT.AUTOMATION です。
ResourceType リソースの種類。 値は AUTOMATIONACCOUNTS です。

ジョブ ストリーム

プロパティ 説明
TimeGenerated Runbook ジョブが実行された日付と時刻。
RunbookName_s Runbook の名前。
Caller_s 操作を開始した呼び出し元。 スケジュールされたジョブのシステムまたは電子メール アドレスが記録されます。
StreamType_s ジョブ ストリームの種類。 次のいずれかの値になります。
- 進行状況
- 出力
- 警告
- エラー
- デバッグ
- 詳細
Tenant_g 呼び出し元のテナントを識別する GUID。
JobId_g Runbook ジョブを識別する GUID。
ResultType Runbook ジョブの状態。 次のいずれかの値になります。
- In Progress
カテゴリ データの種類の分類。 Automation の場合、値は JobStreams です。
OperationName Azure で実行された操作の種類。 Automation の場合、値は Job です。
リソース Automation アカウントの名前。
SourceSystem データを収集するために Azure Monitor ログによって使用されるシステム。 Azure Diagnostics の場合、値は常に "Azure" です。
ResultDescription Runbook からの出力ストリームが含まれる説明。
相関 ID Runbook ジョブの関連付け GUID。
ResourceId Runbook の Azure Automation アカウントのリソース ID。
SubscriptionId Automation アカウントの Azure サブスクリプション GUID。
リソース グループ Automation アカウントのリソース グループの名前です。
ResourceProvider リソースプロバイダー。 値は MICROSOFT.AUTOMATION です。
ResourceType リソースの種類。 値は AUTOMATIONACCOUNTS です。

イベントを監査する

プロパティ 説明
TenantID 呼び出し元のテナントを識別する GUID。
TimeGenerated (UTC) Runbook ジョブが実行された日付と時刻。
カテゴリ AuditEvent
リソース グループ Automation アカウントのリソース グループ名。
サブスクリプション ID Automation アカウントの Azure サブスクリプション GUID。
ResourceProvider MICROSOFT.AUTOMATION
リソース Automation アカウント名
ResourceType AUTOMATIONACCOUNTS
OperationName 指定できる値は、Update、Create、Delete です。
ResultType Runbook ジョブの状態。 指定できる値は Completed です。
相関 ID Runbook ジョブの関連付け GUID。
ResultDescription Runbook ジョブの結果の状態。 指定できる値は、Update、Create、Delete です。
Tenant_g 呼び出し元のテナントを識別する GUID。
SourceSystem データを収集するために Azure Monitor ログによって使用されるシステム。 Azure Diagnostics の場合、値は常に "Azure" です。
clientInfo_IpAddress_s {scrubbed}
clientInfo_PrincipalName_s {scrubbed}
clientInfo_TenantId_g クライアントのテナント ID。
clientInfo_Issuer_s
clientInfo_ObjectId_g クライアントのオブジェクト ID。
clientInfo_AppId_g クライアントの AppID。
clientInfo_ClientRequestId_g クライアントの RequestID
targetResources_Resource_s Account、Job、Credential、Connections、Variables、Runbook。
Type AzureDiagnostics
_ResourceId Runbook の Azure Automation アカウントのリソース ID。

Azure Monitor ログでの Automation ログの確認

これで、Automation ジョブ ストリームとログの Azure Monitor ログへの送信が開始されたので、Azure Monitor ログの内部でこれらのログを使用して何ができるかを見てみましょう。

ログを表示するには、次のクエリを実行します。kusto AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION"

ジョブ ログとジョブ ストリームのサンプル クエリ

エラーが発生したすべてのジョブを特定する

エラーに対するアラートのようなシナリオだけでなく、Runbook ジョブが終了しないときにもエラーが表示されます。 このような場合、PowerShell ではエラー ストリームが生成されますが、ジョブが終了しないエラーでは、ジョブの中断や失敗は起こりません。

  1. Log Analytics ワークスペースで [ログ] をクリックします。
  2. クエリ フィールドに次のように入力します。
    AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and StreamType_s == "Error" | summarize AggregatedValue = count () by JobId_g. 
    
  3. [検索] をクリックします。

ジョブのジョブ ストリームを確認する

ジョブのデバッグを行っているときに、ジョブ ストリームの確認が必要になることもあります。 次のクエリは、GUID が 2ebd22ea-e05e-4eb9-9d76-d73cbd4356e0 である 1 つのジョブのすべてのストリームを示しています。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and JobId_g == "2ebd22ea-e05e-4eb9-9d76-d73cbd4356e0"
| sort by TimeGenerated asc
| project ResultDescription

ジョブの状態の履歴を確認する

最後に、ジョブの履歴を時系列で視覚化することが必要になる場合があります。 次のクエリを使うと、ジョブの状態を時系列で検索できます。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and ResultType != "started"
| summarize AggregatedValue = count() by ResultType, bin(TimeGenerated, 1h)

Log Analytics Historical Job Status Chart

オートメーション ジョブのエラーを報告するログを検索する。

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" 
| where StreamType_s == "Error" 
| project TimeGenerated, Category, JobId_g, OperationName, RunbookName_s, ResultDescription, _ResourceId 

完了した Azure Automation ジョブを検索する

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and ResultType == "Completed" 
| project TimeGenerated, RunbookName_s, ResultType, _ResourceId, JobId_g

失敗、中断、または停止した Azure Automation ジョブを検索する

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and (ResultType == "Failed" or ResultType == "Stopped" or ResultType == "Suspended") 
| project TimeGenerated, RunbookName_s, ResultType, _ResourceId, JobId_g 

エラーが発生して正常に完了したすべての Runbook とジョブを一覧表示する

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and StreamType_s == "Error" 
| project TimeGenerated, RunbookName_s, StreamType_s, _ResourceId, ResultDescription, JobId_g 

Runbook ジョブが失敗または中断したときに電子メールを送信する

次の手順は、Runbook ジョブに何か問題が生じたときに通知を受けるためのメール アラートを Azure Monitor で設定する方法を示しています。

アラート ルールを作成するには、「ログのクエリを実行する」で説明したように、アラートを呼び出す Runbook ジョブ レコードのログ検索を作成します。 [+ 新しいアラート ルール] をクリックしてアラート ルールを構成します。

  1. Automation アカウントで、[監視] の下の [ログ] を選びます。

  2. クエリ フィールドに検索条件を入力し、アラート用のログ検索クエリを作成します。

    AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobLogs" and (ResultType == "Failed" or ResultType == "Suspended")   
    

    次のクエリを使用して、Runbook 名でグループ化することもできます。

    AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION" and     Category == "JobLogs" and (ResultType == "Failed" or ResultType == "Suspended") | summarize AggregatedValue = count() by RunbookName_s 
    
  3. [アラート ルールの作成] 画面を開くには、ページの上部にある [+ 新しいアラート ルール] をクリックします。 アラートを構成するオプションの詳細については、「Azure Monitor でのログ アラート」を参照してください。

Azure Automation 診断監査ログ

Azure Monitor ワークスペースにも監査ログを送信できるようになりました。 これにより、企業は、セキュリティとコンプライアンスの主要な Automation アカウント アクティビティを監視できます。 Azure Diagnostics 設定を使用して有効にすると、Automation Runbook、ジョブ、Automation 資産 (接続、資格情報、変数、 証明書など) の作成、更新、削除操作に関するテレメトリを収集できます。 また、セキュリティ監視要件の一部として、監査ログ条件に対してアラートを構成することもできます。

アクティビティ ログと監査ログの違い

アクティビティ ログは、サブスクリプション レベルのイベントの分析情報を提供する Azure 内のプラットフォーム ログです。 Automation アカウントのアクティビティ ログには、Automation リソースが変更、作成、または削除されたときに関する情報が含まれています。 ただし、リソースの名前または ID はキャプチャされません。

Automation アカウントの監査ログには、Automation の変数、資格情報、接続などのリソースの名前と ID と共に、リソースに対して実行された操作の種類がキャプチャされます。また、Azure Automation によって、GDPR コンプライアンスに準拠したクライアント IP データなどのいくつかの詳細情報がスクラブされます。

アクティビティ ログは Azure リソースの詳細な診断および監査情報を提供するプラットフォーム ログであるため、アクティビティ ログにはクライアント IP などの詳細が示されます。 これらは ARM で発生したアクティビティに対して自動的に生成され、アクティビティ ログ リソース プロバイダーにプッシュされます。 アクティビティ ログは Azure の監視の一部であるため、クライアント アクティビティの分析情報を提供するいくつかのクライアント データが表示されます。  

監査ログのサンプル クエリ

Automation リソースの監査ログを表示するクエリ

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" 

変数の更新、作成、削除の操作を監視するクエリ

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" and targetResources_Resource_s == "Variable" 

Runbook の作成、ドラフト、更新などの操作を監視するクエリ

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" and targetResources_Resource_s contains "Runbook" 

証明書の作成、更新、削除を監視するクエリ

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" and targetResources_Resource_s contains "Certificate" 

資格情報の作成、更新、削除を監視するクエリ

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "AuditEvent" and targetResources_Resource_s contains "Credential" 

JSON オブジェクトに変換されたジョブの状態の出力をフィルター処理する

最近、Log Analytics サービスで Automation ログ データが AzureDiagnostics テーブルに書き込まれる場合の動作が変更されており、JSON プロパティが個別のフィールドに分割されなくなりました。 出力ストリーム内のオブジェクトを個別の列として JSON 形式で書式設定するように Runbook を構成している場合は、それらのプロパティにアクセスするために、そのフィールドを JSON オブジェクトに解析するようにクエリを再構成する必要があります。 これは、parsejson を使用して、既知のパスにある特定の JSON 要素にアクセスすることによって実現されます。

たとえば、Runbook によって、出力ストリーム内の ResultDescription プロパティが複数のフィールドを含む JSON 形式で書式設定されるとします。 Status という名前のフィールドで指定されるエラー状態にあるジョブの状態を検索するには、次のクエリ例を使用して、Failed の状態を持つ ResultDescription を検索します。

AzureDiagnostics
| where Category == 'JobStreams'
| extend jsonResourceDescription = parse_json(ResultDescription)
| where jsonResourceDescription.Status == 'Failed'

Log Analytics Historical Job Stream JSON format

次のステップ