你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

监视 Azure Batch

本文介绍:

  • 可以为此服务收集的监视数据的类型。
  • 分析这些数据的方法。

注意

如果已熟悉此服务和/或 Azure Monitor,并且只想了解如何分析监视数据,请参阅本文末尾附近的“分析”部分。

如果具有依赖于 Azure 资源的关键应用程序和业务流程,则需要监视并获取系统的警报。 Azure Monitor 服务会从系统的每个组件收集并聚合指标和日志。 Azure Monitor 提供可用性、性能和复原能力视图,并在出现问题时向你发送通知。 可以使用 Azure 门户、PowerShell、Azure CLI、REST API 或客户端库来设置和查看监视数据。

资源类型

Azure 使用资源类型和 ID 的概念来标识订阅中的所有内容。 同样的,Azure Monitor 根据资源类型(也称为“命名空间”)将核心监视数据组织为指标和日志。 不同的指标和日志可用于不同的资源类型。 服务可能与多种资源类型关联。

资源类型也是 Azure 中运行的每个资源的资源 ID 的一部分。 例如,虚拟机的一种资源类型是 Microsoft.Compute/virtualMachines。 有关服务及其关联资源类型的列表,请参阅资源提供程序

有关 Batch 的资源类型的详细信息,请参阅 Batch 监视数据参考

数据存储

对于 Azure Monitor:

  • 指标数据存储在 Azure Monitor 指标数据库中。
  • 日志数据存储在 Azure Monitor 日志存储中。 Log Analytics 是 Azure 门户中可以查询此存储的工具。
  • Azure 活动日志是一个单独的存储区,在 Azure 门户中有自己的接口。

可以选择将指标和活动日志数据路由到 Azure Monitor 日志存储。 然后,可以使用 Log Analytics 查询数据并将其与其他日志数据关联。

许多服务可以使用诊断设置将指标和日志数据发送到 Azure Monitor 外部的其他存储位置。 示例包括 Azure 存储、托管的合作伙伴系统使用事件中心的非 Azure 合作伙伴系统

有关 Azure Monitor 如何存储数据的详细信息,请参阅 Azure Monitor 数据平台

访问存储中的诊断日志

如果在存储帐户中存档 Batch 诊断日志,则在发生相关的事件后,会立即在存储帐户中创建一个存储容器。 根据以下命名模式创建 Blob:

insights-{log category name}/resourceId=/SUBSCRIPTIONS/{subscription ID}/
RESOURCEGROUPS/{resource group name}/PROVIDERS/MICROSOFT.BATCH/
BATCHACCOUNTS/{Batch account name}/y={four-digit numeric year}/
m={two-digit numeric month}/d={two-digit numeric day}/
h={two-digit 24-hour clock hour}/m=00/PT1H.json

例如:

insights-metrics-pt1m/resourceId=/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/
RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.BATCH/
BATCHACCOUNTS/MYBATCHACCOUNT/y=2018/m=03/d=05/h=22/m=00/PT1H.json

每个 PT1H.json Blob 文件包含 JSON 格式的事件,这些事件是在 Blob URL 中指定的小时(例如 h=12)内发生的。 在当前的小时内发生的事件将附加到 PT1H.json 文件。 分钟值 (m=00) 始终为 00,因为诊断日志事件按小时细分成单个 blob。 所有时间均是 UTC 时间。

下面这个示例显示 PT1H.json 日志文件中的一个 PoolResizeCompleteEvent 条目。 该条目包括专用和低优先级节点的当前和目标数量以及操作的开始和结束时间的相关信息。

{ "Tenant": "65298bc2729a4c93b11c00ad7e660501", "time": "2019-08-22T20:59:13.5698778Z", "resourceId": "/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.BATCH/BATCHACCOUNTS/MYBATCHACCOUNT/", "category": "ServiceLog", "operationName": "PoolResizeCompleteEvent", "operationVersion": "2017-06-01", "properties": {"id":"MYPOOLID","nodeDeallocationOption":"Requeue","currentDedicatedNodes":10,"targetDedicatedNodes":100,"currentLowPriorityNodes":0,"targetLowPriorityNodes":0,"enableAutoScale":false,"isAutoPool":false,"startTime":"2019-08-22 20:50:59.522","endTime":"2019-08-22 20:59:12.489","resultCode":"Success","resultMessage":"The operation succeeded"}}

