Skip to main content
Sherlock ingests OpenTelemetry data over OTLP/HTTP. Any SDK or collector that speaks OTLP can send to it. The Sherlock SDK for Node.js adds trace-linked exemplars on top, and the Go pages show how to get the same from the upstream Go SDK.

What every source needs

Types of sources

Node.js SDK

The Sherlock distribution of OpenTelemetry for Node.js instruments a service with one import and sends traces and metrics. It puts an exemplar on every histogram, so a chart links to the request behind a spike. It does not ship logs. The pino instrumentation stamps the trace id on each log line, and a pino OTLP transport or a collector sends the lines. See Ship and correlate logs.

Go

The upstream OpenTelemetry Go SDK needs no fork. A bootstrap file of about fifty lines sets delta temporality, an always-on exemplar filter, a trace_flags attribute on every exemplar, and the seconds histogram boundaries. otelhttp produces the HTTP traces and metrics, with http.route from the Go 1.22 mux pattern. Logs get the trace id through a slog handler; see Configuration.

Other OpenTelemetry SDKs

Java, Python, .NET, and the other OpenTelemetry SDKs send with their OTLP/HTTP exporters. Set the endpoint, the header, and the resource attribute. Exemplars depend on the SDK.

OpenTelemetry Collector

An OpenTelemetry Collector receives from many services and forwards to Sherlock with one otlphttp exporter. This is the usual way to send logs, and the way to add Sherlock next to an existing pipeline.

Which signal comes from where

Next steps

Node.js quickstart

First traces and metrics in ten minutes.

Go setup

The upstream Go SDK with one bootstrap file.

OpenTelemetry SDKs and collectors

Endpoint, header, and resource attribute for any OTLP sender.