集群最近登录事件的存储

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_namestep_type 将包含有关步骤的详细信息。 step_name 将包含步骤的描述,例如 Waiting for sshLaunching instancesstep_type 将包含有关此步骤相关过程的信息。例如,如果我们在创建新集群,则此字段将包含 creating,对于扩展某些集群,此字段将包含 scaling。因此,此字段的可能值将是 creatingscalingdeleting。我们还应添加从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要求

测试

如“工作项目”部分所述,此功能需要单元测试

文档影响

如“工作项目”部分所述,此功能需要使用功能用例更新文档

参考资料