Tracing with OpenTelemetry
Any OpenTelemetry SDK or Collector can send traces and logs to LogSure over OTLP/HTTP. Each app gets its traces as waterfalls, its logs with a live tail, and each service's rate, errors and latency.
http/protobuf or http/json, plain or gzip. There is no gRPC yet, and metrics are coming: /_care/v1/metrics answers 501 for now.Point the exporter
Use your app's own host, which routes /_care/ to LogSure (Add the tracker), or the LogSure server's host, and the app's server key:
export OTEL_EXPORTER_OTLP_ENDPOINT=https://app.example.com/_care
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_HEADERS=x-logsure-key=cc_your_server_key
export OTEL_SERVICE_NAME=checkout
The exporter adds /v1/traces and /v1/logs itself. Authorization: Bearer <key> works as well as x-logsure-key.
In a Collector, use the otlphttp exporter:
exporters:
otlphttp/logsure:
endpoint: https://app.example.com/_care
headers:
x-logsure-key: ${env:LOGSURE_KEY}
service:
pipelines:
traces: { receivers: [otlp], exporters: [otlphttp/logsure] }
logs: { receivers: [otlp], exporters: [otlphttp/logsure] }
- Releases:
service.versionbecomes the release anddeployment.environment.namethe environment. - Errors: an exception recorded on a span, and a log at ERROR or above, also become an error occurrence linked to its trace. An exception and an ERROR log on the same span with the same message are one occurrence. See Tracking errors.
Traces

- The list: every trace with its root span's name and service, duration, span and error counts and HTTP status. Filter by service, name (a trailing
*matches a prefix), status, duration and attributes (key=value), and sort by time or duration. - One trace: the waterfall, its spans indented by parent with a bar for when each ran; the error issues it raised; and its logs. A span shows its attributes, events (an exception with its stack), links, resource and logs.
Logs
Search logs by words, severity (a number, or trace, debug, info, warn, error, fatal), service, trace or attribute, newest first. Live follows new ones as they arrive (GET …/logs/tail is a server-sent event stream). A log with a trace opens it.
Services

Each service's requests a minute, error rate and p50, p95 and p99 latency over the window, bucket by bucket, and its 50 busiest operations. They are counted from server, consumer and root spans.
Sampling, caps and retention
| Sample rate | Per app, from 0 to 1, in the app's tracing settings |
| Denied attributes | Keys never stored, per app. Credentials, cookies and authorization headers are never stored anyway, and values are scrubbed like error reports. |
SPAN_DAILY_CAP, LOG_DAILY_CAP | Spans and logs kept per app per UTC day, a million each by default. Past that, the exporter is told how many were rejected. |
TRACE_RETENTION_DAYS, LOG_RETENTION_DAYS | How long spans (7 days) and logs (14 days) are kept |
Tracing runs on the same server and database as everything else, built for small and medium volume. High-volume tracing is what the multi-node cluster is for.
The same is in the API (tracing), the terminal (:traces, :logs, :services) and over MCP (list_traces, get_trace, search_logs, get_service_stats, set_tracing_settings).