监视自动化任务

已完成

自动执行任务后,请务必对其进行监视,确保它们正常工作。 这样,便可以最大程度地提高服务的性能和可用性,并主动识别出问题。

监视 Runbook

runbook 本质上应该是模块化的,具有可以轻松重用和重启的逻辑。 监视 runbook 中的进度可确保在出现问题时正确执行 runbook 的逻辑。

可以使用数据库、存储帐户或共享文件来监视 runbook 的进度。 确保 runbook 在启动下一个操作之前,先检查已执行的最后一个操作。 根据检查结果,可跳过逻辑,或者逻辑在 runbook 中继续执行特定任务。

可以在 Azure 门户中监视 runbook 的执行情况。 在自动化帐户的主边栏选项卡的“流程自动化”部分中,选择“作业”

Screenshot of the job execution history page on Azure portal.

如上图所示,突出显示的 runbook 已完成。 若要调查详细信息和状态,请选择相应的作业。

若要详细了解如何排查 runbook 的问题,请参阅排查 runbook 问题

警报

你还可以创建指标警报来监视 runbook 的执行情况。 使用警报,可以定义条件,在满足这些条件时进行监视和执行操作。

Screenshot of the Create alert rule option for Azure Automation.

当你选择“创建预警规则”时,屏幕右侧将打开“选择信号”滑出对话框。 接下来,需要选择一个最适合你的场景的信号。 对于本示例,请选择“作业总数”

Screenshot of the select a signal page for an alert.

在“配置信号逻辑”滑出对话框中,为“阈值”属性选择“静态”。 然后,将“运算符”属性设置为“大于”,并将“聚合”类型设置为“总计”。 然后在“阈值”中输入值 10

Screenshot of the Configure signal logic slide out for an Azure Automation alert.

或者,可以指定维度。 例如,可以定义预警规则将仅针对特定 runbook 和状态触发。 如果没有指定维度,则不会应用任何筛选器。

Screenshot of how to add a custom dimension for an alert logic on Azure Automation.

接下来,请确保配置操作组。 操作组是一个操作集合,你可以在多个警报中使用它。 其中包括电子邮件通知、runbook 和 Webhook 等。

注意

可以将 Azure 自动化与 Azure 警报操作组结合起来,在引发警报时启动自动化 runbook。

活动日志

Azure 自动化流程将执行 runbook,并在活动日志中收集详细信息。

Screenshot of the activity log for an Azure Automation account.

在上图中,可以检索 runbook 详细信息,例如启动 runbook 的人员或帐户。

作为替代方法,以下 PowerShell 示例显示了运行指定 runbook 的最后一名用户。

$rgName = 'MyResourceGroup'
$accountName = 'MyAutomationAccount'
$runbookName = 'MyRunbook'
$startTime = (Get-Date).AddDays(-1)

$params = @{
    ResourceGroupName = $rgName
    StartTime         = $startTime
}
$JobActivityLogs = (Get-AzLog @params).Where( { $_.Authorization.Action -eq 'Microsoft.Automation/automationAccounts/jobs/write' })

$JobInfo = @{}
foreach ($log in $JobActivityLogs) {
    # Get job resource
    $JobResource = Get-AzResource -ResourceId $log.ResourceId

    if ($null -eq $JobInfo[$log.SubmissionTimestamp] -and $JobResource.Properties.Runbook.Name -eq $runbookName) {
        # Get runbook
        $jobParams = @{
            ResourceGroupName     = $rgName
            AutomationAccountName = $accountName
            Id                    = $JobResource.Properties.JobId
        }
        $Runbook = Get-AzAutomationJob @jobParams | Where-Object RunbookName -EQ $runbookName

        # Add job information to hashtable
        $JobInfo.Add($log.SubmissionTimestamp, @($Runbook.RunbookName, $Log.Caller, $JobResource.Properties.jobId))
    }
}
$JobInfo.GetEnumerator() | Sort-Object Key -Descending | Select-Object -First 1

Log Analytics

Azure 自动化可将 Runbook 作业状态和作业流发送到 Log Analytics 工作区。 此方法不需要工作区链接,并且是独立的。

使用与自动化帐户集成的 Azure Monitor 日志,可以执行以下操作:

  • 查看自动化作业的状态
  • 编写跨作业工作流的高级查询
  • 基于 runbook 作业状态触发电子邮件或警报
  • 关联来自多个自动化作业的数据

若要运行查询,请从自动化帐户主边栏选项卡的“监视”部分中选择“日志”

Azure 门户提供了一些查询模板,方便你开始使用。 正如我们在下面看到的,我们使用了一个现有的 Kusto 查询模板来列出自动化帐户中所有已完成的作业。

Screenshot of the Log Analytics workspace runbook query showing a list all completed jobs in the automation account.

将 Azure 自动化诊断日志转发到 Log Analytics 工作区是一项重要的功能,有助于监视 runbook 的运行状况。

注意

在开始使用 Log Analytics 查询自动化作业数据之前,必须为自动化帐户配置诊断设置

监视弹性作业(预览版)

使用弹性作业时,将记录作业执行情况,并在出现任何失败时自动重试。 自动重试功能为暂时性故障提供了更具弹性的服务。

你可以通过 Azure 门户、PowerShell 和 T-SQL 监视弹性作业执行情况。

Azure 门户

若要查看作业执行的历史记录,请选择弹性作业代理主边栏选项卡中的“概述”

Screenshot of the Overview section for elastic jobs where you can monitor job execution.

PowerShell

以下代码片段获取了作业执行情况详细信息。

# get the latest 5 executions run
$jobAgent | Get-AzSqlElasticJobExecution -Count 5

# get the job step execution details
$jobExecution | Get-AzSqlElasticJobStepExecution

# get the job target execution details
$jobExecution | Get-AzSqlElasticJobTargetExecution -Count 2

T-SQL

以下示例演示如何查看所有作业的执行状态详细信息。 创建作业代理并连接到作业数据库,然后运行以下命令:

--View all execution status for all jobs
SELECT * 
FROM jobs.job_executions
ORDER BY start_time DESC;

--View all execution statuses for job named 'MyJob'
SELECT * FROM jobs.job_executions
WHERE job_name = 'MyJob'
ORDER BY start_time DESC;

-- View all active executions
SELECT * 
FROM jobs.job_executions
WHERE is_active = 1
ORDER BY start_time DESC;