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

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

測定モジュール

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

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

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

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

使い方

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

たとえば、DummyService クラスにモジュールを追加するには、次のようにします:

class DummyService
  def execute
  # ...
  end
end

DummyService.prepend(Measurable)

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

こうすることで、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