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

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

2025-07-03 07:36:27作者:吴年前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
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
173
2.06 K
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
202
279
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
956
566
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Python
78
72
Git4ResearchGit4Research
Git4Research旨在构建一个开放、包容、协作的研究社区,让更多人能够参与到开放研究中,共同推动知识的进步。
HTML
28
6
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.01 K
397
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
348
1.34 K
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
118
629