Every deploy is a gamble. You ship new code, refresh the monitoring dashboard, and wait. Did the error rate spike? Is the crash-free rate holding? Which version actually broke? Release health monitoring gives you answers instantly by tagging every error with the exact version that caused it. Instead of hunting through releases to find the culprit, you see at a glance which deploy introduced the regression—and can roll it back before your users notice. For teams following structured error alerting practices, release tracking is the missing piece that ties alerts to deploys.
This guide covers how to set up release tracking, tie errors to specific deploys, and use release health metrics to catch regressions fast.
Why tag errors with a release
Without release tracking, an error is just an error. With it, every exception carries the version and deploy timestamp that caused it. This turns a noisy error feed into a deployment audit trail.
Concretely, release health monitoring lets you:
- Find the culprit deploy instantly. When errors spike at 3 p.m., you know exactly which version shipped at 2:58 p.m.
- Catch regressions before scaling. A new version with a subtle memory leak shows up in your crash-free rate metrics as soon as sessions start arriving.
- Automate rollback decisions. Alert when a release's error rate jumps 30% and trigger a page to on-call so they can decide whether to rollback immediately.
- Track stability across your release cycle. See which versions are stable and which were hotfix forks, so future team members learn what patterns work.
The mechanism is simple: before you ship, set a release identifier in your SDK config. Every event then carries that identifier, and the dashboard groups events by release automatically.
Setting the release in your SDK
The Sentry SDK (which LightTrace speaks) captures the release from a simple config field at startup.
// Node.js / Express
import * as Sentry from "@sentry/node";
Sentry.init({
dsn: "https://<key>@your-lighttrace-host/1",
release: "api@1.4.2",
environment: "production",
});
// React / Next.js
import * as Sentry from "@sentry/react";
Sentry.init({
dsn: "https://<key>@your-lighttrace-host/1",
release: `web@${process.env.REACT_APP_VERSION}`,
environment: "production",
});
# Django
import sentry_sdk
sentry_sdk.init(
dsn="https://<key>@your-lighttrace-host/1",
release="backend@1.4.2",
environment="production",
)
The format is flexible—web@1.4.2 or api-2026-07-03-main both work. What matters is consistency: use the same scheme across deploys so you can sort and search by version.
Automate the release identifier in CI. Read the git commit hash or version file at build time and bake it into your config. This eliminates manual mistakes and ensures every deploy is tracked.
Identifying which deploy broke things
Once releases are tagged, the dashboard lets you pivot on them instantly. When you open an issue, you see:
- Which releases are affected
- The first release where the error appeared (the regression)
- The latest version still showing the error
- Error counts by release, so you can see the spike
This transforms debugging. Instead of "there's a TypeError in the cart flow," you now know "cart TypeError first appeared in web@1.4.3, peaked at 847 events, and is still happening in 1.4.4."
The first release where an error appears is called the regression, and it's how you know which deploy to blame. It's the exact opposite of the last version that worked, so you can checkout that commit and compare. Tying this back to your error triage process means you prioritize by impact and by recency—the newest regressions bubble to the top of the backlog.
You can also correlate errors with your release history by looking at the exact times. A spike at 14:23 UTC that correlates with a deploy at 14:21? That's your culprit. No guesswork.
Combining release data with crash-free metrics
Release tagging gets even more powerful when paired with crash-free rate tracking. The dashboard shows:
- Release health at a glance: new version shipped at 2% crash-free rate? You know immediately it's broken.
- User impact: how many of your active sessions are on each version, so you know how many people are suffering.
- Time-to-stability: how long from release to crash-free rate returning to normal, which tells you the length of your typical rollback cycle.
A single metric—crash-free sessions per release—often tells you more than raw error counts. One new error affecting 100,000 users is a catastrophe; one hundred new errors affecting 10 users is a dev environment leak. Crash-free rate answers the question that matters: did we break the user experience?
Setting up alerts on release changes
Error alerting works best when tied to releases. Instead of alerting on absolute thresholds (every error spikes an alert), you can alert on change:
- New regression in a release: if release X has an error that previous versions don't, page on-call.
- Release health drop: if version Y's crash-free rate falls below 95%, trigger an alert.
- Deploy frequency: if you're shipping more than three times daily, surface that separately so it's not noise.
These release-aware alerts cut alert fatigue because they focus on what changed, not what's high. A service that errors 1,000 times every day is the baseline; a service that errors 2,000 times on a new deploy is the regression you care about.
Integrating with your deploy pipeline
Release tracking is most powerful when it lives in your CI/CD. Tag the release at build time, not by hand:
# .github/workflows/deploy.yml
- name: Set release version
run: |
VERSION=$(git rev-parse --short HEAD)
echo "RELEASE_VERSION=web@$VERSION" >> $GITHUB_ENV
- name: Build and deploy
run: npm run build && npm run deploy
env:
VITE_RELEASE: ${{ env.RELEASE_VERSION }}
Then in your app startup, read that variable. This way every artifact is born with a release tag, and the mapping from code to production is automatic.
Some teams also create a release marker in LightTrace when they deploy, so the timeline shows exactly when code hit production:
# After deploy succeeds
curl -X POST \
-H "Authorization: Bearer $LIGHTTRACE_TOKEN" \
https://your-lighttrace-host/api/releases/ \
-d '{"version": "web@abc123def4", "url": "https://github.com/..."}'
This adds a deploy marker to the issue timeline, so you can see errors before and after a release side-by-side. It's the simplest way to connect the dots between how to debug production errors and knowing which version caused them.
From release data to fast rollbacks
The real value of release health monitoring is decision speed. When an alert fires saying "release 1.4.4 has 5x normal error rate," you have everything you need to decide:
- Which issues are new in this release (check the issue detail, filter by release).
- How many users are affected (crash-free rate on this release).
- Which errors were in the previous stable version (compare release 1.4.3 side-by-side).
- When to rollback (the moment your crash-free rate drops below an SLO you set).
Reducing MTTR becomes systematic: tagged releases + fast alerts + a pre-written runbook = rollback in minutes, not hours. When incidents do hit, your on-call team can reference this exact pattern: on-call for developers benefit most from release-aware dashboards that show what changed, not just what's broken. Teams that ship multiple times daily rely on this exact pattern to sleep well at night.
Start tracking errors in minutes
Start tracking releases and see which deploy introduced every error — tag your SDK with a release identifier and point it at LightTrace to get started free.
Release tracking is the difference between "we shipped something bad" and "we shipped something bad and fixed it before breakfast." Set it up once, and every future deploy gets instant visibility into stability—so you can ship faster, not more carefully.