APM and distributed tracing
See where every request spends its time
Instrument services with upstream OpenTelemetry SDKs, your own OpenTelemetry Operator or zero-code eBPF on Linux. Tracix rolls spans up into rate, errors and latency for every service and endpoint, and links each trace to its logs and the Kubernetes pod it ran on.
- Upstream OpenTelemetry SDKs
- 12 languages in Setup
- p50 · p95 · p99 latency
How it works
From the first span to a release you can trust
Instrumentation is standard OpenTelemetry, so it keeps working with any backend that speaks OTLP. Everything after export happens in your own workspace.
- 01InstrumentAdd the OpenTelemetry agent or SDK for your language, let your OpenTelemetry Operator inject it, or turn on eBPF in the collector.
- 02ExportServices send OTLP over gRPC or HTTP to your workspace, with an ingest key for each environment.
- 03MeasureSpans roll up every minute into rate, errors and p50, p95 and p99 latency for each service and endpoint.
- 04InvestigateFind a slow trace, read its spans, logs and exception, and see the pod and node it ran on.
- 05CompareEach new version is detected and compared with the one before it, so a faulty release stands out.
Services
Every service with its rate, errors and latency
The service inventory reads each service's server and consumer spans, so every service gets throughput, error rate, p50, p95 and p99 latency and a health state. Open one to see its transactions, dependencies, errors, logs, profiles and deployments.
- The service map draws calls between services and the databases, queues and hosts they use
- Error groups collect failures by service, operation and message, with the stack parsed per language
- Runtime metrics for the JVM, .NET, Node.js, Python and Go sit beside each service's traces
Instrumentation
No Tracix SDK. OpenTelemetry from end to end.
Tracix reads OTLP from the upstream SDKs and agents, so your code stays vendor-neutral. Setup writes the exact configuration for your platform, language and method, then checks that the first spans arrive.
Agents and SDKs
Java, .NET, Node.js, Python, Go, Ruby, PHP, C++, Rust, Swift, Erlang and any SDK that reads OTEL_ variables.
Kubernetes injection
Your own OpenTelemetry Operator injects agents for Java, .NET, Node.js and Python as pods start.
Zero-code eBPF
OBI in the collector records HTTP, gRPC and database calls on Linux, with no code or image changes.
Instrumentation health
See which SDK and version each service runs, which signals it sends and which deprecated attributes it uses.
Deployments
Every release, judged by its own traffic
Tracix records a deployment when a new service.version starts serving, when Kubernetes rolls out a workload, or when GitHub, GitLab or your CI reports one. After 30 minutes of traffic it compares the new version with the one before and marks the release healthy or faulty.
- Requests, error rate and p50, p95 and p99 latency, before and after
- Faulty on a significant rise in errors, a new error signature or a p95 at least 1.5 times higher
- Deployment, rollout and config-change markers on each service's charts
Better together
A slow trace is rarely only an application problem
Traces share one workspace with your logs, hosts, clusters and network, so the evidence for a slow request is a click away.
- Log managementSDK logs arrive on the same OTLP push, and each trace's Logs tab shows the lines it wrote.Learn more
- Infrastructure monitoringEach service's infrastructure tab shows the pods and hosts it runs on, with their metrics.Learn more
- Continuous profilingeBPF CPU profiles show which functions used the CPU in the service you are tracing.Learn more
Languages and runtimes
How each language gets instrumented
Agents and SDKs export OTLP straight to your workspace. Kubernetes injection uses your own OpenTelemetry Operator; Tracix does not ship one.
| Language | Agent or SDK | What it takes | Operator injection | Runtime metrics |
|---|---|---|---|---|
| Java and Kotlin | OpenTelemetry Java agent | Restart with the agent | Yes | Yes |
| .NET | Automatic instrumentation | Restart with the agent | Yes | Yes |
| Node.js | Auto-instrumentation | Restart with the agent | Yes | Yes |
| Python | Auto-instrumentation | Restart with the agent | Yes | Yes |
| Go | OpenTelemetry Go SDK | A small code change | Traces only, eBPF sidecar | Yes |
| PHP | Auto-instrumentation extension | Extension and Composer packages | SDK in the image | Not yet |
| Ruby | OpenTelemetry Ruby SDK | Gemfile and initializer | SDK in the image | Not yet |
| Erlang and Elixir | OpenTelemetry SDK | Dependencies and a setup call | SDK in the image | Not yet |
| Swift on the server | swift-otel | A package and a few lines | SDK in the image | Not yet |
| C++ and Rust | OpenTelemetry SDK | Spans in your code | SDK in the image | Not yet |
OBI, the eBPF instrumentation in the collector, works with any of these languages on Linux kernel 5.8 or later with BTF. It records each request at the protocol level, without spans from inside the process. AWS Lambda functions use the OpenTelemetry layers for Java, Node.js, Python and Ruby.
Do I need a Tracix agent in my code?
Can Tracix trace a service without code changes?
Can I sample traces?
Does Tracix ship a Kubernetes operator?
Send your first trace in minutes
Create an ingest key, set the standard OTEL_ variables in your service and let Setup confirm the first spans.