将 Azure 自动化诊断日志转发到 Azure Monitor

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

  • 深入了解自动化作业的状态。
  • 基于 Runbook 作业状态(例如失败或暂停)触发电子邮件或警报。
  • 编写跨作业流的高级查询。
  • 跨自动化帐户关联作业。
  • 通过 Azure 仪表板使用自定义视图和搜索查询直观呈现 runbook 结果、runbook 作业状态以及其他相关的关键指标。
  • 获取与自动化帐户、runbook 和其他资产的创建、修改和删除操作相关的审核日志。

使用 Azure Monitor 日志,你可以合并来自同一工作区中不同资源的日志,可以在工作区中使用查询对其进行分析,以快速检索、合并和分析收集的数据。 可以在 Azure 门户中使用 Log Analytics 创建和测试查询,然后直接使用这些工具分析数据,或者保存查询以便与可视化效果警报规则配合使用。

Azure Monitor 使用 Azure 数据资源管理器使用的 Kusto 查询语言 (KQL) 的某个版本,该查询语言适用于简单的日志查询。 该语言还包括高级功能,例如聚合、联接和智能分析。 可以通过多个课程快速了解此查询语言。

Azure 自动化诊断设置

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

数据类型 说明
作业日志 自动化帐户中的 runbook 作业的状态。
作业流 在自动化帐户中定义的 runbook 中的作业流的状态。
DSCNodeStatus DSC 节点的状态。
AuditEvent 记录客户与数据或 Azure 自动化服务的设置交互的所有资源日志。
指标 作业总数、更新部署计算机运行总数、更新部署运行总数。

在 Azure 门户中配置诊断设置

可以在 Azure 门户中通过自动化帐户资源菜单配置诊断设置。

  1. 在自动化帐户菜单中的“监视”下,选择“诊断设置”。

    此屏幕截图显示如何选择诊断设置选项。

  2. 单击“添加诊断设置”。

    此屏幕截图显示如何选择“添加诊断设置”。

  3. 在“诊断设置名称”中输入设置名称(如果还没有)。

    还可以查看所有类别的日志和指标。

    显示所有类别的日志和指标的屏幕截图。

    • 要路由的日志和指标 - 对于日志,请选择一个类别组,或选中要发送到指定目标的每个数据类别对应的各个复选框。 如果要将指标存储到 Azure Monitor 日志中,请选择“AllMetrics”。

    • 目标详细信息:选中每个目标对应的复选框。 选中每个框时,将显示用于添加其他信息的选项。

      此屏幕截图显示目标详细信息部分中的选择。

      • Log Analytics:输入订阅 ID 和工作区名称。 如果没有工作区,则必须在继续操作之前创建一个

      • 事件中心:指定以下条件:

        • 订阅:与事件中心的订阅相同的订阅。
        • 事件中心命名空间:创建事件中心(如果还没有)。
        • 事件中心名称(可选):如果未指定名称,将为每个日志类别创建一个事件中心。 如果发送多个类别,请指定一个名称来限制创建的事件中心数。 有关详细信息,请参阅 Azure 事件中心配额和限制
        • 事件中心策略(可选):策略定义流式处理机制具有的权限。 请参阅事件中心功能
      • 存储:选择订阅、存储帐户和保留策略。 此屏幕截图显示存储帐户。

      • 合作伙伴集成:必须先将合作伙伴集成安装到你的订阅中。 配置选项因合作伙伴而异。

  4. 单击“保存” 。

片刻之后,新设置会显示在此资源的设置列表中,生成新的事件数据后,日志会立即流式传输到指定的目标。 事件在发出之后,可能需要过 15 分钟才会出现在 Log Analytics 工作区中。

查询日志

