Seentics Observe

Logs, errors, traces and metrics for every service.

Your analytics says conversion dropped at 14:20. Observe shows you the request that broke, the bug behind it and the service it came from — in the same product, on the same clock.

OpenTelemetry native · no agent · included with your Seentics plan

observe.seentics.com/projects/acme
AAcme StoreLiveLast 1 hour
24h agonow
Throughput2.2%
4.9k/min
requests across all services
Error rate850%
3.8%
3.2k failed requests
p95 latency999+%
2.14s
95th percentile, all operations
Log volume7.4%
20.6k
lines ingested in this window

Requests

ok vs failed
okfailed

Latency

p50 · p95 · p99
p50p95p99

Services

worst first
ServiceThroughputErrorsp50p95p99Logs
payments-worker214/min18%740ms9.82s10.4s2.6k
checkout-service288/min16%612ms9.64s10.4s4.2k
api-gateway1.8k/min4.1%58ms1.92s9.71s8.4k
notification-worker184/min0.4%88ms210ms412ms662
auth-service1.4k/min0.3%11ms28ms61ms1.4k
catalog-service962/min0.1%34ms92ms180ms3.3k

Top error groups

ProviderTimeout

upstream timeout after 10000ms calling api.stripe.com/v1/payment_intents

payments-worker · payments.authorise42s ago
1.8k
events
UpstreamError

checkout-service returned 502 for POST /api/v1/checkout

api-gateway · POST /api/v1/checkout1m ago
1.2k
events
PoolExhausted

worker pool exhausted — 32/32 slots blocked on provider I/O

payments-worker · pool.acquire9m ago
47
events
Logs

Search every line your services printed.

One query box over every service, with volume by level above it. Click a bar to narrow to the minute it happened in.

service:checkout-service duration_ms>2000 timeout
  • Field filters, numeric comparisons and free text in one box
  • Live tail that holds its place when you scroll back
  • Any line with a trace id is one click from its request
  • The field panel counts what is actually in the matches
observe.seentics.com/projects/acme/logs
20,639 events1.4 GB scanned340 ms
Errors

Forty thousand error lines. Nine bugs.

Faults are fingerprinted as they arrive — exception type, normalised message, top application frame — so the page shows the bugs rather than the volume.

  • Ids and uuids normalised out, so one bug stays one row
  • Users affected, first seen, and whether it is accelerating
  • Resolve, ignore or reopen; a resolved group that fires again returns
  • Sample events with the stack and a link to the trace
Traces

Watch one request cross every service.

The 10-second checkout is three sequential retries against a payment provider. Obvious in a waterfall, invisible in a log list.

  • Search by service, operation, duration or status
  • Latency scatter — click the outlier, land on its trace
  • Span detail with attributes, events and exceptions
  • Jump from a span to the logs written while it ran
…/traces/4f2a91c8b7e3d5a6…
POST /api/v1/checkoutapi-gateway10.4s17 spans6 failed
payments-worker99%checkout-service1%catalog-service0%auth-service0%api-gateway0%notification-worker<0.1%
POST /api/v1/checkout
10.4s
auth.verify_token
14ms
POST checkout.create_order
10.4s
SELECT carts
9.00ms
SELECT cart_items
12ms
catalog.price_check
41ms
GET catalog:prices
3.00ms
SELECT products
22ms
INSERT orders
18ms
payments.authorise
10.3s
redis.get idempotency_key
2.00ms
POST api.stripe.com/v1/payment_intents
2.98s
POST api.stripe.com/v1/payment_intents
3.09s
POST api.stripe.com/v1/payment_intents
3.93s
UPDATE orders SET status
6.00ms
notifications.enqueue
3.00ms
metrics.record
1.00ms
Metrics

The numbers behind the alert.

Latency percentiles, throughput, error rate, memory, queue depth — whatever your services export, grouped by any label they carry.

  • Browse what is reported instead of guessing metric names
  • Group by service, route, status class, host or queue
  • p50 / p95 / p99, rate, sum, min, max — per panel
  • Gaps stay gaps, so a stopped exporter looks like one

Why here

Your analytics already told you when. This tells you why.

Symptom to cause in four moves, without leaving the product.

  1. 01

    Analytics

    Checkout conversion falls off a cliff at 14:20.

  2. 02

    Observe · logs

    Log volume for 14:20 has an error band that was not there at 14:00.

  3. 03

    Observe · errors

    One group, accelerating: ProviderTimeout, 1,842 events, 396 users.

  4. 04

    Observe · traces

    The trace behind it: three sequential retries, 10.3 of 10.4 seconds.

One product, one session

The chart that dropped and the traces that explain it are behind the same login, scoped to the same site. No second tab, no second vendor, no re-explaining which service is which.

One clock

Both halves resolve the same window from the same URL. Most teams spend the first twenty minutes of an incident lining up two tools that disagree about what "last hour" means.

One bill

Observability is an allowance on the plan you already have — ingest volume and retention, not another seat count.

Setup

If you speak OpenTelemetry, you are done.

No proprietary agent, no sidecar, no rewrite. One OTLP endpoint takes traces, logs and metrics; anything that can POST JSON can send logs directly.

  1. 1

    Create an ingest key

    One key per project, scoped to that project only. Rotate or revoke it without touching anything else.

  2. 2

    Point your exporter at it

    Standard OTLP over HTTP. If you already run OpenTelemetry, this is two environment variables.

  3. 3

    Read it beside your analytics

    Traffic dropped at 14:20; the traces from 14:20 are one click away, in the same product.

.env
# Every OpenTelemetry SDK reads these — no code change required.
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.seentics.com/api/v1/observability/ingest
OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer $SEENTICS_INGEST_KEY
OTEL_SERVICE_NAME=checkout-service
OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production,service.version=2.14.3

Pricing

Free to start. Pay for what you actually ingest.

Observability alone, or bundled with Analytics and Uptime in one suite plan.

Over your ingest allowance, writes are throttled rather than billed — nothing is charged that you did not agree to first.

FAQ

Questions worth asking first.

No. Ingest is OTLP over HTTP, so any OpenTelemetry SDK or collector already in your stack points at it with two environment variables. If you are not using OpenTelemetry, plain JSON log ingest works with anything that can POST.

Point one exporter at it and see.

Two environment variables, and the next incident arrives with a trace attached.