若要以编程方式访问存储帐户中的日志,请使用存储 API

Azure Monitor 平台指标

Azure Monitor 为大多数服务提供平台指标。 这些指标是:

  • 针对每个命名空间单独定义。
  • 存储在 Azure Monitor 时序指标数据库中。
  • 是轻型数据,并且能够支持准实时警报。
  • 用于跟踪资源随时间推移的性能变化。

集合:Azure Monitor 会自动收集平台指标。 不需要任何配置。

路由:通常还可将平台指标路由到 Azure Monitor 日志/Log Analytics,从而可以使用其他日志数据对其进行查询。 有关详细信息,请参阅指标诊断设置。 有关如何为服务配置诊断设置,请参阅在 Azure Monitor 中创建诊断设置

有关可以为 Azure Monitor 中的所有资源收集的所有指标的列表,请参阅 Azure Monitor 中支持的指标

Batch 帐户中的指标示例包括“池创建事件”、“低优先级节点计数”和“任务完成事件”。 这些指标可帮助识别趋势,并可用于数据分析。

注意

过去 3 分钟内发出的指标可能仍然正在聚合,因此在此时间范围内,值可能会因记录不全而少报。 指标不保证送达,并且可能会受到乱序传递、数据丢失和/或数据重复的影响。

有关 Batch 可用指标的完整列表,请参阅 Batch 监视数据参考

Azure Monitor 资源日志

借助资源日志,可以深入了解 Azure 资源已执行的操作。 日志是自动生成的,但必须将日志路由到 Azure Monitor 日志以保存或查询它们。 日志按类别进行组织。 给定的命名空间可能具有多个资源日志类别。

收集:在创建诊断设置并将日志路由到一个或多个位置之前,不会收集和存储资源日志。 创建诊断设置时,请指定要收集的日志类别。 可以通过多种方式创建和维护诊断设置,包括 Azure 门户、编程方式以及通过 Azure Policy。

路由:建议的默认设置是将资源日志路由到 Azure Monitor 日志,以便可以使用其他日志数据查询它们。 也可使用其他位置(例如 Azure 存储、Azure 事件中心和某些 Microsoft 监视合作伙伴)。 有关详细信息,请参阅 Azure 资源日志资源日志目标

有关收集、存储和路由资源日志的详细信息,请参阅 Azure Monitor 中的诊断设置

有关 Azure Monitor 中所有可用资源日志类别的列表,请参阅 Azure Monitor 中支持的资源日志

Azure Monitor 中的所有资源日志都具有相同的标头字段,后跟特定于服务的字段。 Azure Monitor 资源日志架构概述了常见架构。

有关可用的资源日志类别、其关联的 Log Analytics 表以及 Batch 的日志架构,请参阅 Batch 监视数据参考

必须为要监视的每个 Batch 帐户显式启用诊断设置。

对于 Batch 服务,可以收集以下日志:

  • ServiceLog:在单个资源(例如池或任务)的生命周期内由 Batch 服务发出的事件
  • AllMetrics:Batch 帐户级别的指标。

以下屏幕截图显示了一个示例诊断设置,用于将 allLogsAllMetrics 发送到 Log Analytics 工作区。

显示示例的“诊断”设置页面的屏幕截图。

创建 Azure Batch 池时,可以在计算节点上安装以下任何与监视相关的扩展,以收集和分析数据:

有关不同扩展和代理及其收集的数据的比较,请参阅“比较代理”。

Azure 活动日志

活动日志包含订阅级事件,这些事件跟踪从资源外部看到的每个 Azure 资源的操作;例如,创建新资源或启动虚拟机。

收集:活动日志事件会自动生成并收集在单独的存储中,以便在 Azure 门户中查看。

