Nova日志不应包含ERROR或TRACE信息

https://blueprints.launchpad.net/nova/+spec/clean-logs

Nova日志应该易于阅读、有意义,并且只在特殊情况下包含错误和跟踪信息。

问题描述

在OpenStack gate中正常且成功的Tempest运行期间,我们会在日志中获得大量的ERROR和堆栈跟踪信息。这是对于通过的测试结果,这意味着云应该正常运行。

在正常情况下日志中出现堆栈跟踪和错误,使得操作员很难真正确定OpenStack云中何时发生实际问题。即使在正常的开发过程中,人们也会被ERROR误导,从而在调试OpenStack问题时,真正的错误被掩盖。

提议的变更

我们应该清理所有在正常Tempest运行期间发生的堆栈跟踪和错误实例。这意味着解决当前暴露的这些错误,以及更改一些日志级别,我们将以log.exception级别记录实际上是预期的异常(因此应该使用log.debug或完全删除)。

有关完成标准,请参见下面的测试部分。

备选方案

无。

数据模型影响

无。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

这将更改一些日志消息以提高清晰度。构建了围绕旧错误消息的过滤器的用户将需要调整他们的过滤器。由于他们可能正在过滤掉这些消息,因此应该将其降至最低。

性能影响

无。(可能微小,且难以察觉的提升,因为不再转储那么多堆栈跟踪。)

其他部署者影响

无。

开发人员影响

一旦强制执行,开发人员将不得不更加小心地在Nova代码中进行任意log.exception调用,并且需要更加小心地捕获预期条件的适当异常。

实现

负责人

主要负责人

sdague

工作项

应该按照以下顺序处理这些服务(将每个服务的清理视为一个工作项)

  • n-sched

  • n-net

  • n-api

  • n-cpu

n-sched和n-net目前是最需要清理的,因为它们是测试不会直接访问的服务(仅通过n-api调用间接访问)。确保它们在转储堆栈跟踪方面没有意外行为,将提供额外的验证,证明这些服务按预期工作。

依赖项

测试

测试将通过当前在gate中运行的tempest check_logs.py脚本完成。一旦我们确信已经清理了某个服务,我们将从allowed_dirty列表中删除该服务 https://github.com/openstack/tempest/blob/master/tools/check_logs.py#L33。此后,任何导致该服务日志中出现堆栈跟踪或错误的更改都将导致Tempest测试失败,从而阻止更改合并。

文档影响

将有一项相关的整体日志记录标准工作(将在Juno跨项目会议上提出),需要与此同步完善。

参考资料