GitLab Developers Guide to service measurement
You can enable service measurement to debug any slow service's execution time, number of SQL calls, garbage collection stats, memory usage, etc.
The measuring module is a tool that allows to measure a service's execution, and log:
- Service class name
- Execution time
- Number of SQL calls
gcstats and diffs
- RSS memory usage
- Server worker ID
The measuring module logs these measurements into a structured log called
as a single entry for each service execution.
service_measurement.log is ingested in Elasticsearch and Kibana as part of our monitoring solution.
How to use it
The measuring module allows you to easily measure and log execution of any service,
by just prepending
Measurable in any Service class, on the last line of the file that the class resides in.
For example, to prepend a module into the
DummyService class, you would use the following approach:
In case when you are prepending a module from the
EE namespace with EE features, you need to prepend Measurable after prepending the
Measurable is at the bottom of the ancestor chain, to measure execution of
EE features as well:
Log additional attributes
In case you need to log some additional attributes, it is possible to define
extra_attributes_for_measurement in the service class:
After the measurement module is injected in the service, it is behind a generic feature flag. To actually use it, you need to enable measuring for the desired service by enabling the feature flag.
Enabling measurement using feature flags
In the following example, the
feature flag is used to enable the measuring feature
/chatops run feature set gitlab_service_measuring_projects_import_service true