Send your first signal

Create an API key, point a collector at your deployment, and see data arrive.

1 min read Updated Oct 21, 2026 Sentinel Platform Team
quickstartotlpapi-keygetting-started

Before you start #

You need a Sentinel API key with ingest access. Keys are created in Settings → API keys and carry the scopes your sender needs, so you can issue one per workload rather than sharing a single credential.

Your deployment's OTLP endpoint is the base address of your Sentinel host. Every signal type is accepted on the same host, under a per-signal path.

Shell
export SENTINEL_HOST=https://sentinel.example.com
export SENTINEL_API_KEY=sk_live_...

Point an OpenTelemetry Collector at Sentinel #

The OpenTelemetry Collector is the usual way to get data in. Export to the otlp exporter and set the endpoint to your host's /otlp path. The API key travels in the x-sentinel-api-key header.

collector.yaml
exporters:
  otlp/sentinel:
    endpoint: https://sentinel.example.com/otlp
    headers:
      x-sentinel-api-key: ${SENTINEL_API_KEY}

service:
  pipelines:
    traces:
      exporters: [otlp/sentinel]
    metrics:
      exporters: [otlp/sentinel]
    logs:
      exporters: [otlp/sentinel]

Restart the collector and give it a minute to start exporting. Your service appears under APM as soon as its spans land, and under Infrastructure once it reports a host name.

Send a span by hand #

To confirm the path end to end without standing up a collector, post a single OTLP document directly. One span is enough to make the service appear.

Send one span
curl -X POST "$SENTINEL_HOST/otlp/v1/traces" \
  -H "content-type: application/json" \
  -H "x-sentinel-api-key: $SENTINEL_API_KEY" \
  -d '{
    "resourceSpans": [{
      "resource": {"attributes": [
        {"key": "service.name", "value": {"stringValue": "checkout"}},
        {"key": "deployment.environment.name", "value": {"stringValue": "production"}}
      ]},
      "scopeSpans": [{"spans": [{
        "traceId": "5b8efff798038103d269b633813fc60c",
        "spanId": "eee19b7ec3c1b174",
        "name": "POST /checkout",
        "kind": 2,
        "startTimeUnixNano": "1544712660000000000",
        "endTimeUnixNano": "1544712661000000000",
        "status": {"code": 1}
      }]}]
    }]
  }'

What happens next #

  • The service shows up in APM with its latency and error rate.
  • Traces appear under APM → Traces as requests complete.
  • Logs arrive under Logs and are claimed by your log indexes.
  • Host and container names from your resource attributes populate Infrastructure.

Give every service a distinct service.name. It is the primary key for every service-level view, so two services sharing one appear as a single service with doubled traffic.

Next steps #

  • Logs — shape how logs are processed, stored and archived.
  • Dashboards and monitors — put the numbers you watch on a screen, and alert on them.
  • API keys — issue scoped credentials per workload.
  • Retention — set how long each signal type is kept.