APM and distributed tracing
Follow a request across services, see where the time went, and move from a slow span to the logs it produced. Instrument Java services with the VerOps agent, or send traces from any OpenTelemetry SDK.
- Java agent
- Java 11 and later
- Other languages
- Any OpenTelemetry SDK
- Ingest
- OTLP over HTTP, protobuf or JSON
- Views
- Service map, waterfall, flame graph
What you get
Service map
Services and the calls between them, built from your traces, with latency and errors on each service. Open a service to see its endpoints and dependencies.
Trace waterfall and flame graph
Read one trace as a timeline of spans, or as a flame graph that shows which calls made up the total duration.
Trace search
Query traces across services in the trace browser or with SQL in Data Explorer, and open any result in the waterfall.
Logs next to traces
Log lines that carry a trace ID link straight to their trace, so you can go from an error message to the request that caused it.
Service catalogue
The Applications page lists every service that reports traces, with health, ownership and tags, so missing or new services are easy to spot.
DocumentationCustom method rules
Add spans for your own classes and methods from the Java agent configuration, without changing application code.
What the Java agent instruments
The agent attaches with -javaagent and instruments these libraries automatically. Context is carried across thread pools, so asynchronous work stays in the same trace.
| Area | Covered |
|---|---|
| Inbound HTTP | Servlet containers and Spring Web MVC |
| Outbound HTTP | Apache HttpClient 4 and 5, OkHttp 3, the JDK 11+ HttpClient |
| Databases | JDBC |
| Messaging | Kafka producers and consumers |
| Concurrency | Executor tasks (Runnable and Callable) |
| Your code | Custom rules for chosen classes and methods |
How data gets in
- 01
Java services
Download the agent from Resources and add it to the JVM start command, with your backend URL, API key and service name as agent arguments.
java -javaagent:/opt/verops/verops-java-agent.jar=backendUrl=https://app.verops.io,apiKey=$VEROPS_API_KEY,serviceName=checkout-api -jar app.jar - 02
Any other language
Use the OpenTelemetry SDK for your language, or an OpenTelemetry Collector, and export OTLP over HTTP to ingest.verops.io.
- 03
Name your services
Set the service.name resource attribute. VerOps uses it, together with host and Kubernetes attributes, to place traces on the right service, host and pod.
Limits worth knowing
- The VerOps Java agent needs Java 11 or later. For other runtimes, use OpenTelemetry instrumentation.
- There is no continuous CPU or memory profiler. Performance analysis is span-based.
- The public ingest endpoint accepts OTLP over HTTP. To send gRPC, run your own OpenTelemetry Collector and forward over HTTP.
Read more in the docs
Try it on your own systems
Create a workspace, or tell us about your environment and we will walk you through it.