路由:可将活动日志数据发送到 Azure Monitor 日志,以便可以将它们与其他日志数据一起进行分析。 也可使用其他位置(例如 Azure 存储、Azure 事件中心和某些 Microsoft 监视合作伙伴)。 有关如何路由活动日志的详细信息,请参阅 Azure 活动日志概述

对于 Batch 帐户,具体而言,活动日志收集与帐户创建和删除以及密钥管理相关的事件。

分析监视数据

有许多工具可用于分析监视数据。

Azure Monitor 工具

Azure Monitor 支持以下基本工具:

支持更复杂可视化效果的工具包括:

  • 仪表板,它支持将不同类型的数据合并到 Azure 门户的单个窗格中。
  • 工作簿,它们是可在 Azure 门户中创建的可自定义报表。 工作簿可以包括文本、指标和日志查询。
  • Grafana,它是一个适用于操作仪表板的开放平台工具。 可以使用 Grafana 创建包含来自除 Azure Monitor 以外多个源的数据的仪表板。
  • Power BI,它是一项业务分析服务,可提供跨各种数据源的交互式可视化效果。 可将 Power BI 配置为自动从 Azure Monitor 导入日志数据,以利用这些可视化效果。

在分析基于计数的 Batch 指标(如“专用核心计数”或“低优先级节点计数”),请使用“Avg”聚合。 对于基于事件的指标(如“池调整大小完成事件数”),请使用“计数”聚合。 避免使用 Sum 聚合,它会将图表周期内收到的所有数据点的值相加。

Azure Monitor 导出工具

可以使用以下方法将数据从 Azure Monitor 中提取到其他工具中:

要开始使用适用于 Azure Monitor 的 REST API,请参阅 Azure 监视 REST API 演练

Kusto 查询

可使用 Kusto 查询语言 (KQL) 来分析 Azure Monitor 日志/Log Analytics 存储中的监视数据。

重要

在门户的服务菜单中选择“日志”时,会打开 Log Analytics,并且其查询范围设置为当前服务。 此范围意味着日志查询将仅包含来自该资源类型的数据。 如果希望运行的查询包含来自其他 Azure 服务的数据,请从“Azure Monitor”菜单中选择“日志”。 有关详细信息,请参阅 Azure Monitor Log Analytics 中的日志查询范围和时间范围

有关任何服务的常见查询的列表,请参阅 Log Analytics 查询界面

示例查询

下面是 Batch 的一些示例日志查询:

池大小:按池和结果代码列出重设大小时间(成功或失败):

AzureDiagnostics
| where OperationName=="PoolResizeCompleteEvent"
| summarize operationTimes=make_list(startTime_s) by poolName=id_s, resultCode=resultCode_s

任务工期:以秒为单位提供任务运行时间,从任务开始到任务完成。

AzureDiagnostics
| where OperationName=="TaskCompleteEvent"
| extend taskId=id_s, ElapsedTime=datetime_diff('second', executionInfo_endTime_t, executionInfo_startTime_t) // For longer running tasks, consider changing 'second' to 'minute' or 'hour'
| summarize taskList=make_list(taskId) by ElapsedTime

每个作业的失败任务数:按父作业列出失败的任务。

AzureDiagnostics
| where OperationName=="TaskFailEvent"
| summarize failedTaskList=make_list(id_s) by jobId=jobId_s, ResourceId

警报

在监视数据中发现特定情况时,Azure Monitor 警报会主动向你发出通知。 有了警报,你就可以在客户注意到你的系统中的问题之前找出和解决问题。 有关详细信息,请参阅 Azure Monitor 警报

Azure 资源的常见警报具有许多来源。 有关 Azure 资源常见警报的示例,请参阅示例日志警报查询Azure Monitor 基线警报 (AMBA) 站点提供了实现重要平台指标警报、仪表板和指南的半自动化方法。 该站点适用于持续扩展的 Azure 服务子集,包括属于 Azure 登陆区域 (ALZ) 的所有服务。

通用警报模式对 Azure Monitor 警报通知的使用体验进行了标准化。 有关详细信息,请参阅常见警报架构

