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