从 Ceph CLI 和 GUI 报告 Ceph 问题
你好!我是 Shreyaa,Ceph 的 2021 年 GSoC 学生开发者。这个博客系列记录了我与 Ceph 组织的合作历程。自 6 月 6 日 GSoC 编码期开始以来,我一直在与仪表盘团队合作。Ernesto Puerta 和 Alfonso Martínez 是我的导师。
我希望感谢我的导师和 Ceph 仪表盘团队在整个夏天给予我的持续支持和指导。他们总是在我遇到困难时提供帮助,并激励我遵循良好的编码实践。在整个项目中,他们指导我做出更好的设计选择,并不断通过建设性的反馈帮助我提高作为开发者的能力。
我的项目 ¶
我的 GSoC 项目是将 Ceph 问题跟踪器与 Ceph 仪表盘集成。
问题陈述 ¶
当 Ceph 用户遇到错误、面临问题或有功能请求时,他/她必须前往 Ceph 问题跟踪器来报告或请求。这会导致几个问题,例如
糟糕的用户体验
用户的流程被打断。他们必须从一个站点收集相关信息,并访问另一个站点才能创建新问题。转化率降低 当用户遇到问题时,他/她通常会联系 Ceph 用户或开发者邮件列表以询问。并非所有用户都能得到回复。假设有 100 个用户报告,只有 75% 的用户得到回复(粗略数字,仅用于说明)。在得到回复的 75 个用户中,大约 50 个用户被要求在 Ceph 问题跟踪器上创建一个新问题。在被要求创建问题的用户中,并非所有用户都会因为每个阶段的不便而访问 Ceph 问题跟踪器。因此,最终报告问题的用户数量明显较少。我们可以使用下面的图表更好地理解这一点

拟议的解决方案 ¶
我们提出的解决方案是将 Ceph 问题跟踪器与 Ceph 仪表盘集成。Ceph 仪表盘是 Ceph 项目的前端组件。它可以用于监控和更新 Ceph 环境中运行的服务。
用户应该能够从 Ceph CLI 以及 Ceph 仪表盘报告问题。

我的工作 ¶
Ceph 问题跟踪器基于 Redmine。Ceph 问题跟踪器公开了可用于创建、获取和更新问题的端点。我添加了 Ceph 仪表盘模块中的端点,这些端点调用服务,这些服务内部使用这些公开的 Ceph 问题跟踪器端点。用户可以使用问题编号获取问题,也可以创建新问题。
要创建问题,用户必须在 Ceph 问题跟踪器上拥有一个帐户。这是强制性的,以避免在问题跟踪器上发送垃圾邮件。
在 我的帐户 选项卡下,存储了 API 访问密钥。该 API 密钥用于用户的身份验证和授权。
创建问题时可用的组件
- 仪表盘
- 块 (rbd)
- 对象 (rgw)
- 文件系统 (cephfs)
- ceph_manager
- 编排器
- ceph_volume
- 核心 Ceph
可用的跟踪器类型
- 错误
- 功能
使用 CLI ¶
用户使用以下命令在 Ceph 集群中设置此密钥
ceph dashboard set-issue-tracker-api-key -i <包含密钥的文件>
然后用户可以使用以下命令获取问题
ceph dashboard get issue <问题编号>
此命令可以在未设置 API 访问密钥的情况下运行
要创建新问题
ceph dashboard create issue <组件名称> <跟踪器类型> <主题> <描述>
使用仪表盘 ¶
单击窗口右上角的设置图标,在导航栏中用户需要单击“提出问题”。这将打开一个如下所示的模态框

用户必须从各自的下拉菜单列表中选择组件和跟踪器。然后他们可以输入问题的标题和描述。然后他们可以继续在 ceph 问题跟踪器中创建问题。之后打开的模态框显示了创建问题的详细信息以及重定向到 Ceph 问题跟踪器或停留在当前页面的选项。
面临的挑战 ¶
最初,我使用 python-redmine 库来创建问题并熟悉基于 redmine 的问题跟踪器。但我无法使用此库继续进行,因为它未打包用于 CentOS,而 CentOS 是 Ceph 支持的操作系统。
然后我决定使用原始 API 请求,但 redmine 上的文档不准确。我无法使用 curl 调用和文档中给出的请求体描述创建问题。
下一个方法是转储 python-redmine 库发送的请求。为此,我使用了 wireshark,但由于 POST 请求是加密的,并且该库仅将请求发送到 https 安全链接,因此这不起作用。在 stackoverflow 上花费了无数个小时后,我遇到了这些日志行,这足以帮助我发现一些参数作为查询参数被发送。原始请求在之后工作了。
Ceph 问题跟踪器默认情况下会创建一个错误。我无法创建功能。然后我发现了 webhook.site,它可以记录发送到唯一生成的 API 端点的请求。因此,我记录了一个使用python-redmine 库发送的功能创建请求,并以类似的方式在我的原始请求中发送了请求体。现在功能创建可以工作了!