24observe
checking… Start free
Tracing · OpenTelemetry-native

Traces that don’t live in a silo. They sit next to your logs.

Distributed tracing usually means a second tool, a second SDK, and a second place to look — so during an incident you are exporting spans from one product and grepping logs in another, aligning clocks by eye. 24Observe is OpenTelemetry-native: spans arrive as first-class, searchable events on the same timeline as your logs and metrics, the caller-callee relationships become a live service map, and AI-agent spans get first-class treatment. One pipeline, one query language, one timeline.

OTLP traces Searchable spans Live service map GenAI aware
app.24observe.com/explore?trace=9f2c
trace 9f2c4a… · 5 spans
checkout request
POST /checkout · api-gateway
root span812ms
200
→ charge() · payments-svc
child span740ms ⟵ slow
SLOW
log: gateway timeout, retrying
same timelineemitted in span
ERROR
Spans and the logs they emitted, one trace id, one timeline
The tracing problem

The trace and the log line should never have been in different tools.

A span tells you a request was slow. A log line tells you why. In most stacks those two facts live in two different products, and the entire skill of debugging distributed systems becomes the chore of reuniting them.

The promise of distributed tracing was always seductive: see a request travel across every service, find the hop that hurt. The reality, for most teams, is a tracing tool that is genuinely good at showing you where the time went and completely silent on what happened there — because the logs that would explain the slow span are in a separate system, under a separate login, on a separate clock. You find the slow hop in one tab, copy the timestamp, switch tabs, guess at a filter, and try to find the log lines that were emitted during that exact window. The trace narrowed the search; it did not end it.

There is a quieter tax, too. A second tool means a second SDK, a second sampling configuration, a second bill with its own per-span meter, and a second integration to keep alive as your services change. Teams end up rationing traces — sampling aggressively, instrumenting partially — for the same reason they ration logs: the tool that was supposed to help them understand the system charges most at the moment they most need it.

24Observe takes the opposite position: traces are not a separate discipline requiring a separate product, they are another signal that belongs on the same timeline as everything else. Spans arrive over OpenTelemetry and become first-class, searchable events, queried in the same readable language as your logs, sitting beside the very log lines they emitted. Follow a trace id and you get the spans and the logs, in order, without ever leaving the page. The trace tells you where; the logs right next to it tell you why; and you never had to reunite them because they were never apart.

Tracing that lives in its own silo answers “where did the time go” and leaves “why” in another tool. We keep the span and the log line on the same timeline, because that is where you actually debug.
What you get

Open standards in. Searchable spans and a live map out.

We are precise about what tracing here is and is not. It is OpenTelemetry-native ingest, span search, request reconstruction, and a continuously-updated service topology. It is built to make investigation fast, not to be a standalone profiler.

OpenTelemetry-native

Spans arrive over OTLP — the open standard. No proprietary SDK, no instrumentation rewrite, no lock-in. Point your existing exporter at the endpoint.

Spans as first-class events

Each span is searchable and structured — trace id, parent, service, operation, duration, attributes — queried in the same readable language as your logs.

Follow a request end to end

Filter to a trace id and gather every span the request produced across every service it touched, in order, with timings — and the logs alongside them.

A live service topology

Caller-callee relationships become dependency edges in the context graph, rendered as a topology map with a health overlay. Blast radius at a glance.

GenAI-aware spans

Spans from model calls, tool calls, and agent steps have their AI attributes promoted — content searchable, tokens rolled into cost. Agent observability →

One allowance, no span meter

Traces share the same monthly volume allowance as logs and metrics, accepted compressed. Instrument thoroughly without a separate per-span bill.

Span plus log

Where the time went, and what happened there.

Reconstruct the request, not just the span

A trace id is the thread that ties a request together. Pull on it and every span the request created unspools in order — the gateway that received it, the service that called the database, the dependency that timed out — each with its duration, so the slow hop is obvious. That much, any tracing tool offers. The difference here is what sits beside those spans: the actual log lines your code emitted while each span was open, on the same timeline, in the same view. You see that the payment service took seven hundred milliseconds and the log line where it logged "gateway timeout, retrying" — cause and effect, together.

One query language for spans and logs

You do not learn a tracing query syntax and a logging query syntax. Spans are events, logs are events, and you filter both with the same readable language — by service, by attribute, by duration, by anything they carry. The skill you build searching logs is the skill you use reading traces, and a single query can span both.

Topology is the long-lived value

Any one trace is a snapshot of one request. The more durable thing tracing gives you is the shape of your system: which services call which, continuously discovered from real traffic and turned into a live dependency map. When an incident hits, that map is what tells you what is downstream of the failing component — the difference between "the database is slow" and "the database is slow and here are the six services your customers will notice it through." The context graph keeps that picture current from your spans without you drawing a single diagram.

Evidence the analyst can use

Because spans and service relationships are first-class, the AI analyst can reason over them when it investigates an incident — using the dependency map to scope blast radius and the spans as part of the evidence behind a verdict. Your traces are not a performance artefact gathering dust; they are part of how the platform explains what is going wrong.

A worked example

Chasing a slow checkout across four services.

The everyday case distributed tracing exists for — and how it resolves when the spans and the logs are never in different tools.

Customers report that checkout feels sluggish. The metric confirms it — p95 latency on the checkout endpoint has crept past its budget — and the threshold alert has opened an incident. The question now is the hard one: checkout is not one service, it is a chain of them, so where is the time actually going?

You take a slow request's trace id and filter to it. Every span the request produced lays out in order: the API gateway received it and held it for eight hundred milliseconds, and almost all of that was spent waiting on a single child span — a call into the payments service. The gateway is not slow; it is patiently waiting on something downstream. In a tracing-only tool, that is where you would stop and switch tabs to go find out why.