若要查询生成的日志,请执行以下操作:

  1. 在自动化帐户中,选择“监视”下的“日志”。

  2. 在“所有查询”下,选择“自动化作业”。

    显示如何导航以选择“自动化作业”的屏幕截图。

  3. 选择要执行的查询之一,然后单击“运行”。

  4. 若要执行自定义查询,请关闭“查询”窗口并在新的查询窗口中粘贴你的自定义查询,然后单击“运行”。

    查询的输出显示在“结果”窗格中。

  5. 单击“新建警报规则”,为此查询配置 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。

注意

确保凭据不会发送到作业流。 服务会在诊断日志中显示作业流之前删除凭据。

审核事件

properties 说明
TenantID 用于为调用方标识租户的 GUID。
TimeGenerated (UTC) 执行 runbook 作业的日期和时间。
类别 AuditEvent
ResourceGroup 自动化帐户的资源组名称。
订阅 ID 自动化帐户的 Azure 订阅 GUID。
ResourceProvider MICROSOFT.AUTOMATION
资源 自动化帐户名称
ResourceType AUTOMATIONACCOUNTS
OperationName 可能的值为 Update、Create、Delete。
ResultType runbook 作业的状态。 可能的值为 Completed。
CorrelationId runbook 作业的关联 GUID。
ResultDescription runbook 作业结果状态。 可能的值为 Update、Create、Delete。
Tenant_g 用于为调用方标识租户的 GUID。
SourceSystem Azure Monitor 日志用来收集数据的系统。 对于 Azure 诊断,值始终为 Azure。
clientInfo_IpAddress_s {已清理}
clientInfo_PrincipalName_s {已清理}
clientInfo_TenantId_g 客户端的租户 ID。
clientInfo_Issuer_s
clientInfo_ObjectId_g 客户端的对象 ID。
clientInfo_AppId_g 客户端的 AppID。
clientInfo_ClientRequestId_g 客户端的 RequestID。
targetResources_Resource_s 帐户、作业、凭据、连接、变量、Runbook。
类型 AzureDiagnostics
_ResourceId runbook 的 Azure 自动化帐户资源 ID。

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

现在,你已开始将自动化作业流和日志发送到 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 的单个作业的所有流:

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

查找那些报告自动化作业中的错误的日志。

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

查找已完成的 Azure 自动化作业

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

查找已失败、已暂停或已停止的 Azure 自动化作业

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 作业失败或暂停时发送电子邮件

以下步骤说明如何在 Azure Monitor 中设置电子邮件警报,以便在 runbook 作业出现问题时进行通知。

若要创建警报规则,请针对应调用警报的 runbook 作业记录创建日志搜索,如查询日志所述。 单击“+新建警报规则”以配置警报规则。

  1. 在自动化帐户中,选择“监视”下的“日志”。

  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 中的日志警报

Azure 自动化诊断审核日志

现在,还可以将审核日志发送到 Azure Monitor 工作区。 这使得企业可以监视关键的自动化帐户活动,以保证安全性和合规性。 通过 Azure 诊断设置启用时,可以收集有关自动化 runbook、作业和自动化资产(如连接、凭据、变量和证书)的创建、更新和删除操作的遥测数据。 还可以根据安全监视要求中的审核日志条件配置警报

活动日志与审核日志的差异

活动日志是 Azure 中的一种平台日志,可用于深入了解订阅级别事件。 自动化帐户的活动日志包括有关自动化资源的修改、创建或删除时间的信息。 但是,该日志不会捕获资源的名称或 ID。

自动化帐户的审核日志捕获资源(例如自动化变量、凭据、连接等)的名称和 ID 以及针对资源执行的操作的类型。Azure 自动化会清理某些详细信息,例如符合 GDPR 规范的客户端 IP 数据。

活动日志会显示客户端 IP 等详细信息,因为活动日志是平台日志,提供 Azure 资源的详细诊断和审核信息。 它们是为 ARM 中发生的活动自动生成的,将会推送到活动日志资源提供程序。 由于活动日志是 Azure 监视的一部分,因此它会显示一些可用于深入了解客户端活动的客户端数据。  

审核日志的示例查询

用于查看自动化资源审核日志的查询

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 服务的 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 格式

后续步骤