Cinder 任务日志改进¶
https://blueprints.launchpad.net/cinder/+spec/task-logging
为了提高 cinder 中任务和流程在 create_volume 工作流(未来会有更多工作流)中的使用实用性,我们需要改进 taskflow 和 cinder 之间的互联意识和使用程度。这将有助于跟踪单个工作流的运行过程(允许深入了解正在发生或已经发生的事情)。这将有助于操作员、开发人员和其他人使用这些信息。
问题描述¶
当前 taskflow 的使用并未充分利用 taskflow 引擎 内部事件/通知机制。这使得很难确定 taskflow 内部正在发生什么,以及在出现故障时如何调试它(它们不可避免地会发生)。最好以一种更易于使用和理解的方式公开这些信息,以便将来使用(但我们首先需要让基础功能正常工作)。
用例¶
提议的变更¶
首先,我们需要接入 taskflow 引擎提供的/发出的 通知 系统。这将解决 taskflow 引擎发出的有用信息不足的问题,并有助于调试任务和流程的状态转换和活动。这将有助于解决可调试性和跟踪 taskflow 内部机制的问题,从而使操作员、开发人员和用户的生活更加轻松。
拟议的更改的一部分,也是需要更多反馈的部分是日志的位置(它是否是一个日志?)。使用 taskflow 提供的 日志监听器,我们可以插入任何兼容的日志记录对象(通常是 python logging 模块中的 LOG)作为这些事件的接收器。在 cinder 的情况下,这应该是一个 oslo incubator LOG 对象(就像在 cinder 和 openstack 其他地方通常使用的一样)。问题在于这个 LOG 应该将任务和流程事件输出到哪里。
以下建议似乎已经达成一致
一个用于任务/流程事件的日志位置,由一个新的配置选项
task_log_file提供(配置选项名称可以根据需要更改,这只是一个示例,可能不是此用途的最佳名称),该选项将在cinder.conf中设置,以指定将数据写入的位置。如果未设置此位置,则它将默认为主 cinder 日志(这将允许那些希望这样做的人将日志分离出来)。
备选方案¶
N/A
数据模型影响¶
N/A
REST API 影响¶
目前没有。
一些未来可能很有用的想法
将相同的信息(或此信息的一个简化集合)提供给 cinder api 的最终用户,以便他们可以了解 cinder 内部请求正在发生的事情。这将涉及将相同的事件流保存到不是日志文件,而是可以以良好的格式(json 或其他)返回给用户的更合适的结构中。这类似于为 cinder 用户提供一个 *任务日志*,其他 OpenStack 项目也在探索/实施。
安全影响¶
N/A
通知影响¶
N/A
其他最终用户影响¶
N/A
性能影响¶
更多的日志数据意味着如果之前未设置,则需要设置一个轮换机制。由于这些日志文件可能包含大量信息,因此它们需要比仅包含 ERROR 或 WARNING 信息的日志文件更快地轮换。
其他部署者影响¶
一个可选的配置设置,用于启用新的日志文件位置。如果添加了日志文件位置,则将涉及新的日志文件轮换和相关的策略,这是操作员需要了解并正确配置以避免填满服务器硬盘的事情。目标是这个新的配置选项默认为现有的主 cinder 日志(这样对大多数操作员的影响将是最小的)。
开发人员影响¶
N/A
实现¶
负责人¶
主要负责人:harlowja
工作项¶
为 cinder 创建新的配置选项,用于事件流目标位置。
在
create_volume使用 taskflow 任务/流程和引擎时使用事件流。
依赖项¶
N/A
测试¶
应该可以替换 cinder 中使用的 LOG 或通知机制与 taskflow 使用的 mock 对象,该对象也可以收集相同的事件流,并允许在测试中使用它来验证事件流是否包含所需的事件(我们可能应该在测试中具有选择性,并且仅验证是否发出了某些 *关键* 事件,因为 taskflow 可能会在未来添加新事件)。
文档影响¶
N/A
参考资料¶
峰会讨论