GitLab開発者向けサービス測定ガイド
遅いサービスの実行時間、SQL呼び出し回数、ガベージコレクション統計、メモリ使用量などをデバッグするために、サービス測定を有効にすることができます。
測定モジュール
計測モジュールは、サービスの実行を計測し、ログを記録するツールです:
- サービスクラス名
- 実行時間
- SQLコール数
- 詳細
gc
統計と差分 - RSSメモリ使用量
- サーバーワーカーID
計測モジュールは、これらの計測値をservice_measurement.log
と呼ばれる構造化ログに、サービス実行ごとに1つのエントリとして記録します。
使用方法
計測モジュールでは、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