77 lines
2.7 KiB
Markdown
77 lines
2.7 KiB
Markdown
# Observability
|
|
|
|
Paperclip ships with **opt-in** OpenTelemetry auto-instrumentation for the
|
|
server process. When activated it produces **traces only** — no metrics and no
|
|
logs are exported by this integration. The OTel packages are *optional peer
|
|
dependencies*: they are not in the default lockfile and are loaded dynamically
|
|
only when an operator turns the feature on.
|
|
|
|
When `OTEL_EXPORTER_OTLP_ENDPOINT` is unset, none of the `@opentelemetry/*`
|
|
packages are imported and there is zero runtime overhead.
|
|
|
|
## Enabling tracing
|
|
|
|
### 1. Install the OTel peer dependencies
|
|
|
|
Install the SDK, the auto-instrumentations bundle, the resources/semconv
|
|
helpers, and **one** exporter matching your chosen OTLP protocol.
|
|
|
|
Common to every protocol:
|
|
|
|
```bash
|
|
pnpm add \
|
|
@opentelemetry/sdk-node \
|
|
@opentelemetry/auto-instrumentations-node \
|
|
@opentelemetry/resources \
|
|
@opentelemetry/semantic-conventions
|
|
```
|
|
|
|
Then add the exporter for the protocol you intend to use:
|
|
|
|
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Exporter package |
|
|
| ----------------------------- | --------------------------------------------- |
|
|
| `grpc` (default if unset) | `@opentelemetry/exporter-trace-otlp-grpc` |
|
|
| `http/protobuf` | `@opentelemetry/exporter-trace-otlp-proto` |
|
|
| `http/json` | `@opentelemetry/exporter-trace-otlp-http` |
|
|
|
|
For example, for the default gRPC path:
|
|
|
|
```bash
|
|
pnpm add @opentelemetry/exporter-trace-otlp-grpc
|
|
```
|
|
|
|
### 2. Set the environment
|
|
|
|
Minimal setup:
|
|
|
|
```bash
|
|
# Required — turns the feature on. Point at your collector.
|
|
# For grpc this is the gRPC target (typically port 4317). For the HTTP
|
|
# protocols give the collector's BASE URL (typically port 4318) — the
|
|
# exporter appends /v1/traces itself.
|
|
export OTEL_EXPORTER_OTLP_ENDPOINT="http://otel-collector:4317"
|
|
|
|
# Optional — protocol. Defaults to grpc when unset.
|
|
# Valid values: grpc | http/protobuf | http/json
|
|
export OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
|
|
|
|
# Optional — service identity attached to every span.
|
|
export OTEL_SERVICE_NAME="paperclip"
|
|
export OTEL_SERVICE_VERSION="2026.5.0"
|
|
```
|
|
|
|
If `OTEL_EXPORTER_OTLP_PROTOCOL` is set to an unrecognized value, Paperclip
|
|
logs a single warning and falls back to gRPC.
|
|
|
|
If `OTEL_EXPORTER_OTLP_ENDPOINT` is set but the OTel packages are not
|
|
installed, the server logs a single diagnostic line on boot and continues
|
|
without tracing — your server stays up.
|
|
|
|
## Scope
|
|
|
|
This integration emits **traces only**. Metrics and log exporters are out of
|
|
scope and intentionally not configured here. Auto-instrumentations for
|
|
`fs`, `dns`, and `net` are disabled by default because they are too chatty
|
|
for this workload; everything else from
|
|
`@opentelemetry/auto-instrumentations-node` is on (HTTP, Express, PG, etc.).
|