集群最近登录事件的存储¶
https://blueprints.launchpad.net/sahara/+spec/event-log
本规范建议为集群添加分配的事件日志。
问题描述¶
为集群分配事件日志将更方便用户使用。在这种情况下,用户将能够查看部署集群执行的步骤。如果他们的集群出现问题,用户将能够在UI中看到问题的原因,而无需阅读Sahara日志。
提议的变更¶
新功能将提供以下能力
对于每个集群,都会为其分配一个事件日志。部署者将能够在Horizon中查看它。在这种情况下,用户将能够查看集群部署的所有步骤。
部署者将能够查看集群配置的当前进度。
替代方案¶
无
数据模型影响¶
此更改需要将事件日志消息写入数据库。以与我们存储集群数据、节点组数据等类似的方式将事件消息存储在数据库中是一个好主意。
插件应提供配置步骤列表,并能够报告当前步骤的状态。所有步骤应按线性顺序执行,并且我们将仅存储当前步骤的事件。应将所有已完成步骤的持续时间存储在数据库中。没有理由存储已成功完成步骤的事件,因此它们将定期删除。
如果在配置集群时发生错误,我们将为当前步骤保存错误事件。我们还应为每个错误事件存储error_id,这将帮助管理员确定sahara日志中的故障原因。
我们应该有一个名为ClusterEvent的新数据库对象,它将具有以下字段
node_group_id;
instance_id;
instance_name;
event_info;
successful;
provision_step_id;
id;
created at;
updated at;
我们还应该有一个名为ClusterProvisionStep的新数据库对象,它将具有以下字段
id;
cluster_id;
step_name;
step_type;
completed;
total;
successful;
started_at;
completed_at;
created_at;
updated_at;
字段 step_name 和 step_type 将包含有关步骤的详细信息。 step_name 将包含步骤的描述,例如 Waiting for ssh 或 Launching instances。 step_type 将包含有关此步骤相关过程的信息。例如,如果我们在创建新集群,则此字段将包含 creating,对于扩展某些集群,此字段将包含 scaling。因此,此字段的可能值将是 creating、scaling、deleting。我们还应添加从Plugin SPI为每个 step_type获取主要配置步骤的能力,作为字典。例如,预期的返回值
{
"creating": [
"Launching instances",
"Waiting for ssh",
....
]
"scaling": [
....
]
"deleting": [
....
]
}
集群应具有新字段:* provisioning_progress
此字段将包含配置步骤列表,该列表应提供从集群获取配置步骤信息的能力。每次我们启动与集群的新过程(创建/扩展/删除)时,我们都应使用新步骤更新此列表。配置步骤应同时从插件和基础设施更新,因为某些步骤对所有集群都是相同的。
REST API 影响¶
现有的集群GET请求应使用已完成的步骤信息和当前步骤的简短信息进行更新。例如,我们将获得以下响应:“Launching instances completed 1000 out of 1000 in 10 minutes”,“Trying ssh completed: 59 out of 1000”。响应也应按 created_at 值的递增顺序排序。
{
"cluster": {
"status": "Waiting",
....
"provisioning_progress": [
{
"id": "1",
"cluster_id": "1111",
"step_name": "Launching instances",
"step_type": "creating",
"completed": 1000,
"total": 1000,
"successful": "True",
"created_at": "2013-10-09 12:37:19.295701",
"started_at": 36000000,
"completed_at": 18000000,
"updated_at": "2013-10-09 12:37:19.295701",
},
{
"id": "2",
"cluster_id": "1111",
"step_name": "Waiting for ssh",
"step_type": "creating",
"completed": 59,
"total": 1000,
"successful": None,
"created_at": "2013-10-09 12:37:19.295701",
"started_at": 18000000,
"completed_at": None,
"updated_at": "2013-10-09 12:37:19.295701",
}
]
....
}
}
如果出现错误
{
"cluster": {
"status": "Waiting",
....
"provisioning_progress": [
{
"id": "1",
"cluster_id": "1111",
"step_name": "Launching instances",
"step_type": "creating",
"completed": 1000,
"total": 1000,
"successful": "True",
"created_at": "2013-10-09 12:37:19.295701",
"started_at": 36000000,
"completed_at": 18000000,
"updated_at": "2013-10-09 12:37:19.295701",
},
{
"id": "2",
"cluster_id": "1111",
"step_name": "Waiting for ssh",
"step_type": "creating",
"completed": 59,
"total": 1000,
"successful": False,
"created_at": "2013-10-09 12:37:19.295701",
"started_at": 18000000,
"completed_at": None,
"updated_at": "2013-10-09 12:37:19.295701",
}
]
....
}
}
在这些情况下,我们还将数据库中存储事件,我们可以从中调试集群问题。由于集群配置的初始步骤相同,因此对于这些步骤,基础设施应更新 provisioning_progress 字段。对于所有与插件相关的步骤,插件应更新 provisioning_progress 字段。因此,新的集群字段应同时从基础设施和插件更新。
应添加新的端点以获取当前配置步骤的详细信息:GET /v1.1/<tenant_id>/clusters/<cluster_id>/progress
预期的响应应如下所示
{
"events": [
{
'node_group_id': "ee258cbf-4589-484a-a814-81436c18beb3",
'instance_id': "ss678cbf-4589-484a-a814-81436c18beb3",
'instance_name': "cluster-namenode-001",
'provisioning_step_id': '1',
'event_info': None,
'successful': True,
'id': "ss678cbf-4589-484a-a814-81436c18eeee",
'created_at': "2014-10-29 12:36:59.329034",
},
{
'cluster_id': "d2498cbf-4589-484a-a814-81436c18beb3",
'node_group_id': "ee258www-4589-484a-a814-81436c18beb3",
'instance_id': "ss678www-4589-484a-a814-81436c18beb3",
'instance_name': "cluster-datanode-001",
'provisioning_step_id': '1',
'event_info': None,
'successful': True,
'id': "ss678cbf-4589-484a-a814-81436c18eeee",
'created_at': "2014-10-29 12:36:59.329034",
},
{
'cluster_id': "d2498cbf-4589-484a-a814-81436c18beb3",
'node_group_id': "ee258www-4589-484a-a814-81436c18beb3",
'instance_id': "ss678www-4589-484a-a814-81436c18beb3",
'instance_name': "cluster-datanode-001",
'provisioning_step_id': '2',
'event_info': "Trying to access failed: reason in sahara logs
by id ss678www-4589-484a-a814-81436c18beb3",
'successful': False,
'id': "ss678cbf-4589-484a-a814-81436c18eeee",
'created_at': "2014-10-29 12:36:59.329034",
},
]
}
失败步骤的事件信息将包含错误的跟踪信息。
其他最终用户影响¶
无
部署者影响¶
此更改将在合并后立即生效。此外,从配置中禁用事件日志也是一个好主意。
开发者影响¶
无
Sahara-image-elements impact¶
无
Sahara-dashboard / Horizon 影响¶
此更改将在Horizon的事件日志页面/data_processing/clusters/cluster_id中添加一个部分。在此页面上,将能够查看主要的配置步骤以及所有步骤的当前进度。我们还将能够查看当前配置步骤的事件。如果出现错误,我们将能够查看当前步骤的所有事件和故障的主要原因。
实现¶
负责人¶
- 主要负责人
vgridnev
- 其他贡献者
slukjanov, alazarev, nkonovalov
工作项¶
- 此功能需要以下修改
添加从插件获取集群配置步骤信息的能力;
添加查看当前配置步骤进度能力;
添加将事件指定到当前集群和当前步骤的能力;
添加定期任务以删除上一步中冗余事件;
添加查看集群配置步骤事件的能力;
Sahara文档应使用此功能的一些用例进行更新;
Saharaclient应使用新的REST API功能进行修改;
应实现Horizon中带有事件的新集群选项卡;
添加单元测试以测试事件的新功能。
依赖项¶
取决于OpenStack要求
测试¶
如“工作项目”部分所述,此功能需要单元测试
文档影响¶
如“工作项目”部分所述,此功能需要使用功能用例更新文档