首页
/ Apache DevLake中DORA指标计算异常问题分析与解决方案

Apache DevLake中DORA指标计算异常问题分析与解决方案

2025-07-03 16:53:13作者:吴年前Myrtle

问题背景

在Apache DevLake项目的最新版本v1.0.0-beta11中,用户报告了一个关于DORA指标计算的问题:PagerDuty数据在DORA看板中缺失,导致"变更失败率"和"失败部署恢复时间"两个关键指标无法正确显示。值得注意的是,这个问题在之前的稳定版本v0.21.0中并不存在。

问题现象

通过对比两个版本的截图可以观察到:

  1. 在v0.21.0版本中,DORA看板能够正常显示PagerDuty提供的事件数据
  2. 在v1.0.0-beta11版本中,相同项目的数据却无法显示
  3. 数据库层面使用的是相同的数据快照,排除了数据源本身的问题

根本原因分析

经过技术团队深入调查,发现问题主要出在部署(Deployment)数据的获取机制上:

  1. Webhook配置问题:新版本中由webhook创建的部署数据出现了缺失
  2. 数据重新计算机制:DevLake会在每次运行时重新计算数据,这导致历史数据(如5月份的数据)也受到了影响
  3. PagerDuty数据源支持:虽然PagerDuty数据本身被正确采集,但由于缺少关联的部署数据,导致DORA指标无法完整计算

解决方案

1. 验证Webhook配置

确保每个项目都有独立的webhook配置。如果多个项目共享同一个webhook,会导致部署数据被错误地复制到多个项目中。

2. 检查部署数据完整性

使用以下SQL查询验证部署数据的完整性:

SELECT
    pm.project_name,
    IF(pm.project_name in ($project), 'This project is selected', 'Not Selected') as select_status,
    IF(cdc._raw_data_table != '', cdc._raw_data_table, cdc.cicd_scope_id) as _raw_data_table,
    result,
    environment,
    count(distinct cdc.id) as deployment_commit_count, 
    count(distinct cdc.cicd_deployment_id) as deployment_count
FROM cicd_deployment_commits cdc
LEFT join project_mapping pm on cdc.cicd_scope_id = pm.row_id and pm.`table` = 'cicd_scopes'
WHERE $__timeFilter(cdc.finished_date)
GROUP BY pm.project_name, select_status, _raw_data_table, result, environment

3. 验证项目映射关系

确保project_mapping表正确映射了部署、拉取请求和问题数据。特别注意过滤条件应使用table = 'cicd_scopes'table = 'repos'table = 'boards'

4. 使用DORA验证看板

从DevLake v0.18版本开始,提供了专门的DORA验证看板,可以逐步检查四个DORA指标(部署频率、变更前置时间中位数、变更失败率和恢复服务时间中位数)的计算过程,帮助定位问题所在。

技术实现细节

部署频率计算逻辑

DevLake使用复杂的SQL查询来计算部署频率指标,主要包括:

  1. 生成最近几个日历月的日期序列
  2. 识别生产环境中的成功部署
  3. 按周和月统计部署天数
  4. 计算部署天数的中位数

事件与部署的关联

系统通过以下方式关联PagerDuty事件和部署:

SELECT
    pm.project_name,
    cdc.finished_date,
    cdc.result,
    cdc.environment,
    pd.incident_id,
    pd.incident_status,
    pd.incident_created_at,
    pd.incident_resolved_at
FROM cicd_deployment_commits cdc
LEFT JOIN project_mapping pm ON cdc.cicd_scope_id = pm.row_id AND pm.`table` = 'cicd_scopes'
LEFT JOIN pagerduty_incidents pd ON cdc.cicd_scope_id = pd.cicd_scope_id
WHERE $__timeFilter(cdc.finished_date)
ORDER BY cdc.finished_date, pd.incident_created_at

最佳实践建议

  1. 定期验证数据完整性:特别是在升级版本后,应检查所有关键指标的原始数据
  2. 合理配置Webhook:为每个项目配置独立的webhook,避免数据交叉污染
  3. 利用验证工具:充分利用DORA验证看板进行问题诊断
  4. 监控数据采集范围:注意PagerDuty只能采集当前时间前6个月的数据

总结

Apache DevLake作为一款开源的数据湖平台,在DORA指标计算方面提供了强大的功能。本次问题的核心在于部署数据的获取机制变化,通过正确配置webhook和验证数据完整性,可以确保DORA指标的准确计算。开发团队应关注版本升级可能带来的数据计算逻辑变化,并建立相应的验证机制。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
24
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
267
2.54 K
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.02 K
434
pytorchpytorch
Ascend Extension for PyTorch
Python
98
126
flutter_flutterflutter_flutter
暂无简介
Dart
556
124
fountainfountain
一个用于服务器应用开发的综合工具库。 - 零配置文件 - 环境变量和命令行参数配置 - 约定优于配置 - 深刻利用仓颉语言特性 - 只需要开发动态链接库,fboot负责加载、初始化并运行。
Cangjie
54
11
IssueSolutionDemosIssueSolutionDemos
用于管理和运行HarmonyOS Issue解决方案Demo集锦。
ArkTS
13
23
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.02 K
604
cangjie_compilercangjie_compiler
仓颉编译器源码及 cjdb 调试工具。
C++
117
93
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1