diff --git a/geronimo-opentracing-common/src/main/java/org/apache/geronimo/microprofile/opentracing/common/microprofile/server/GeronimoOpenTracingFeature.java b/geronimo-opentracing-common/src/main/java/org/apache/geronimo/microprofile/opentracing/common/microprofile/server/GeronimoOpenTracingFeature.java
index e14d2a9..73c7f28 100644
--- a/geronimo-opentracing-common/src/main/java/org/apache/geronimo/microprofile/opentracing/common/microprofile/server/GeronimoOpenTracingFeature.java
+++ b/geronimo-opentracing-common/src/main/java/org/apache/geronimo/microprofile/opentracing/common/microprofile/server/GeronimoOpenTracingFeature.java
@@ -46,6 +46,8 @@
     private GeronimoOpenTracingConfig config;
     private Container container;
     private Collection<Pattern> skipPatterns;
+    private String globalFilterRequestSkip;
+    private boolean globalIgnoreMetadataResources;
 
     public void setTracer(final Tracer tracer) {
         this.tracer = tracer;
@@ -53,6 +55,8 @@
 
     public void setConfig(final GeronimoOpenTracingConfig config) {
         this.config = config;
+        this.globalFilterRequestSkip = config.read("server.filter.request.skip", "false");
+        this.globalIgnoreMetadataResources = Boolean.parseBoolean(config.read("server.filter.request.ignoreMetadaResources", "true"));
     }
 
     public void setContainer(final Container container) {
@@ -101,13 +105,28 @@
         });
         context.register(new OpenTracingServerResponseFilter())
                 .register(new OpenTracingServerRequestFilter(operationName, tracer,
-                        Boolean.parseBoolean(config.read(
-                                "server.filter.request.skip." + resourceInfo.getResourceClass().getName() + "_" + resourceInfo.getResourceMethod().getName(),
-                                config.read("server.filter.request.skip." + resourceInfo.getResourceClass().getName(),
-                                        config.read("server.filter.request.skip", "false")))),
+                        shouldSkip(resourceInfo),
                         Boolean.parseBoolean(config.read("server.filter.request.skipDefaultTags", "false"))));
     }
 
+    private boolean shouldSkip(final ResourceInfo resourceInfo) {
+        if (Boolean.parseBoolean(config.read(
+                "server.filter.request.skip." + resourceInfo.getResourceClass().getName() + "_" + resourceInfo.getResourceMethod().getName(),
+                config.read("server.filter.request.skip." + resourceInfo.getResourceClass().getName(),
+                        globalFilterRequestSkip)))) {
+            return true;
+        }
+        return globalIgnoreMetadataResources && isMetadataResource(resourceInfo.getResourceClass().getName());
+    }
+
+    private boolean isMetadataResource(final String name) {
+        return name.startsWith("org.apache.geronimo.microprofile.openapi.jaxrs.") ||
+                name.startsWith("org.apache.geronimo.microprofile.metrics.jaxrs.") ||
+                name.startsWith("org.apache.geronimo.microprofile.impl.health.jaxrs.") ||
+                name.startsWith("org.apache.geronimo.microprofile.reporter.storage.front.") ||
+                name.startsWith("org.microprofileext.openapi.swaggerui.");
+    }
+
     private String getMethodPath(final ResourceInfo resourceInfo) {
         final String classPath = ofNullable(resourceInfo.getResourceClass().getAnnotation(Path.class))
                 .map(Path::value).orElse("");
