Adopt Oslo Guru 报告

https://blueprints.launchpad.net/neutron/+spec/guru-meditation-report

本规范建议在 Neutron 中采用 Oslo Guru 报告。此新功能将增强所有官方 Neutron 服务的调试能力,通过提供一种简便的方法来收集当前线程和配置等运行时数据,供开发人员、操作员和技术支持使用。

问题描述

目前 Neutron 没有收集活动服务进程运行时数据的方法。部署者、开发人员和技术支持能够分析的唯一信息是相关服务实际记录的日志。额外的数据可以有效地用于调试和解决 Neutron 运行期间出现的问题。例如,我们可能对所有线程(包括绿色线程和真实线程)的堆栈跟踪、pid/ppid 信息、软件包版本、服务看到的配置等感兴趣。

Oslo Guru 报告提供了一种简便的方法,可以将支持收集此类信息的功能添加到任何服务中。报告生成是通过向服务发送一个特殊信号(USR1)来触发的。报告生成在 stderr 上,如果需要,可以将其管道传输到系统日志中。

Guru 报告是可扩展的,这意味着如果需要,我们将能够向这些报告添加更多信息。例如,我们可以为 L2 Open vSwitch 代理添加一个新的报告部分,以将流和其他相关的网络数据转储到报告中。请注意,本规范不涵盖任何可能的扩展,只是为它们奠定了基础。

Guru 报告受 Nova 支持。

提议的变更

首先,应该将一个新的 oslo-incubator 模块(reports.*)同步到 neutron 树中。然后,每个服务入口点都应该扩展为在继续其真正的 main() 之前注册报告功能。这可以通过利用 neutron/cmd/__init__.py 或类似的方式来实现,从而自动将该功能暴露给所有服务。

在 neutron 核心仓库采用该功能后,高级服务仓库也将类似地更新以利用该模块。

数据模型影响

无。

REST API 影响

无。

安全影响

从理论上讲,该更改可能会将服务内部信息暴露给能够向服务发送所需信号的人。也就是说,我们可以假设用户已经获得了比仅仅访问堆栈跟踪和使用的配置更多的授权。此外,如果部署者出于某种原因担心信息泄露,他们也可以确保其 stderr 输出被引导到安全的地方。

通知影响

无。

其他最终用户影响

无。

性能影响

该功能在被用户触发之前不需要任何额外的资源。默认报告生成预计不会花费太长时间。报告扩展需要根据具体情况进行评估。无论如何,预计报告不会经常生成,并且假定它是一种调试功能,而不是每分钟触发一次以防万一。

IPv6 影响

无。

其他部署者影响

部署者可能希望确保这些报告被收集到某个地方(例如,stderr 应该被 syslog 捕获)。

开发人员影响

无。

社区影响

无。

备选方案

我们可以重新实现轮子,但我们希望不会。

实现

负责人

ihrachyshka

工作项

  • 同步 oslo-incubator 中的 reports.* 模块

  • 在 neutron/cmd/… 下的包装器中使用它在所有 neutron 服务中采用它。

注意:该功能曾经被提议包含,但后来被放弃:https://review.openstack.org/#/q/project:openstack/neutron+topic:bp/guru-meditation-report,n,z

依赖项

reports.* 模块目前正在进行毕业考虑。如果它在 neutron 切换到它之前毕业到 oslo.reports 库,那么我们实际上不需要从 oslo-incubator 同步任何代码,而是添加一个新的外部 oslo 依赖项。如果 Neutron 在毕业完成之前切换到该模块,那么我们将需要在以后的 oslo liaison 工作中采用 oslo.reports。

测试

理想情况下,该功能将使用预计在 Kilo 中进入树,但推迟到 Liberty 的完整堆栈测试框架进行测试。请注意,该框架尚未重新提议用于 Liberty。

Tempest 测试

无。

功能测试

无。

API 测试

无。

文档影响

用户文档

应该扩展文档以描述此新功能。

开发人员文档

应该更新开发人员文档,以包含有关如何添加对报告功能的支持的信息。应特别注意那些在树外实现 Neutron 扩展的人员。

参考资料