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