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.
Measuring module
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
- Detailed
gc
stats and diffs - RSS memory usage
- Server worker ID
The measuring module logs these measurements into a structured log called service_measurement.log
,
as a single entry for each service execution.
For GitLab.com, 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:
class DummyService
def execute
# ...
end
end
DummyService.prepend(Measurable)
In case when you are prepending a module from the EE
namespace with EE features, you need to prepend Measurable after prepending the EE
module.
This way, Measurable
is at the bottom of the ancestor chain, to measure execution of EE
features as well:
class DummyService
def execute
# ...
end
end
DummyService.prepend_mod_with('DummyService')
DummyService.prepend(Measurable)
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:
def extra_attributes_for_measurement
{
project_path: @project.full_path,
user: current_user.name
}
end
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 :gitlab_service_measuring_projects_import_service
feature flag is used to enable the measuring feature
for Projects::ImportService
.
From ChatOps:
/chatops run feature set gitlab_service_measuring_projects_import_service true
Docs
Edit this page to fix an error or add an improvement in a merge request.
Create an issue to suggest an improvement to this page.
Product
Create an issue if there's something you don't like about this feature.
Propose functionality by submitting a feature request.
Feature availability and product trials
View pricing to see all GitLab tiers and features, or to upgrade.
Try GitLab for free with access to all features for 30 days.
Get help
If you didn't find what you were looking for, search the docs.
If you want help with something specific and could use community support, post on the GitLab forum.
For problems setting up or using this feature (depending on your GitLab subscription).
Request support