Sentry Exporter

Route OpenTelemetry traces and logs from multiple services to different Sentry projects through a single collector instance.

The Sentry Exporter routes telemetry from multiple services to different Sentry projects through a single collector instance. Without it, you'd need to configure separate DSNs for each project or set up additional routing connectors.

ScenarioRecommended Exporter
Single project, all services share one DSNotlphttp
Multiple projects, need per-service routingsentry
Dynamic environments with auto-provisioningsentry with auto_create_projects

The Sentry Exporter is included in otelcol-contrib, the pre-built OpenTelemetry Collector distribution. There is no build step required, just download and run otelcol-contrib with your configuration. For the full specification, see the source code.

In your Sentry account, create an Internal Integration with the required permissions:

  1. Navigate to Custom Integrations
  2. Click Create New Integration
  3. Choose Internal Integration (not Public)
  4. Give it a name (e.g., "OTEL Collector")
  5. Set permissions:
    • Organization: Read — required
    • Project: Read — required
    • Project: Write — required for auto_create_projects
  6. Click Save Changes
  7. After saving, click Create New Token
  8. Copy the token and store it securely, you won't be able to see it again
Copied
export SENTRY_AUTH_TOKEN="abc123..."

In your Sentry account, go to General Settings to find your organization slug. Alternatively, you can find it in your Sentry URL: https://sentry.io/organizations/{org-slug}/

ParameterTypeDescription
urlstringBase URL of your Sentry instance
org_slugstringYour Sentry organization slug
auth_tokenstringInternal Integration token

ParameterTypeDefaultDescription
auto_create_projectsboolfalseCreate missing projects automatically - requires one existing team
routing.project_from_attributestringservice.nameResource attribute for routing
routing.attribute_to_project_mappingmap-Map attribute values to project slugs
timeoutduration30sExporter timeout
httpobjectcollector defaultsStandard confighttp client settings (timeout, TLS, headers)
sending_queueobjectenabledQueue settings from exporterhelper

By default, the exporter routes telemetry based on service.name. A service with service.name: payments-api sends to a Sentry project with slug payments-api.

otel-collector-config.yaml
Copied
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

exporters:
  sentry:
    url: https://sentry.io
    org_slug: ${env:SENTRY_ORG_SLUG}
    auth_token: ${env:SENTRY_AUTH_TOKEN}

processors:
  batch:

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [sentry]
    logs:
      receivers: [otlp]
      processors: [batch]
      exporters: [sentry]

When services spin up dynamically (Kubernetes deployments, serverless functions), you may not have pre-created Sentry projects. Enable auto_create_projects to provision them on-demand.

Copied
exporters:
  sentry:
    # ... required fields
    auto_create_projects: true

When your service names don't match your Sentry project slugs (legacy naming, organizational conventions), map them explicitly.

Services not in the mapping fall back to using service.name as the project slug.

Copied
exporters:
  sentry:
    # ... required fields
    routing:
      attribute_to_project_mapping:
        orders-service: ecommerce-orders
        products-service: ecommerce-products
        api-gateway: ecommerce-gateway

Route by environment, team, or any other resource attribute instead of service name.

Copied
exporters:
  sentry:
    # ... required fields
    routing:
      project_from_attribute: deployment.environment
      attribute_to_project_mapping:
        production: prod-monitoring
        staging: staging-monitoring

The exporter respects Sentry's rate limits automatically:

  • Parses X-Sentry-Rate-Limits headers
  • Tracks per-project, per-category (traces/logs) rate limit deadlines
  • Returns throttle errors to the collector queue for retry
  • Falls back to 60-second backoff on HTTP 429 without headers

LimitationMitigation
Missing routing attribute drops dataEnsure service.name is set on all resources
First batch for auto-created projects may dropSubsequent data flows normally after provisioning
Deleted projects cause 403 until cache evictsAvoid deleting projects while collector is running
Single organization per exporterDeploy multiple exporters for multi-org setups
Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").