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 アカウント リソースのメニューから、診断設定を構成できます。
Automation アカウント メニューの [監視] にある [診断設定] を選びます。
[診断設定の追加] をクリックします。
[診断設定の名前] に設定名がまだない場合は、入力します。
また、[Logs and metrics]\(ログとメトリック\) のすべてのカテゴリを表示することもできます。
ルーティングするログとメトリック: ログの場合は、カテゴリ グループを選択するか、指定した宛先に送信するデータのカテゴリごとに個々のチェックボックスをオンにします。 メトリックを Azure Monitor ログに保存する場合は、[AllMetrics] を選択します。
宛先の詳細: 各宛先のチェックボックスをオンにします。 各ボックスの選択に応じて、その他の情報を追加するオプションが表示されます。
Log Analytics: サブスクリプション ID とワークスペース名を入力します。 ワークスペースがない場合は、先に進む前に作成する必要があります。
Event Hubs: 次の条件を指定します。
- サブスクリプション: イベント ハブと同じサブスクリプション。
- イベント ハブ名前空間: イベント ハブがまだない場合は作成します。
- イベント ハブ名 (省略可能): 名前を指定しない場合は、ログ カテゴリごとにイベント ハブが作成されます。 複数のカテゴリを送信する場合、作成するイベント ハブの数を制限するには、名前を指定します。 詳細については、「Azure Event Hubs のクォータと制限」を参照してください。
- イベント ハブ ポリシー (省略可能) - ポリシーによってストリーミング メカニズムのアクセス許可が定義されます。 Event Hubs の機能に関するページを参照してください。
パートナー統合: まず、サブスクリプションにパートナー統合をインストールする必要があります。 構成オプションはパートナーによって異なります。 詳細については、Azure Monitor の統合に関するページを参照してください。
[保存] をクリックします。
しばらくすると、このリソースの設定一覧に新しい設定が表示され、新しいイベント データが生成されると、ログが指定の送信先にストリーミングされます。 イベントが発行されてから Log Analytics ワークスペースに表示されるまでに 15 分の時間差が生じる場合があります。
ログのクエリを実行する
生成されたログをクエリするには、次の操作を行います。
Automation アカウントで、[監視] の下の [ログ] を選びます。
[すべてのクエリ] の下の [Automation Jobs]\(Automation ジョブ\) を選びます。
実行するクエリの 1 つを選び、[実行] をクリックします。
カスタム クエリを実行するには、[クエリ] ウィンドウを閉じ、新しいクエリ ウィンドウにカスタム クエリを貼り付け、[実行] をクリックします。
クエリの出力が [結果] ペインに表示されます。
[新しいアラート ルール] をクリックして、このクエリに対する Azure Monitor アラートを構成します。
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 です。 |
Note
資格情報がジョブ ストリームに送信されていないことを確認します。 サービスでは、診断ログにジョブ ストリームを表示する前に資格情報を削除します。
イベントを監査する
プロパティ | 説明 |
---|---|
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 ではエラー ストリームが生成されますが、ジョブが終了しないエラーでは、ジョブの中断や失敗は起こりません。
- Log Analytics ワークスペースで [ログ] をクリックします。
- クエリ フィールドに次のように入力します。
AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION" and Category == "JobStreams" and StreamType_s == "Error" | summarize AggregatedValue = count () by JobId_g.
- [検索] をクリックします。
ジョブのジョブ ストリームを確認する
ジョブのデバッグを行っているときに、ジョブ ストリームの確認が必要になることもあります。 次のクエリは、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)
オートメーション ジョブのエラーを報告するログを検索する。
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 ジョブ レコードのログ検索を作成します。 [+ 新しいアラート ルール] をクリックしてアラート ルールを構成します。
Automation アカウントで、[監視] の下の [ログ] を選びます。
クエリ フィールドに検索条件を入力し、アラート用のログ検索クエリを作成します。
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
[アラート ルールの作成] 画面を開くには、ページの上部にある [+ 新しいアラート ルール] をクリックします。 アラートを構成するオプションの詳細については、「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'
次のステップ
- 検索クエリの作成方法と、Azure Monitor ログでの Automation ジョブ ログの確認方法については、Azure Monitor ログでのログ検索に関するページを参照してください。
- Runbook の出力とエラー メッセージを作成および取得する方法については、「Runbook 出力を監視する」を参照してください。
- Runbook の実行、Runbook ジョブの監視方法、その他の技術的な詳細については、「Azure Automation での Runbook の実行」を参照してください。
- Azure Monitor ログとデータ収集ソースの詳細については、Azure Monitor ログにおける Azure Storage データの収集の概要に関するページを参照してください。
- Log Analytics のトラブルシューティングについては、Log Analytics がデータを収集しなくなった場合のトラブルシューティングに関する記事を参照してください。