通过 Fabric API for GraphQL 执行的每个 GraphQL 查询和突变都会生成详细的作日志,用于捕获性能指标、查询文本、身份验证详细信息和执行结果。 这些日志会自动收集并存储在工作区的监视数据库中,提供对 GraphQL API 的使用方式及其执行方式的可见性。
GraphQL作日志是 Fabric 工作区监视 功能的一部分。 启用工作区监视时,Fabric 会在工作区中创建一个 Eventhouse 数据库,该数据库会持续收集来自所有 GraphQL API 的日志。 可以使用 KQL(Kusto 查询语言)查询这些日志,以排查问题、优化性能、跟踪使用模式并确保 API 满足 SLA 要求。
先决条件
访问和查询 GraphQL作日志:
- 在 Fabric 工作区中启用工作区监视
- 访问为您的工作空间创建的活动屋KQL数据库
- 熟悉 Kusto 查询语言(KQL) 以查询日志
启用监视后,GraphQL作会自动记录到两个表: GraphQLMetrics 聚合指标和 GraphQLLog 详细作日志。
谁使用 GraphQL作日志
作日志和监视对于:
- Fabric 工作区管理员 监视 GraphQL API 使用情况、性能和容量消耗
- 数据工程师 跟踪数据访问模式并优化 Fabric Lakehouse 和仓库查询
- DevOps 团队 确保生产应用程序使用 Fabric 数据满足 SLA 要求
- 构造容量管理员 了解容量规划和成本管理的 API 消耗指标
如果需要监视、排查和分析 Fabric GraphQL API 的性能和使用情况,请使用作日志。
GraphQL 操作日志
构造 API for GraphQL 在其连接的数据源上运行的每个查询的日志事件存储在两个补充表中:
- GraphQLMetrics:包含具有时间粒度摘要的聚合指标数据,非常适合性能监视和趋势分析
- GraphQLLog:包含包含完整查询文本和执行详细信息的详细作日志,非常适合对特定查询进行故障排除
使用以下日志:
- 识别行为更改和潜在的 API 降级
- 检测异常或资源密集型查询
- 识别具有最大查询数的用户和应用程序
- 分析查询性能和趋势
- 排查查询速度缓慢的问题
- 诊断特定 GraphQL 查询的问题
GraphQLMetrics 表
该 GraphQLMetrics 表存储 GraphQL作的聚合指标。 使用此表进行性能监视、容量规划和识别随时间推移的趋势。
此表包含以下列:
| 列名称 | 类型 | 说明 |
|---|---|---|
| Timestamp | 日期/时间 | 当记录由数据源创建时生成的日志条目的时间戳 (UTC)。 |
| ItemId | 字符串 | 记录数据的资源的唯一 ID。 |
| ItemKind | 字符串 | 用于记录操作的项目类型。 |
| ItemName | 字符串 | 记录此操作的 Fabric 项目名称。 |
| WorkspaceId | 字符串 | 包含作对象的 Fabric 工作区的唯一标识符 |
| WorkspaceName | 字符串 | 包含该物品的Fabric工作区名称。 |
| CapacityId | 字符串 | 托管作项目的容量的唯一标识符。 |
| CustomerTenantId | 字符串 | 执行操作的客户租户 ID。 |
| PlatformMonitoringTableName | 字符串 | 记录的表的名称属于记录(或记录的认证事件类型)。 格式为 <WorkloadName> + [OperationType>]+ <TelemetryType> |
| 区域 | 字符串 | 发出事件的资源区域;例如美国东部或法国南部。 |
| MetricTimeGrain | 字符串 | 指标的时间粒度(ISO 8601 持续时间)。 |
| MetricUnitName | 字符串 | 指标的单位。 |
| MetricSumValue | long | 单个分钟内指标的聚合总和值。 |
| DatasourceTypes | 动态 | 模型使用的 DataSource 类型的数组。 |
| ResultCode | 字符串 | 失败活动的错误代码,用于将使用情况扩展到可靠性。 |
| Status | 字符串 | 操作的状态。 查询成功/成功执行,并出现错误/失败。 |
GraphQLLog 表
该 GraphQLLog 表存储每个 GraphQL 查询执行的详细作日志。 使用此表可以排查特定查询、分析查询文本以及调查错误或性能问题。
有关事件和向下 ExecutionMetrics 钻取事件的详细信息,请参阅事件和架构。
此表包含以下列:
| 列名称 | 类型 | 说明 |
|---|---|---|
| Timestamp | 日期/时间 | 当记录由数据源创建时生成的日志条目的时间戳 (UTC)。 |
| OperationName | 字符串 | 操作的名称。 |
| ItemId | 字符串 | 记录数据的资源的唯一 ID。 |
| ItemKind | 字符串 | 用于记录操作的项目类型。 |
| ItemName | 字符串 | 记录此操作的 Fabric 项目名称。 |
| WorkspaceId | 字符串 | 包含作对象的 Fabric 工作区的唯一标识符。 |
| WorkspaceName | 字符串 | 包含该物品的Fabric工作区名称。 |
| CapacityId | 字符串 | 托管作项目的容量的唯一标识符。 |
| CorrelationId | 字符串 | 根活动 ID。 |
| OperationId | 字符串 | 要记录的操作的唯一标识符。 |
| 标识 | 动态 | 用户和声明详细信息。 与所报告操作关联的用户。 |
| CustomerTenantId | 字符串 | 执行操作的客户租户 ID。 |
| DurationMs | long | 处理所有必需操作时经过的已用 CPU 时间。 单位为毫秒。 |
| Status | 字符串 | 操作的状态。 查询成功/成功执行,并出现错误/失败。 |
| 级别 | 字符串 | 平台监视团队所需的元数据。 |
| 区域 | 字符串 | 发出事件的资源区域;例如美国东部或法国南部。 |
| PlatformMonitoringTableName | 字符串 | 记录的表的名称属于记录(或记录的认证事件类型)。 格式为 <WorkloadName> + [OperationType>]+ <TelemetryType> |
| QueryText | 字符串 | 查询的文本。 |
| GraphQLOverheadDurationMs | long | 数据平面请求的 GraphQL 开销(以 ms 为单位)。 |
| ProcessedBytes | long | 已处理的数据量(以字节为单位)。 |
| TransportProtocol | 字符串 | 请求的传输协议。 |
| QueryResultMessage | 字符串 | 此维度用于为查询操作的结果提供其他上下文。 |
示例查询
使用这些 KQL 查询分析 GraphQL作日志。 你可以直接在工作区内的eventhouse查询编辑器中运行这些查询。
查找缓慢查询
确定执行时间超过 5 秒的 GraphQL 查询:
GraphQLLog
| where DurationMs > 5000
| project Timestamp, ItemName, DurationMs, QueryText, Status, Identity
| order by DurationMs desc
| take 20
按查询计数排名靠前的用户
查找哪些用户或应用程序发出最多的 GraphQL 请求:
GraphQLLog
| summarize QueryCount = count() by Identity
| order by QueryCount desc
| take 10
错误率分析
计算一段时间内 GraphQL作的错误率:
GraphQLLog
| summarize
TotalQueries = count(),
FailedQueries = countif(Status == "failed"),
ErrorRate = (countif(Status == "failed") * 100.0) / count()
by bin(Timestamp, 1h)
| order by Timestamp desc
大多数资源密集型查询
确定处理最大数据的查询:
GraphQLLog
| where ProcessedBytes > 0
| project Timestamp, ItemName, ProcessedBytes, QueryText, DurationMs
| order by ProcessedBytes desc
| take 20
查询性能趋势
分析过去 24 小时内的平均查询性能:
GraphQLMetrics
| where Timestamp > ago(24h)
| summarize
AvgDuration = avg(MetricSumValue),
MaxDuration = max(MetricSumValue),
QueryCount = count()
by bin(Timestamp, 1h), ItemName
| order by Timestamp desc
有关更多工作区监视示例,请访问 Fabric 示例 GitHub 存储库中的 工作区监视 。