Log Analytics中Databricks表KQL脚本执行异常:步骤3、4计算问题求助
问题分析
核心问题出在步骤3和4的逻辑错误:
- pivot操作后已经生成了数值类型的
Current和Previous列(对应两个15分钟窗口的错误数),但你错误地创建了字符串类型的P_Temp和C_Temp并覆盖了原有数值列,导致后续转换为整数时无法获取真实错误数,自然无法完成计算。 - 告警触发逻辑完全写反:原代码判断错误数下降时触发告警,与“最近15分钟错误数显著升高”的需求不符;同时除以0的处理逻辑不够合理。
修正后的KQL脚本
// Step 1: Union所有Databricks表并定义30分钟回溯窗口 union DatabricksAccounts, DatabricksClusterLibraries, DatabricksClusters, DatabricksDashboards, DatabricksDatabricksSQL, DatabricksDBFS, DatabricksDeltaPipelines, DatabricksFeatureStore, DatabricksFilesystem, DatabricksGitCredentials, DatabricksIAMRole, DatabricksIngestion, DatabricksInstancePools, DatabricksJobs, DatabricksLineageTracking, DatabricksModelRegistry, DatabricksNotebook, DatabricksPartnerHub, DatabricksPredictiveOptimization, DatabricksRBAC, DatabricksRepos, DatabricksRFA, DatabricksSecrets, DatabricksSQL, DatabricksSQLPermissions, DatabricksSSH, DatabricksUnityCatalog, DatabricksWorkspace, DatabricksWorkspaceFiles | where TimeGenerated > ago(30m) // Step 2: 过滤严重错误并划分时间窗口 | extend ParsedResponse = todynamic(case( isnotempty(Response_dynamic), tostring(Response_dynamic), isnotempty(Response_string), Response_string, '{}' )) | extend StatusCode = toint(tostring(ParsedResponse.statusCode)), ErrorMessage = tostring(ParsedResponse.errorMessage) | where StatusCode >= 500 or isnotempty(ErrorMessage) | extend TimeWindow = case( TimeGenerated > ago(15m), "Current", "Previous" ) // Step 3: 汇总错误数并透视时间窗口 | summarize AggCount = count() by TimeWindow | evaluate pivot(TimeWindow, sum(AggCount)) // Step 4: 处理空值并转换为整数类型 | extend PreviousFailureCount = toint(coalesce(Previous, 0)), CurrentFailureCount = toint(coalesce(Current, 0)) // Step 5: 计算变化率并判断告警触发条件 | extend PercentageChange = iff( PreviousFailureCount == 0, // 前15分钟无错误,当前有错误则视为显著升高 iff(CurrentFailureCount > 0, 999.0, 0.0), (todouble(CurrentFailureCount) - PreviousFailureCount) * 100 / PreviousFailureCount ) // 触发条件:当前错误数比前15分钟上升超过100%(可按需调整阈值) | extend AlertTrigger = iff(PercentageChange >= 100.0, 1, 0) // Step 6: 按第三方要求格式聚合 | summarize AggregatedValue = max(AlertTrigger) by Resource = "DatabricksWorkspace"
关键修正说明
- 移除了错误的
P_Temp/C_Temp字符串列定义,直接使用pivot生成的数值列,确保后续计算基于真实错误数。 - 优化了除以0的处理逻辑:前15分钟无错误时,只要当前有错误就直接触发告警(用999.0标记极端上升)。
- 修正了告警触发条件:从错误数下降改为上升超过设定阈值(示例为100%,可根据需求调整为50%、200%等)。
- 简化了中间步骤,保证数据类型始终为数值型,避免类型转换错误。
内容的提问来源于stack exchange,提问作者user2181700
相关产品推荐
相关产品推荐

