diff --git a/CHANGELOG b/CHANGELOG
index c08b148c3acf434090fce2d811770ebc9ca55937..f4f864b301a772785a5cf638e299f74b51e29390 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 Please view this file on the master branch, on stable branches it's out of date.
 
 v 8.7.0 (unreleased)
+  - All service classes (those residing in app/services) are now instrumented (Yorick Peterse)
   - Enable gzip for assets, makes the page size significantly smaller. !3544 / !3632 (Connor Shea)
   - Load award emoji images separately unless opening the full picker. Saves several hundred KBs of data for most pages. (Connor Shea)
   - All images in discussions and wikis now link to their source files !3464 (Connor Shea).
diff --git a/config/initializers/metrics.rb b/config/initializers/metrics.rb
index 1b445bbbd10200baee8b5b0485206bd480c8a8fd..9bd43dad0a0f38967898d9db88d93e9d283ddcff 100644
--- a/config/initializers/metrics.rb
+++ b/config/initializers/metrics.rb
@@ -1,4 +1,5 @@
 if Gitlab::Metrics.enabled?
+  require 'pathname'
   require 'influxdb'
   require 'connection_pool'
   require 'method_source'
@@ -98,6 +99,17 @@ if Gitlab::Metrics.enabled?
 
     config.instrument_methods(Gitlab::ReferenceExtractor)
     config.instrument_instance_methods(Gitlab::ReferenceExtractor)
+
+    # Instrument all service classes
+    services = Rails.root.join('app', 'services')
+
+    Dir[services.join('**', '*.rb')].each do |file_path|
+      path = Pathname.new(file_path).relative_path_from(services)
+      const = path.to_s.sub('.rb', '').camelize.constantize
+
+      config.instrument_methods(const)
+      config.instrument_instance_methods(const)
+    end
   end
 
   GC::Profiler.enable