将 Azure 自动化作业数据转发到 Azure Monitor 日志

Azure 自动化可将 Runbook 作业状态和作业流发送到 Log Analytics 工作区。 此过程不涉及工作区链接,并且完全独立。 可在 Azure 门户中或使用 PowerShell 查看单个作业的作业日志和作业流,这使用户可执行简单的调查。 借助 Azure Monitor 日志,你现可:

  • 深入了解自动化作业的状态。
  • 基于 Runbook 作业状态(例如失败或暂停)触发电子邮件或警报。
  • 编写跨作业流的高级查询。
  • 跨自动化帐户关联作业。
  • 使用自定义视图和搜索查询直观呈现 Runbook 结果、Runbook 作业状态以及其他相关的关键指标。

先决条件

要开始将自动化日志发送到 Azure Monitor 日志,需要:

如何查找资源 ID

  1. 使用以下命令查找 Azure 自动化帐户的资源 ID:

    # Find the ResourceId for the Automation account
    Get-AzResource -ResourceType "Microsoft.Automation/automationAccounts"
    
  2. 复制 ResourceID 的值。

  3. 使用以下命令查找 Log Analytics 工作区的资源 ID:

    # Find the ResourceId for the Log Analytics workspace
    Get-AzResource -ResourceType "Microsoft.OperationalInsights/workspaces"
    
  4. 复制 ResourceID 的值。

若要从特定的资源组返回结果,请包含 -ResourceGroupName 参数。 有关详细信息,请参阅 Get-AzResource

如果上述命令的输出中有多个自动化帐户或工作区,可通过执行以下操作来查找自动化帐户的完整资源 ID 中包含的名称和其他相关属性:

  1. 登录到 Azure 门户

  2. 在 Azure 门户中,从“自动化帐户”页面选择你的自动化帐户。

  3. 在所选自动化帐户的页面,在“帐户设置”下选择“属性” 。

  4. 在“属性”页面上,注意下面显示的详细信息。

    自动化帐户属性.

配置诊断设置

自动化诊断设置支持转发以下平台日志和指标数据:

  • JobLogs
  • JobStreams
  • DSCNodeStatus
  • 指标 - 作业总数、更新部署计算机运行总数、更新部署运行总数

若要开始将自动化日志发送到 Azure Monitor 日志,请查看创建诊断设置,了解可用于配置诊断设置以发送平台日志的功能和方法。

Azure Monitor 日志记录

Azure 自动化诊断将在 Azure Monitor 日志中创建两种类型的记录,标记为 AzureDiagnostics。 在以下各部分的表格中,有 Azure 自动化生成的记录和日志搜索结果中显示的数据类型的示例。

作业日志

属性 说明
TimeGenerated 执行 Runbook 作业的日期和时间。
RunbookName_s Runbook 的名称。
Caller_s 启动操作的调用方。 可能的值为电子邮件地址或计划作业的系统。
Tenant_g 用于为调用方标识租户的 GUID。
JobId_g 标识 Runbook 作业的 GUID。
ResultType Runbook 作业的状态。 可能的值包括:
- 新
- 已创建
- Started(已启动)
- Stopped(已停止)
- Suspended(已暂停)
- Failed(失败)
- 已完成
类别 数据类型的分类。 对于自动化,该值为 JobLogs。
OperationName Azure 中执行的操作的类型。 对于自动化,该值为 Job。
资源 自动化帐户的名称
SourceSystem Azure Monitor 日志用来收集数据的系统。 对于 Azure 诊断,值始终为 Azure。
ResultDescription Runbook 作业结果状态。 可能的值包括:
- 作业已启动
- 作业失败
- 作业已完成
CorrelationId Runbook 作业的关联 GUID。
ResourceId Runbook 的 Azure 自动化帐户资源 ID。
SubscriptionId 自动化帐户的 Azure 订阅 GUID。
ResourceGroup 自动化帐户的资源组的名称。
ResourceProvider 资源提供程序。 值为 MICROSOFT.AUTOMATION。
ResourceType 资源类型。 值为 AUTOMATIONACCOUNTS。

作业流

属性 说明
TimeGenerated 执行 Runbook 作业的日期和时间。
RunbookName_s Runbook 的名称。
Caller_s 启动操作的调用方。 可能的值为电子邮件地址或计划作业的系统。
StreamType_s 作业流的类型。 可能的值包括:
- 进度
- Output(输出)
- Warning(警告)
- Error(错误)
- Debug(调试)
- 详细
Tenant_g 用于为调用方标识租户的 GUID。
JobId_g 标识 Runbook 作业的 GUID。
ResultType Runbook 作业的状态。 可能的值包括:
- In Progress
类别 数据类型的分类。 对于自动化,该值为 JobStreams。
OperationName Azure 中执行的操作的类型。 对于自动化,该值为 Job。
资源 自动化帐户的名称。
SourceSystem Azure Monitor 日志用来收集数据的系统。 对于 Azure 诊断,值始终为 Azure。
ResultDescription 包括来自 Runbook 的输出流的说明。
CorrelationId Runbook 作业的关联 GUID。
ResourceId Runbook 的 Azure 自动化帐户资源 ID。
SubscriptionId 自动化帐户的 Azure 订阅 GUID。
ResourceGroup 自动化帐户的资源组的名称。
ResourceProvider 资源提供程序。 值为 MICROSOFT.AUTOMATION。
ResourceType 资源类型。 值为 AUTOMATIONACCOUNTS。

在 Azure Monitor 日志中查看自动化日志

现在,你已开始将自动化作业流和日志发送到 Azure Monitor 日志,接下来让我们看看可在 Azure Monitor 日志中对这些日志执行哪些操作。

若要查看日志,请运行以下查询:AzureDiagnostics | where ResourceProvider == "MICROSOFT.AUTOMATION"

Runbook 作业失败或暂停时发送电子邮件

以下步骤说明如何在 Azure Monitor 中设置警报,以便在 Runbook 作业出现问题时通知你。

要创建警报规则,请先针对应调用警报的 Runbook 作业记录创建日志搜索。 单击“警报”按钮以创建和配置警报的规则。

  1. 在 Log Analytics 工作区的“概述”页面中,单击“查看日志”。

  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

    如果设置了在工作区中收集来自多个自动化帐户或订阅的日志,则可以按照订阅或自动化帐户来为警报分组。 可在 JobLogs 搜索中的 Resource 字段中找到自动化帐户名称。

  3. 若要打开“创建规则”屏幕,请单击页面顶部的“新建警报规则” 。 要详细了解用于配置警报的选项,请参阅 Azure 中的日志警报

查找已完成但出错的所有作业

除了在失败时发出警报外,还可以发现 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 的单个作业的所有流:

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 历史作业状态图标

筛选已转换为 JSON 对象的作业状态输出

最近,我们更改了将自动化日志数据写入 Log Analytics 服务的 AzureDiagnostics 表的行为方式,在该表中不再将 JSON 属性分解为单独的字段。 如果 runbook 已配置为将 JSON 格式的输出流中的对象格式化为单独的列,则必须重新配置查询以将该字段解析为 JSON 对象,以便访问这些属性。 这是使用 parsejson 访问已知路径中的特定 JSON 元素来实现的。

例如,runbook 将 JSON 格式的输出流中的 ResultDescription 属性格式化为多个字段。 若要搜索在名为“Status”的字段中指定为失败状态的作业的状态,请使用此示例查询搜索状态为“Failed”的 ResultDescription:

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

Log Analytics 历史作业流 JSON 格式

后续步骤