持久化错误信息¶
在 Trove 中发生的错误应该易于检索,以便最终用户可以清楚地了解其数据库实例正在发生什么情况。
Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/persist-error-message
问题描述¶
从历史上看,确定 Trove 中故障的原因一直非常困难。这是因为错误可能记录在多个位置,而这些位置都无法供最终用户访问。然而,随着 Trove 中通知机制的出现,现在可以将错误消息持久化到数据库中,以便检索和显示。
提议的变更¶
每个服务器将向通知框架注册一个回调函数。每当发送通知时,都会触发此回调函数,然后可以将发生的任何错误保存到数据库中。然后,用户可以使用“trove show”命令来检索这些信息。
对于在通知框架之外发生的错误,将直接调用以持久化该错误。并非所有错误都需要持久化,因此将首先提出一组错误,可以根据需要随着时间的推移进行增强。
配置¶
预计不会进行任何配置更改。
数据库¶
将在 Trove 模式中添加一张新表 (instance_faults)
列
类型
允许空值
描述
id
varchar(64)
否
故障 ID(自动生成)
instance_id
varchar(64)
否
发生故障的实例 ID
message
varchar(255)
否
故障的错误消息
details
text(65535)
否
额外细节(例如,堆栈跟踪)
created
DateTime
否
创建日期
updated
DateTime
否
更新日期
deleted
tinyint(1)
是
删除标志
deleted_at
DateTime
是
删除日期
公共 API¶
对公共 API 的唯一更改是添加一个“fault”数据结构,该结构在请求实例详细信息时返回。它将如下所示
'fault' :
{
'created': <date>,
'message': 'error message',
'details': 'potential stack trace',
},
“details”值仅在管理员用户执行请求时可用。
公共 API 安全¶
预计不会出现安全问题。由于持久化的消息都是作为通知广播的异常消息,因此都不应包含敏感信息。如果发现任何包含敏感信息的消息,应将其视为错误并进行相应修改(目前尚未发现)。
Python API¶
预计不会对 python API 进行任何更改。
CLI (python-troveclient)¶
“show”Trove CLI 命令现在可能显示新的数据
+-------------------+----------------------------------------------------+
| Property | Value |
+-------------------+----------------------------------------------------+
| created | 2016-05-06T21:28:53 |
| datastore | mysql |
| datastore_version | 5.6 |
| fault_date | 2016-05-06T21:30:06 |
| fault_details | Traceback (most recent call last): |
| | File "/<snip>/manager.py", line 265, in prepare |
| | cluster_config, snapshot, modules) |
| | File "/<snip>/manager.py", line 355, in _prepare |
| | raise RuntimeError("A guest error occurred") |
| | RuntimeError: A guest error occurred |
| fault_message | A guest error occured |
| flavor | 15 |
| id | 73cfc462-dd59-4dc1-9d32-95954171775f |
| ip | 10.66.25.8 |
| name | myinst2 |
| status | ACTIVE |
| updated | 2016-05-06T21:28:58 |
| volume | 1 |
| volume_used | 0.1 |
+-------------------+----------------------------------------------------+
内部 API¶
无需对此 API 进行任何更改。
Guest Agent¶
无需对客户代理进行任何更改。
备选方案¶
我们仍然可能需要访问日志和/或 Nova 实例,以确定发生错误时的情况。
Dashboard 影响 (UX)¶
需要在“show”命令期间公开相关字段。
升级影响¶
预计不会出现升级问题。
依赖项¶
无。
测试¶
将增强场景测试,以验证错误是否已持久化到数据库中并可以检索到。
文档影响¶
这是一个全新的功能,因此需要文档。
参考资料¶
无
附录¶
无