警报类型

可以针对 Azure Monitor 数据平台中的任何指标或日志数据源发出警报。 警报具有许多不同类型,具体取决于要监视的服务以及要收集的监视数据。 不同类型的警报各有优缺点。 有关详细信息,请参阅选择正确的监视警报类型

以下列表介绍了可以创建的 Azure Monitor 警报类型:

  • 指标警报会定期评估资源指标。 指标可以是平台指标、自定义指标、Azure Monitor 中的日志转换为的指标或 Application Insights 指标。 指标警报还可以应用多个条件和动态阈值。
  • 日志警报支持用户使用 Log Analytics 查询按照预定义的频率评估资源日志。
  • 当发生匹配所定义条件的新活动日志事件时,会触发活动日志警报。 资源运行状况警报和服务运行状况警报是报告服务和资源运行状况的活动日志警报。

某些 Azure 服务还支持智能检测警报Prometheus 警报建议的警报规则

对于某些服务,你可以通过将相同的指标警报规则应用于同一 Azure 区域中的多个相同类型资源,进行大规模的监视。 将为每个受监视的资源发送单独通知。 有关支持的 Azure 服务和云,请参阅使用一个警报规则监视多个资源

注意

如果要创建或运行在服务中运行的应用程序,Azure Monitor Application Insights 提供其他类型的警报。

Batch 警报规则

由于指标传递可能会出现不一致,例如乱序传递、数据丢失或重复,因此应避免在单个数据点上触发的警报。 相反,使用阈值来考虑一段时间内的这些不一致。

例如,你可能想要配置一个当低优先级核心计数降到特定级别时触发的指标警报。 然后,可以使用此警报来调整池的构成。 为了获得最佳结果,请设置 10 分钟或以上的周期,如果平均低优先级核心计数在整个周期内低于阈值,则会触发警报。 可以利用这段时间来聚合指标,以便获得更准确的结果。

下表列出了 Batch 的一些警报规则触发器。 这些警报规则仅为示例。 可以为 Batch 监视数据参考中列出的任何指标、日志条目或活动日志条目设置警报。

警报类型 条件 说明
指标 不可用的节点计数 每当不可用的节点计数大于 0 时
指标 任务失败事件数 每当任务失败事件总数大于动态阈值时

顾问建议

对于某些服务,如果在资源操作期间出现严重情况或即将发生变化,则门户中的服务“概述”页面上会显示一个警报。 可以在左侧菜单“监视”下的“顾问建议”中找到警报的详细信息和建议修补程序。 在正常操作期间,不会显示任何顾问建议。

有关 Azure 顾问的详细信息,请参阅 Azure 顾问概述

其他 Batch 监视选项

Batch Explorer 是一个功能丰富的免费独立客户端工具,可帮助创建、调试和监视 Azure Batch 应用程序。 可以将 Azure Batch Insights 与 Batch Explorer 配合使用,获取 Batch 节点的系统统计信息,例如虚拟机 (VM) 性能计数器。

在 Batch 应用程序中,可以使用 Batch .NET 库来监视或查询资源(包括作业、任务、节点和池)的状态。 例如:

可以使用 Batch API 为 Batch 作业、任务、计算节点和其他资源创建列表查询。 若要详细了解如何筛选列表查询,请参阅“创建查询以高效列出 Batch 资源的查询”。

或者,可以使用“获取任务计数”和“列表池节点计数”操作来获取 Batch 任务和计算节点的计数,而不是返回有关大型任务或节点的详细信息的耗时列表查询。 有关详细信息,请参阅“按状态对任务和节点进行计数来监视 Batch 解决方案”。

可以将 Application Insights 与 Azure Batch 应用程序集成,以使用自定义指标和跟踪检测代码。 有关如何将 Application Insights 添加到 Batch .NET 解决方案、检测应用程序代码、在 Azure 门户中监视应用程序,以及生成自定义仪表板的详细演练,请参阅“使用 Application Insights 监视和调试 Azure Batch .NET 应用程序”,以及随附的代码示例