When your error tracker cuts you off: a same-day exit plan

A hosted error tracker differs from the rest of your infrastructure in one way: it can stop working for reasons that have nothing to do with you. An account gets suspended, a plan is discontinued, a vendor is acquired and the product is wound down, a service leaves your region. From your production’s point of view these are all the same incident: events go nowhere, and you find out late.

What follows is the order of operations for that day. Not an argument about who was right — just how to get visibility back.

What breaks in the first hour

It is worth naming what you lost, because it is more than a screen with a list of errors.

WhatConsequence
Event ingestErrors keep happening but are recorded nowhere. Tomorrow you will not know that the regression started today
AlertsNobody gets paged on a spike. Silence in the channel no longer means things are fine
HistoryThe data sits in an account you cannot reach. All you can carry out is what you had already exported
Release cycleYou can still ship, but you will be rolling back on user complaints instead of an error graph

The first action is not to shop for a replacement — it is to tell the team that error monitoring is down for the day and releases are flying blind. The second is to check the SDK side: your app keeps posting to an endpoint that answers 401 or does not answer at all. Official Sentry SDKs handle this gracefully (sending is asynchronous, the queue is bounded), but it is worth confirming in short-lived processes and workers that call Flush before exit.

What you can do in one evening

If your apps are wired up with an official Sentry SDK, the replacement is built from things you already have: a server, Docker, and a DSN string in a config file.

  1. Stand up an instance. Gotcha is a single Go binary that needs PostgreSQL and ClickHouse. No Kafka, no Redis. The quickest start is docker compose up -d; 2 vCPU / 2 GB RAM / 20 GB SSD is enough to begin with, 4 vCPU / 4 GB RAM / 40 GB SSD and up for production traffic. Details on Installation.
  2. Register. Open /register on your instance; the first user becomes an administrator. /onboarding creates the organization and the first project in one form.
  3. Swap the DSN. The project’s “Setup” page gives you a ready DSN shaped like https://<public_key>@<gotcha_host>/<project_id> — the same format official Sentry SDKs expect. One line changes in Sentry.init(...) or in an environment variable; application code stays untouched.
  4. Verify the first event. Trigger a test error: it shows up under “Issues” within seconds.
  5. Restore alerting. Under “Alerts”, add a delivery channel (email, webhook or Telegram) and rules: new issue, regression, spike. Until this step, visibility is restored only for whoever is watching the screen.

The full walkthrough with per-language snippets: How to migrate from Sentry to self-hosted Gotcha.

What will not come with you

An honest list, so you do not spend the evening trying.

WhatHow it actually is
Event and issue historyDoes not migrate. You keep what you exported before losing access; new events accumulate from the DSN swap onwards
Alert rulesConfigured from scratch. Half an hour, but budget for it
Chat and issue-tracker integrationsReconnected to your own instance
Symbolication, source mapsUploaded again for the new releases
environment, release, tags, breadcrumbsCarry over as they are — these are SDK fields, not vendor features

Metrics are a separate track: they do not go through the Sentry SDK but over OTLP to POST /v1/metrics — see Metrics. If the old tracker had no metrics, this can wait.

Why nobody outside can switch your instance off

This is mechanics, not a slogan. A self-hosted instance has no external account owner: you issue the ingest keys, you create the users, the data sits in your own database. There is no party holding a revoke button, because there is no party.

The second layer is the license. Gotcha is Apache-2.0: the right to run, modify and fork the code is yours regardless of what happens to the project later. Even if development stops, a running instance keeps running and the sources stay available.

The third layer is the way back out. Data exports to CSV, JSON and NDJSON (in the background, filtered by time and environment, PII masked by default), and moving back to another tracker is a DSN change again, because the SDKs are the official ones with no forks or patches. A tool you cannot leave is vendor lock-in too, just pointed the other way.

So it does not happen twice

A checklist worth going through once, on a day that is not the incident:

Next

Gotcha is Apache-2.0 licensed, with sources open on GitHub and GitFlic.