Here you do not switch tabs. Sitting on the same timeline, inside that slow payment span, is the log line the service emitted: "gateway timeout, retrying." The payments service is itself waiting on an external payment gateway that has started timing out, and retrying — which is exactly why the span is slow and why customers feel it. The trace told you where; the log line right beside it told you why; the whole diagnosis took one filter and one read.

Now you want blast radius. The topology map, built continuously from these very traces, shows everything downstream of the payments service — which other flows route through it and will be feeling the same pain. You are not guessing at the scope of the incident; you are reading it. And because the slow dependency is implicated in an open incident, it is highlighted on the map, so the next person who looks sees the problem without being told where to look.

You hand the incident to the analyst to confirm, and its verdict lines up with what you found: the external payment gateway is the root cause, the retries are amplifying the latency, and the affected services are these. You flip to a fallback provider, the latency recovers, and you resolve the incident — having spent your time deciding what to do rather than reuniting spans and logs that should never have been separated.

It is worth noticing what did not happen in that walk-through. You never exported a trace and imported it somewhere else. You never copied a timestamp from a tracing tool into a log search and hoped the clocks agreed. You never had to remember which of your services depended on the payments path, because the map built from your own traces already knew. Each of those missing steps is a place where, in a two-tool world, an investigation stalls or takes a wrong turn — and removing them is most of what separates a five-minute diagnosis from a forty-minute one. The trace did not just show you where the time went; the system around it removed the friction between that fact and the fix.

The honest comparison

A separate tracing silo vs traces on your timeline.

The job
A standalone tracing tool
24Observe
Span and its logs
Two tools, two logins, aligned by eye.
One timeline, one trace id, side by side.
Query language
A tracing-specific syntax.
The same readable language as your logs.
Service map
A static diagram, or none.
A live topology with a health overlay.
AI-agent spans
Generic, undecorated.
AI attributes promoted; content and cost.
Pricing
A separate per-span meter.
One shared volume allowance.
Standard
Often a proprietary SDK.
OpenTelemetry-native, no lock-in.
Questions, answered

Tracing — FAQ.

How do I send traces?
Over OpenTelemetry, the open standard. Your services export spans via OTLP exactly as they already do for any OpenTelemetry-native backend — point the exporter at the endpoint and they land. There is no proprietary tracing SDK to adopt and no instrumentation rewrite. If your stack already emits OpenTelemetry traces, you are minutes from seeing them here.
What happens to a span once it arrives?
It becomes a first-class, searchable, structured event on the same timeline as your logs and metrics — not data locked in a separate tracing silo you context-switch into. Every span carries its trace id, parent, service, operation, duration, and attributes, so you query spans with the same readable language you use for everything else and read them right next to the log lines they were emitted alongside.
Can I follow one request across services?
Yes. Spans that belong to the same request share a trace id, so filtering to that id gathers every span the request produced across every service it touched, in order, with timings — and the logs emitted during those spans sit on the same timeline. You reconstruct the path of a single request without jumping between a tracing tool and a logging tool and lining up clocks by hand.
Do traces build a service map?
Yes, through the context graph. The caller-and-callee relationships in your spans are turned into service-to-service dependency edges in the operational context graph, which renders as a live topology map with a health overlay. So tracing does more than answer "what did this one request do" — it continuously answers "what depends on what," which is exactly the picture you need when you are deciding blast radius during an incident.
How do traces and logs work together?
They live in one place, on one timeline, queried in one language. That is the whole reason to keep them together: during an incident you are not exporting a trace from one product and grepping logs in another and trying to align timestamps. You filter to a trace id and the spans and the logs are already side by side, so cause and effect are visible instead of inferred.
What about traces from AI agents and LLM apps?
They get special treatment. Spans from GenAI calls — model invocations, tool calls, agent steps — have their AI-specific attributes promoted so the prompt and response content is searchable and the token usage rolls up into cost. If you run AI agents in production, your traces are not just performance data; they are the substrate for agent observability and agent security. See those pages for the full picture.
Is this a full APM with flame-graph waterfalls?
We are deliberate about what we claim. 24Observe is OpenTelemetry-native and treats spans as searchable, correlated events that feed a live service topology — that is what powers fast cross-service investigation and blast-radius reasoning. If your single requirement is a pixel-perfect flame-graph profiler, pair us with a dedicated profiling tool; if your requirement is to understand what a request did, what depends on what, and why an incident is happening, traces here are built to answer exactly that, alongside your logs, metrics, and detections.
Will traces blow up my bill?
Traces share the same monthly volume allowance as your logs and metrics, so you reason about one number rather than a separate per-span trace meter. Compressed bodies are accepted natively, so a busy trace pipeline travels at a fraction of its raw size. The pricing does not punish you for instrumenting thoroughly.
Do traces feed detections and the analyst?
Yes. Because spans are first-class events, they are part of the same substrate the security and reliability engine runs on, and the service relationships they create help the AI analyst reason about blast radius when it investigates an incident. A trace is not a dead-end performance artefact here — it is evidence the platform can use.
What do I need to start?
An OpenTelemetry trace exporter pointed at the endpoint. If you are already running the OpenTelemetry collector, it is a one-line destination change; the collector is the supported bridge for gRPC exporters. Within a minute your spans are searchable and your service relationships start appearing on the topology map. Collector setup →

Put your spans where your logs already are.

Send traces over OpenTelemetry and get searchable spans on one timeline with your logs, a live service topology, and GenAI-aware spans — no proprietary SDK, no separate silo, no per-span meter.