Help us learn about your current experience with the documentation. Take the survey.

GitLab 开发者服务测量指南

您可以启用服务测量来调试任何慢速服务的执行时间、SQL 调用次数、垃圾回收统计信息、内存使用情况等。

测量模块

测量模块是一个工具,可以测量服务的执行情况并记录:

  • 服务类名称
  • 执行时间
  • SQL 调用次数
  • 详细的 gc 统计信息和差异
  • RSS 内存使用量
  • 服务器工作线程 ID

测量模块将这些测量结果记录到一个名为 service_measurement.log 的结构化日志中,每次服务执行都作为一条单独的条目。

对于 GitLab.com,service_measurement.log 作为我们监控解决方案的一部分被摄取到 Elasticsearch 和 Kibana 中。

如何使用

测量模块允许您通过在任何服务类的文件最后一行添加 Measurable,轻松测量和记录任何服务的执行情况。

例如,要在 DummyService 类中添加一个模块,您可以使用以下方法:

class DummyService
  def execute
  # ...
  end
end

DummyService.prepend(Measurable)

当您添加带有 EE 功能的 EE 命名空间中的模块时,需要在添加 EE 模块之后再添加 Measurable

这样,Measurable 位于继承链的底部,以便同时测量 EE 功能的执行情况:

class DummyService
  def execute
  # ...
  end
end

DummyService.prepend_mod_with('DummyService')
DummyService.prepend(Measurable)

记录额外属性

如果您需要记录一些额外的属性,可以在服务类中定义 extra_attributes_for_measurement

def extra_attributes_for_measurement
  {
    project_path: @project.full_path,
    user: current_user.name
  }
end

测量模块注入服务后,它会被一个通用功能标志控制。 要实际使用它,您需要通过启用功能标志来为所需的服务启用测量。

使用功能标志启用测量

在下面的示例中,使用 :gitlab_service_measuring_projects_import_service 功能标志 来为 Projects::ImportService 启用测量功能。

通过 ChatOps:

/chatops run feature set gitlab_service_measuring_projects_import_service true