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