All Integrations
LanguagesMaven / Gradle extension

Quarkus Integration

Instrument GraalVM-native Quarkus applications with one extension. CDI, RESTEasy, and Hibernate tracing with native image support — zero reflection overhead.

Setup

How It Works

01

Add the Quarkus Extension

Run ./mvnw quarkus:add-extension -Dextensions="io.tigerops:quarkus-tigerops" or add the Maven dependency to your pom.xml. The extension integrates with the Quarkus build system and supports both JVM mode and native image compilation via GraalVM.

02

Configure application.properties

Add quarkus.tigerops.api-key, quarkus.tigerops.service-name, and quarkus.tigerops.environment to your application.properties or application.yaml. Quarkus config sources including SmallRye Config and Kubernetes ConfigMaps are all supported.

03

CDI & RESTEasy Auto-Instrumentation

The extension uses Quarkus build-time CDI interceptors to instrument @Path resource methods and @Transactional boundaries. No reflection is used at runtime, making the instrumentation GraalVM native-image safe.

04

Traces, Hibernate Queries & CDI Events

Within seconds TigerOps receives RESTEasy request spans, Hibernate query traces with JPQL and native SQL, CDI interceptor timing, and Reactive routes spans from your Quarkus application running in JVM or native mode.

Capabilities

What You Get Out of the Box

GraalVM Native Image Support

The quarkus-tigerops extension is fully compatible with GraalVM native-image compilation. All reflection registrations and substitutions are handled at build time via Quarkus build steps. Native binary startup traces are emitted from the first request.

RESTEasy & REST Client Tracing

All @Path resource methods become traced spans automatically via CDI interceptors. The MicroProfile REST Client is instrumented via a ClientRequestFilter so outbound REST calls create child spans with W3C traceparent injection.

Hibernate ORM & Reactive Query Spans

Every JPQL, HQL, and native SQL query becomes a child span with normalized query text, entity name, execution time, and row count. Hibernate Reactive and Panache entity operations are instrumented with the same zero-reflection approach.

CDI Interceptor Timing

@Transactional, @Retry, @CircuitBreaker, and @Timeout CDI interceptors are measured as child spans. SmallRye Fault Tolerance retry counts, circuit breaker state transitions, and timeout events are recorded as span events.

Quarkus Dev Mode Integration

In Dev mode, TigerOps exports spans to a local TigerOps Dev UI panel available at /q/tigerops. Traces are visible alongside the Quarkus Dev UI console without requiring an API key, enabling local development observability.

Reactive & Mutiny Support

Quarkus reactive routes and Mutiny Uni/Multi pipelines are instrumented end-to-end. The active span is propagated through Mutiny subscription chains using a Mutiny Infrastructure hook so reactive operators do not lose trace context.

Configuration

Install & Initialize

One Maven extension. Two properties. Full Quarkus observability.

pom.xml + application.properties
<!-- pom.xml — add dependency -->
<dependency>
  <groupId>io.tigerops</groupId>
  <artifactId>quarkus-tigerops</artifactId>
  <version>0.1.0</version>
</dependency>

# application.properties
quarkus.tigerops.api-key=${TIGEROPS_API_KEY}
quarkus.tigerops.service-name=my-quarkus-app
quarkus.tigerops.environment=production
quarkus.tigerops.trace-hibernate=true
quarkus.tigerops.trace-rest-client=true
quarkus.tigerops.slow-query-threshold-ms=100

# Custom span via annotation
import io.tigerops.Traced;
import jakarta.ws.rs.*;

@Path("/orders")
public class OrderResource {

    @POST
    @Traced("order.create")  // <-- custom span name
    public Response createOrder(OrderRequest request) {
        // span attributes from method params
        TigerOps.currentSpan()
            .setAttribute("order.items", request.items().size());

        Order order = orderService.create(request);
        return Response.status(201).entity(order).build();
    }
}

# Build native image
./mvnw package -Pnative
FAQ

Common Questions

Does TigerOps work with Quarkus native executables compiled with GraalVM CE?

Yes. The extension registers all required reflection entries and resource bundles during the Quarkus augmentation phase. Both GraalVM CE 21+ and Mandrel 23+ native compilers are supported. Compilation does not require any additional native-image arguments.

Can TigerOps instrument Quarkus Scheduler and Quartz jobs?

Yes. Methods annotated with @Scheduled are traced automatically. The span includes the scheduled method name, trigger expression (cron or fixed-delay), execution time, and any exception thrown. Quartz job execution uses the same mechanism.

How does TigerOps integrate with Quarkus OpenTelemetry extension?

The quarkus-tigerops extension is built on top of quarkus-opentelemetry. If you already have quarkus-opentelemetry in your project, TigerOps registers an additional OTLP exporter targeting the TigerOps ingest endpoint alongside any existing exporters.

Does TigerOps support Quarkus multi-module projects with shared libraries?

Yes. Each Quarkus application module gets its own TigerOps configuration. Shared library modules that contain CDI beans are instrumented at the application build time. Resource method interceptors are applied to all modules in the dependency graph.

How do I capture custom business metrics from Quarkus MicroProfile Metrics?

TigerOps reads MicroProfile Metrics (Counters, Gauges, Timers, Histograms) annotated with @Counted, @Timed, and @Gauge and forwards them as OTLP metrics. No additional code is needed if you already use MicroProfile Metrics annotations.

Get Started

Full Quarkus Observability with GraalVM Native Support

RESTEasy traces, Hibernate query spans, CDI interceptor timing, and native image compatibility — no reflection required.