采用 Guru Meditation 报告¶
https://blueprints.launchpad.net/cinder/+spec/guru-meditation-report
本规范建议在 Cinder 中采用 Oslo Guru Meditation 报告。此新功能将增强所有官方 Cinder 服务的调试能力,通过提供一种简便的方法来收集当前线程和配置等运行时数据,供开发人员、操作员和技术支持使用。
问题描述¶
目前 Cinder 没有收集活动服务进程运行时数据的方式。部署者、开发人员和技术支持能够分析的唯一信息是相关服务实际记录的日志。额外的数据可以有效地用于调试和解决 Cinder 操作过程中出现的问题。例如,我们可能对所有线程(包括绿色线程和真实线程)的堆栈跟踪、pid/ppid 信息、软件包版本、服务看到的配置等感兴趣。
Oslo Guru 报告提供了一种简便的方法,可以将支持收集此类信息的功能添加到任何服务中。报告生成是通过向服务发送特殊信号(USR1)来触发的。报告生成在 stderr 上,如果需要,可以将其管道传输到系统日志中。
用例¶
Guru 报告是可扩展的,这意味着如果需要,我们将能够向这些报告中添加更多信息。
Guru 报告已在 Nova 中得到支持。
提议的变更¶
首先,应将新的 oslo-incubator 模块(reports.*)同步到 cinder 树中。然后,应扩展每个服务入口点,以便在继续其真实 main() 之前注册报告功能。
数据模型影响¶
无。
REST API 影响¶
无。
安全影响¶
理论上,此更改可能会将服务内部信息暴露给能够向服务发送所需信号的人。也就是说,我们可以假设用户已经获得了授权,可以执行比仅仅访问堆栈跟踪和使用的配置更多的操作。此外,如果部署者出于某种原因担心信息泄露,他们也可以确保其 stderr 输出被引导到安全的位置。
由于此报告由用户触发,因此无需添加配置选项来启用/禁用此功能。
通知影响¶
无。
其他最终用户影响¶
无。
性能影响¶
该功能在被用户触发之前不需要任何额外的资源。默认报告生成预计不会花费太长时间。报告扩展需要根据具体情况进行评估。无论如何,预计报告不会经常生成,并且假定它是一种调试功能,而不是每分钟触发一次以防万一的功能。
IPv6 影响¶
无。
其他部署者影响¶
部署者可能希望确保这些报告被收集到某个地方(例如,stderr 应由 syslog 捕获)。
开发人员影响¶
无。
社区影响¶
无。
备选方案¶
我们可以重新实现轮子,但我们希望不会这样做。
实现¶
负责人¶
wanghao
工作项¶
同步 oslo-incubator 中的 reports.* 模块
在 cinder/cmd/… 下的包装器中使用它来采用它到所有 cinder 服务中。
依赖项¶
reports.* 模块目前正在进行毕业评估。如果它在 cinder 切换到它之前毕业到 oslo.reports 库,那么我们实际上不需要从 oslo-incubator 同步任何代码,而是添加一个新的外部 oslo 依赖项。如果 Cinder 在毕业完成之前切换到该模块,那么我们将需要在常规 oslo 联络工作中稍后采用 oslo.reports。
测试¶
需要自动化测试来确保 guru 报告正常工作。
文档影响¶
需要更新用户文档以介绍这些更改。
应更新开发人员文档,以包含有关如何添加对报告功能的支持的信息。