GitLab開発者向けサービス測定ガイド

遅いサービスの実行時間、SQL呼び出し回数、ガベージコレクション統計、メモリ使用量などをデバッグするために、サービス測定を有効にすることができます。

測定モジュール

計測モジュールは、サービスの実行を計測し、ログを記録するツールです:

  • サービスクラス名
  • 実行時間
  • SQLコール数
  • 詳細gc 統計と差分
  • RSSメモリ使用量
  • サーバーワーカーID

計測モジュールは、これらの計測値をservice_measurement.logと呼ばれる構造化ログに、サービス実行ごとに1つのエントリとして記録します。

注:GitLab.com では、** はモニタリングソリューションの一部として Elasticsearch と Kibana に取り込まれます。

使用方法

計測モジュールでは、Service クラスの最後の行にMeasurable を追加するだけで、サービスの実行を簡単に計測し、ログに記録することができます。

例えば、DummyService クラスにモジュールをプリペンドするには、次のようにします:

class DummyService
  def execute
  # ...
  end
end

DummyService.prepend(Measurable)

EE EE機能を持つ名前空間から EEモジュールをプリペンドする場合、モジュールをEE プリペンドした後にMeasurableをプリペンドする必要が EEあります。

この方法では、EE 機能の実行も測定するために、Measurable は祖先連鎖の一番下になります:

class DummyService
  def execute
  # ...
  end
end

DummyService.prepend_if_ee('EE::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