Skip to main content

Overview

Heroku’s Fir generation exports logs, metrics, and traces as OpenTelemetry (OTLP) signals. A telemetry drain forwards those signals straight to Bronto’s OTLP endpoint — no Logplex, proxy, or intermediate collector. This guide sends the logs signal. (Cedar-generation apps use Logplex log drains instead.)

Prerequisites

Add the telemetry drain

Add a drain on your app pointing at Bronto’s ingestion endpoint, sending only the logs signal:
heroku telemetry:add https://ingestion.<REGION>.bronto.io \
  --app <YOUR_APP_NAME> \
  --signals logs \
  --transport http \
  --headers '{"x-bronto-api-key":"<YOUR_API_KEY>","x-bronto-dataset":"<YOUR_DATASET_NAME>","x-bronto-collection":"<YOUR_COLLECTION_NAME>"}'
Set <REGION> to eu or us. Heroku sends OTLP/HTTP logs to the /v1/logs path on this endpoint. Telemetry drains are additive, so running this command adds Bronto alongside any existing drains. To forward traces and metrics too, change --signals to logs,traces,metrics.

Verify in Bronto

Open Search and filter by service.name = <YOUR_DATASET_NAME>. Generate activity in your app (a web request, or heroku logs --app <YOUR_APP_NAME>) and confirm entries appear within a minute. List configured drains with heroku telemetry --app <YOUR_APP_NAME>.

What you will see in Bronto

Logs arrive as OTLP records carrying the app’s stdout/stderr output plus Heroku resource attributes — service.name, severity, and timestamp. Platform logs (router, build, and dyno lifecycle events) are included alongside your application output.

Troubleshooting

  • No logs? Run heroku telemetry --app <YOUR_APP_NAME> and confirm the drain is listed with transport: http and logs in its signals.
  • Getting 401 errors? Verify the x-bronto-api-key value is a valid Bronto key with the Ingestion role.
  • Wrong dataset or collection? Check the x-bronto-dataset and x-bronto-collection headers in the drain’s --headers JSON.