在 Azure 逻辑应用中启用和查看 Application Insights 中标准工作流的增强遥测数据
适用于:Azure 逻辑应用(标准)
在 Application Insights 中,你可以为标准逻辑应用资源启用增强遥测收集,然后在工作流完成运行后查看收集的数据。 此功能为你提供了一种简化体验,可以发现有关工作流的见解,并对数据源的筛选事件进行更多控制,从而帮助你降低存储成本。 这些改进侧重于实时性能指标,通过指标可以了解系统运行状况和行为。 这可帮助你更早地主动检测和解决问题。
当逻辑应用连接到 Application Insights 时,可以使用实时指标流通过 Azure 门户近实时地查看日志数据和其他指标。 也可以借助可视化效果来标出传入请求、传出请求、总体运行状况和对跟踪级别诊断表的访问权限。
以下列表描述了一些示例遥测改进:
- 触发器和操作事件现在包括触发器或操作类型以及 API 名称,可用于查询特定连接器的使用。
- 更易于跟踪重试事件。
- 捕获触发器和操作失败异常。
- 更好地控制对非工作流相关事件的筛选。
- 高级筛选可让你更好地控制事件的发出方式,包括触发器和操作。
本指南介绍如何在 Application Insights 中为标准逻辑应用开启增强型遥测收集。
先决条件
Azure 帐户和订阅。 如果没有订阅,可以注册 Azure 帐户。
Application Insights 实例。 可以在创建标准逻辑应用时或在逻辑应用部署之后提前创建此资源。
Azure 门户或 Visual Studio Code 中的标准逻辑应用和工作流。
逻辑应用资源或项目必须使用默认启用的 Azure Functions v4 运行时。
逻辑应用必须启用 Application Insights 来进行诊断日志记录和跟踪。 你可以在创建逻辑应用时或在部署后执行此操作。
在 Application Insights 中启用增强型遥测
在 Azure 门户中,打开你的标准逻辑应用资源。
在逻辑应用菜单上的“开发工具”下,选择“高级工具”。 在“高级工具”页上,选择“开始”,这将打开 Kudu 工具。
在“Kudu”页面上,打开“调试控制台”菜单,然后选择“CMD”。 在文件夹目录表中,浏览到以下文件并选择编辑:site/wwwroot/host.json
在 host.json 中,添加以下 JSON 代码:
{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows", "version": "[1, 2.00]" }, "extensions": { "workflow": { "Settings": { "Runtime.ApplicationInsightTelemetryVersion": "v2" } } } }
此配置将启用默认级别的详细程度。 有关其他选项,请参阅在源应用筛选。
打开 Application Insights
工作流完成运行并经过几分钟后,打开 Application Insights 资源。
在 Azure 门户中逻辑应用菜单的“设置”下,选择“Application Insights”。
在 Application Insights 资源菜单上的“监视”下,选择“日志”。
在 Application Insights 中查看增强日志
以下部分介绍 Application Insights 中的表,你可以在其中查找和查看工作流运行生成的增强遥测数据。
表名称 | 说明 |
---|---|
请求 | 有关工作流运行中以下事件的详细信息: - 触发器和操作事件 - 重试尝试 - 连接器使用 |
跟踪 | 有关工作流运行中以下事件的详细信息: - 端口开始和结束事件 - 批处理发送和接收事件 |
异常 | 有关工作流运行中以下异常事件的详细信息 |
依赖项 | 有关工作流运行中以下依赖项事件的详细信息 |
请求表
请求表包含跟踪有关标准工作流运行中以下事件的数据的字段:
- 触发器和操作事件
- 重试次数
- 连接器使用
为了展示数据如何进入这些字段,假设你有以下示例标准工作流,该工作流以请求触发器开始,后跟撰写操作和响应操作。
触发器的设置有一个名为“自定义跟踪 ID”的参数。参数值设置为一个表达式,该表达式从传入消息的正文中提取 orderId 属性值:
接下来,工作流的 Compose 操作设置添加了一个名为 solutionName 的跟踪属性。 属性值设置为逻辑应用资源的名称。
撰写操作后跟响应操作,后者会将响应返回给调用方。
以下列表包含可针对请求表创建和运行的示例查询:
任务 | 步骤 |
---|---|
查看所有触发器和操作事件 | 查询所有触发器和操作事件 |
仅查看触发器和操作事件 | 仅查询触发器和操作事件 |
查看特定操作类型的触发或操作事件 | 按操作类型查询触发或操作事件 |
查看具有特定工作流运行 ID 的触发器和操作事件 | 按工作流运行 ID 查询触发器和操作事件 |
使用特定客户端跟踪 ID 查看触发器和操作事件 | 按客户端跟踪 ID 查询触发器和操作事件 |
查看具有特定解决方案名称的触发器和操作事件 | 按解决方案名称查询触发器和操作事件 |
查看带有重试尝试的触发器和操作事件 | 查询重试尝试的触发器和操作事件 |
查看带有连接器使用情况的触发器和操作事件 | 查询连接器使用情况的触发器和操作事件 |
查询所有触发器和操作事件
工作流运行几分钟后,你可以针对请求表创建查询以查看所有操作事件。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
要查看所有触发器和操作事件,请创建并运行以下查询:
requests | sort by timestamp desc | take 10
以下示例显示“结果”选项卡,其中每行中均包含带有标记的列和数据:
列 说明 示例 name 工作流操作名称 对于此示例,行显示手动(请求触发器)、撰写和响应。 success 操作执行状态 对于此示例,所有行均显示 True,表示执行成功。 如果发生错误,则该值为 False。 resultCode 操作执行状态代码 对于本示例,所有行均显示“Succeeded”(200)。 duration 操作执行持续时间 每个操作各不相同。 要查看特定操作的详细信息,请展开触发器或操作对应的行:
以下示例显示了请求触发器的扩展详细信息:
properties 说明 示例 类别 操作类别,始终是 Workflow.Operations.Triggers 或 Workflow.Operations.Actions,基于操作 Workflow.Operations.Triggers. clientTrackingId 自定义跟踪 ID(如果已指定) 123456 runId 工作流运行实例的 ID 08585358375819913417237801890CU00 triggerName 触发器名称 手动 workflowId 运行触发器的工作流的 ID c7711d107e6647179c2e15fe2c2720ce workflowName 运行触发器的工作流的名称 Request-Response-Workflow operation_Name 运行触发器的操作的名称。 在本例中,此名称与工作流名称相同。 Request-Response-Workflow operation_Id 刚刚运行的组件或工作流的 ID。 此 ID 与工作流运行实例的 runId 值相同。 如果存在异常或依赖项,该值超越表,这样就可以将此触发器记录链接到这些异常或依赖项。 08585358375819913417237801890CU00 operation_ParentId 调用触发器的工作流的可链接 ID f95138daff8ab129 以下示例显示撰写操作的扩展详细信息:
properties 说明 示例 类别 操作类别,始终是 Workflow.Operations.Triggers 或 Workflow.Operations.Actions,基于操作 Workflow.Operations.Actions clientTrackingId 自定义跟踪 ID(如果已指定) 123456 actionName 操作名称 Compose runId 工作流运行实例的 ID 08585358375819913417237801890CU00 workflowId 运行操作的工作流的 ID c7711d107e6647179c2e15fe2c2720ce workflowName 运行操作的工作流的名称 Request-Response-Workflow solutionName 已跟踪的属性名称(如果已指定) LA-AppInsights operation_Name 运行操作的操作的名称。 在本例中,此名称与工作流名称相同。 Request-Response-Workflow operation_Id 刚刚运行的组件或工作流的 ID。 此 ID 与工作流运行实例的 runId 值相同。 如果存在异常或依赖项,该值超越表,这样就可以将此操作记录链接到这些异常或依赖项。 08585358375819913417237801890CU00 operation_ParentId 调用操作的工作流的可链接 ID f95138daff8ab129
仅查询触发器和操作事件
可以根据操作类别和工作流名称对请求表创建查询以查看操作事件的子集。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
若要查看特定工作流中的所有触发器事件,请创建并运行一个查询,将 customDimensions.Category 属性值设置为 Workflow.Operations.Triggers,并将 operation_Name 设置为工作流名称,例如:
requests | where customDimensions.Category == "Workflow.Operations.Triggers" and operation_Name == "Request-Response-Workflow"
若要查看特定工作流中的所有操作事件,请创建一个查询,将 customDimensions.Category 属性值设置为 Workflow.Operations.Actions,并将 operation_Name 设置为工作流名称,例如:
requests | where customDimensions.Category == "Workflow.Operations.Actions" and operation_Name == "Request-Response-Workflow"
按操作类型查询触发或操作事件
可以针对请求表创建查询,以查看特定触发器或操作类型的事件。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
若要查看具有特定触发器类型的所有操作事件,请创建并运行一个查询,将 customDimensions.triggerType 值设置为所需的触发器类型,例如:
requests | where customDimensions.triggerType == "Request"
若要查看具有特定操作类型的所有操作事件,请创建并运行一个查询,并将 customDimensions.actionType 值设置为所需的操作类型,例如:
requests | where customDimensions.actionType == "Compose"
按工作流运行 ID 查询触发器和操作事件
可以根据工作流运行 ID 对请求表创建查询以查看操作事件的子集。 此工作流运行 ID 与可以在工作流的运行历史记录中找到的 ID 相同。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
若要查看具有特定工作流运行 ID 的所有操作事件,请创建并运行一个查询,并将 operation_Id 值设置为工作流运行 ID,例如:
requests | where operation_Id == "08585287554177334956853859655CU00"
按客户端跟踪 ID 查询触发器和操作事件
可以根据工作流名称和客户端跟踪 ID 针对请求表创建查询以查看操作事件的子集。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
若要查看特定工作流中具有特定客户端跟踪 ID 的所有操作事件,请创建并运行一个查询,将 operation_Name 值设置为工作流名称,并将 clientTrackingId 属性值设置为所需的值,例如:
requests | where operation_Name == "Request-Response-Workflow" | extend correlation = todynamic(tostring(customDimensions.correlation)) | where correlation.clientTrackingId == "123456"
按解决方案名称查询触发器和操作事件
可以根据工作流名称和解决方案名称对请求表创建查询以查看操作事件的子集。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
若要查看特定工作流中具有特定客户端跟踪 ID 的所有操作事件,请创建并运行一个查询,将 operation_Name 值设置为工作流名称,并将 solutionName 属性值设置为所需的值,例如:
requests | where operation_Name == "Request-Response-Workflow" and customDimensions has "trackedProperties" | extend trackedProperties = todynamic(tostring(customDimensions.trackedProperties)) | where trackedProperties.solutionName == "LA-AppInsights"
重试次数
为了显示此数据如何进入请求表,以下示例标准工作流使用调用无法解析的 URL 的 HTTP 操作。 该工作流还具有重试策略,该策略设置为固定间隔,重试 3 次,每 60 秒重试一次。
查询重试尝试的触发器和操作事件
可以针对请求表创建查询,以查看带有重试尝试的操作事件的子集。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
若要仅查看具有重试历史记录的触发器和操作事件,请在 Application Insights 中创建并运行以下查询:
requests | extend retryHistory = tostring(tostring(customDimensions.retryHistory)) | where isnotempty(retryHistory)
若要查看具有重试策略的特定操作的重试尝试,请展开该操作对应的行。
以下示例显示 HTTP 操作的扩展详细信息:
success 和 resultCode 属性值指示 HTTP 操作失败。 除了查询所有触发器和操作事件的请求表中描述的属性之外,该记录还包含以下信息,其中包括三次重试尝试:
properties 说明 示例 retryHistory 一次或多次重试尝试的历史记录详细信息 code 具体某次重试尝试的错误类型 error 有关发生的特定错误的详细信息
查询连接器使用情况的触发器和操作事件
可以根据特定的连接器使用情况对请求表创建查询以查看操作事件的子集。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
若要查看使用特定连接器类型的所有触发事件,请使用以下属性和值创建并运行查询:
requests | where customDimensions.Category == "Workflow.Operations.Triggers" and customDimensions.triggerType =="ApiConnectionWebhook" and customDimensions.apiName =="commondataservice"
properties 示例值 customDimensions.Category Workflow.Operations.Triggers customDimensions.triggerType 操作类型,例如 ApiConnectionWebhook customDimensions.apiName JSON 格式的连接器 API 名称,例如 Microsoft Dataverse 连接器的 commondataservice 若要查看具有特定连接器使用情况的所有操作事件,请创建并运行查询,并将 customDimensions.Category 值设置为 Workflow.Operations.Actions,将 customDimensions.triggerType 值设置为操作类型,并将 customDimensions.apiName 设置为 JSON 格式的连接器 API 名称,例如:
properties 示例值 customDimensions.Category Workflow.Operations.Actions customDimensions.triggerType 操作类型,例如 ApiConnection customDimensions.apiName JSON 格式的连接器 API 名称,例如,office365 表示 Microsoft Office 365 Outlook 连接器 requests | where customDimensions.Category == "Workflow.Operations.Actions" and customDimensions.actionType == "ApiConnection" and customDimensions.apiName == "office365"
对于触发器和操作,Application Insights 会区分现有的连接类型。 根据连接是否具有 ApiConnection、ApiConnectionWebhook、内置基本类型(例如 Request)或基于内置服务提供者的 ServiceProvider 类型,可能会在 actionType 和 triggerType 字段中看到不同的值。。
跟踪表
跟踪表包含跟踪有关标准工作流运行中以下事件的数据的字段:
工作流开始和结束事件
由于可能存在长时间运行的工作流执行,此信息表示为两个不同的事件。
批量发送和接收事件
有关详细信息,请参阅在 Azure 逻辑应用(标准)中使用内置批量操作
以下列表包含你可以创建并针对 Traces 表运行的示例查询:
任务 | 步骤 |
---|---|
查看所有工作流运行中的开始和结束事件 | 查询所有工作流运行中的开始和结束事件 |
查看特定工作流运行中的开始和结束事件 | 查询工作流运行中的开始和结束事件 |
查看所有工作流运行中的批量发送和接收事件 | 查询所有工作流运行中的批量发送和批量接收事件 |
查询所有工作流运行中的开始和结束事件
可以针对 Traces 表创建查询,以查看所有工作流运行的所有开始和结束事件。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
创建并运行一个查询,并将 customDimensions.Category 值设置为 Workflow.Operations.Runs,例如:
traces | where customDimensions.Category == "Workflow.Operations.Runs"
查询特定工作流运行中的开始和结束事件
可以针对“跟踪”表创建查询以查看特定工作流运行的开始和结束事件。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
创建并运行查询,并将 customDimensions.Category 值设置为 Workflow.Operations.Runs,将 operation_Id 值设置为工作流运行 ID,例如:
traces | where customDimensions.Category == "Workflow.Operations.Runs" | and operation_Id == "08585287571846573488078100997CU00"
查询所有工作流运行中的批量发送和批量接收事件
可以针对跟踪表创建查询,以查看所有工作流运行中的批量发送和批量接收事件。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
创建并运行查询,并将 customDimensions.Category 值设置为 Workflow.Operations.Runs,将 operation_Id 值设置为工作流运行 ID,例如:
traces | where customDimensions.Category == "Workflow.Operations.Batch"
异常表
异常表包含跟踪有关标准工作流运行中异常事件的数据的字段。 为了展示数据如何进入这些字段,假设你有以下示例标准工作流,该工作流以请求触发器开始,后跟撰写操作和响应操作。 撰写操作使用将值除以零的表达式,这会生成异常:
查询所有工作流运行中的异常事件
可以针对异常表创建查询以查看所有工作流运行中的异常事件。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
若要查看所有异常事件,请在 Application Insights 中创建并运行以下查询:
exceptions | sort by timestamp desc
若要查看特定异常的详细信息,请展开该异常对应的行:
以下示例显示了撰写操作的展开异常以及有关异常的详细信息:
properties 说明 problemId 异常类型,或有关发生的异常的简短描述 outerMessage 有关异常的更详细描述 详细信息 有关异常的详细且最完整的信息 clientTrackingId 客户端跟踪 ID(如果已指定) workflowId 遇到异常的工作流的 ID workflowName 遇到异常的工作流的名称 runId 工作流运行实例的 ID actionName 因异常而失败的操作的名称 operation_Name 遇到异常的工作流的名称 operation_Id 刚刚运行的组件或工作流的 ID。 此 ID 与工作流运行实例的 runId 值相同。 此值超越表,因此你可以将此异常记录与工作流运行实例链接。 operation_ParentId 调用操作的工作流的 ID,你可以将其链接到请求表中的操作 ID 若要查看特定工作流的异常,请创建并运行以下查询:
exceptions | where operation_Name contains "Request-Response-Workflow-Exception"
依赖项表
依赖项表包含跟踪有关标准工作流运行中依赖项事件的数据的字段。 当一个资源调用另一资源并且这两个资源都使用 Application Insights 时,会发出这些事件。 Azure 逻辑应用的示例包括通过 HTTP、数据库或文件系统调用另一个服务的服务。 Application Insights 会测量依赖项调用的持续时间、这些调用是成功还是失败,以及依赖项名称等信息。 可以调查特定的依赖项调用,并将其与请求和异常相关联。
为了展示数据如何进入这些字段,假设你有以下示例标准父工作流,该工作流使用 HTTP 操作通过 HTTP 调用子工作流:
查询特定工作流中的依赖项事件
可以针对依赖项表创建查询以查看特定工作流运行中的依赖项事件。
如有必要,请选择你要查看的时间范围。 默认情况下,该值是最近 24 小时。
要查看父工作流和子工作流之间的依赖项事件,请创建并运行以下查询:
union requests, dependencies | where operation_Id contains "<runId>"
此查询使用并集运算符从请求表和依赖项表返回记录。 该查询还使用 operation_Id 属性值通过指定所需的工作流 runId 值来提供记录之间的链接,例如:
union requests, dependencies | where operation_Id contains "08585355753671110236506928546CU00"
以下示例显示指定工作流的依赖项事件,包括请求表中父工作流中的操作事件的记录,以及依赖项表中的依赖项记录:
对于操作事件记录,itemType 列将记录类型显示为请求。 对于依赖项记录,itemType 列指示记录类型为依赖项。
properties 说明 runId 工作流运行实例的 ID actionName 发生依赖项事件的操作的名称 operation_Id 指定工作流的 ID。 此 ID 与工作流运行实例的 runId 值相同。 此值超越表,因此你可以将此依赖项记录与工作流运行实例链接。 operation_ParentId 发生依赖事件的操作的 ID,该操作还会将操作事件记录和依赖项记录链接在一起
在 Application Insights 中使用应用程序映射时,还可以通过查询可视化从父工作流到子工作流的依赖项调用。 查询中的 operation_Id 值提供了使此可视化效果成为可能的链接。
若要打开应用程序地图,请在 Application Insights 资源菜单上的“调查”下,选择“应用程序地图”。
筛选事件
在 Application Insights 中,可以通过以下方式筛选事件:
按照前面部分所述创建并运行查询。
通过在发出事件之前指定要评估的条件,在源进行筛选。
通过在源应用筛选器,可以减少必要的存储量,从而降低运营成本。
在源应用筛选
在请求表或跟踪表中,记录有一个名为 customDimensions 的节点,其中包含类别属性。 例如,在请求表中,批量触发事件的请求记录类似于以下示例:
在请求表中,以下类别属性值有助于区分和关联不同的详细级别:
类别值 | 说明 |
---|---|
Workflow.Operations.Triggers | 标识触发事件的请求记录 |
Workflow.Operations.Actions | 标识操作事件的请求记录 |
对于每个类别值,你可以在逻辑应用资源或项目的 host.json 文件中独立设置详细级别。 例如,若要仅返回有错误的触发器或操作事件的记录,你可以在 host.json 文件中添加以下日志记录 JSON 对象,其中包含具有所需详细级别的 logLevel JSON 对象:
{
"logging": {
"logLevel": {
"Workflow.Operations.Actions": "Error",
"Workflow.Operations.Triggers": "Error"
}
}
}
对于跟踪表记录,以下示例显示了更改事件详细级别的方法:
{
"logging": {
"logLevel": {
"Workflow.Host": "Warning",
"Workflow.Jobs": "Warning",
"Workflow.Runtime": "Warning"
}
}
}
以下示例将日志的默认详细级别设置为“警告”,但将触发器、操作和工作流运行事件的详细级别保留为“信息”:
{
"logging": {
"logLevel": {
"default": "Warning",
"Workflow.Operations.Actions": "Information",
"Workflow.Operations.Runs": "Information",
"Workflow.Operations.Triggers": "Information"
}
}
}
如果未指定任何 logLevel 值,则默认详细级别为“信息”。 有关详细信息,请参阅配置日志级别。
在 Azure 门户中,打开你的标准逻辑应用资源。
在逻辑应用菜单上的“开发工具”下,选择“高级工具”。 在“高级工具”页上,选择“开始”,这将打开 Kudu 工具。
在“Kudu”页面上,打开“调试控制台”菜单,然后选择“CMD”。 在文件夹目录表中,浏览到以下文件并选择编辑:site/wwwroot/host.json
在 host.json 文件中,添加日志记录 JSON 对象,并将 logLevel 值设置为所需的详细级别:
{ "logging": { "logLevel": { "Workflow.Operations.Actions": "<verbosity-level>", "Workflow.Operations.Triggers": "<verbosity-level>" } } }
在 Application Insights 中查看工作流指标
通过 Application Insights 中的遥测增强功能,还可以在 Metrics 仪表板中获得工作流见解。
打开指标仪表板并设置基本筛选器
在 Azure 门户中,打开 Application Insights 资源(如果尚未打开)。
在 Application Insights 资源菜单上的“监视”下,选择“指标”。
从范围列表中,选择你的 Application Insights 实例。
从指标命名空间列表中,选择 workflow.operations。
从指标列表中,选择一个指标,例如“运行已完成”。
从聚合列表中选择一个类型,例如,“计数”或“平均”。
完成后,指标仪表板会显示一个图表,其中包含已完成工作流的执行情况。
基于特定工作流的筛选
在“指标”仪表板中启用多维指标时,可以定位 Application Insights 中捕获的总体事件的子集,并根据特定工作流筛选事件。
在 Application Insights 资源上,启用多维指标。
在 Application Insights 中,打开指标仪表板。
在图表工具栏上,选择添加筛选器。
从“属性”列表中,选择“工作流”。
从“运算符”列表中,选择等号 (=)。
从“值”列表中,选择所需的工作流。
查看“实时”日志数据和指标
启用 Application Insights 增强遥测后,可以在 Azure 门户中查看来自 Application Insights 实例的近实时日志数据和其他指标。 可以使用此可视化效果来绘制入站请求、出站请求和整体运行状况。 还可以获取用于跟踪级别诊断的表。
在 Azure 门户中,打开 Application Insights 资源(如果尚未打开)。
在 Application Insights 资源菜单上的“调查”下,选择“实时指标”。
实时指标页面显示日志数据和其他指标,例如:
有关详细信息,请参阅实时指标:以 1 秒的延迟进行监视和诊断。
注意
由于标准逻辑应用工作流基于 Azure Functions,因此实时指标支持这些逻辑应用工作流。
流式传输并查看应用程序日志文件的调试输出
启用 Application Insights 增强遥测后,可以在 Azure 门户中流式传输应用程序日志文件的详细调试信息。 此信息相当于在本地 Visual Studio Code 环境中调试工作流时生成的输出。
在 Azure 门户中,打开你的标准逻辑应用资源。
在逻辑应用资源菜单上的“监视”下,选择“日志流”。
日志流页面连接到你的 Application Insights 实例并显示调试输出。 例如,以下输出包括请求和响应调用以及其他信息: