Source:
ocean/docs/adr/0039-sentry-v9-monitoring-implementation.md| ✏️ Edit on GitHub
ADR-003: Sentry v9 Advanced Monitoring Implementation
Date: 2025-07-30
Status: Accepted
Deciders: Engineering Team
Tags: monitoring, observability, error-tracking, performance
Context
We needed a comprehensive monitoring solution to track errors, performance, and user journeys in our production application. Our requirements included:
- Real-time error tracking with actionable insights
- Performance monitoring for critical user flows
- Cost-effective solution within free tier limits
- Privacy-compliant implementation (no PII leakage)
- Future-proof architecture using latest SDK versions
Initial investigation revealed our Sentry integration wasn't working due to a misconfigured DSN (trailing newline character) and we were not utilizing Sentry's full capabilities.
Decision
We decided to implement Sentry v9 with advanced monitoring features, specifically:
- Upgrade to Sentry v9 SDK (@sentry/React ^9.43.0) for latest features and API compatibility
- Implement User Flow Tracking using custom performance monitoring
- Add Cron Monitoring adapted for browser environment
- Optimize Sampling Rates for free tier (10K errors, 100K transactions/month)
- Create Comprehensive Error Filtering to reduce noise
- Track GraphQL and Stripe Operations for API performance insights
Consequences
Positive
- Complete Observability: Full visibility into user journeys, not just isolated errors
- Cost Efficiency: Optimized sampling keeps us within free tier limits
- Actionable Insights: Smart filtering reduces noise, surfaces real issues
- Performance Monitoring: Identifies bottlenecks in critical flows
- Future-Proof: Using v9 APIs ensures compatibility with future updates
- Developer Experience: Easy-to-use hooks and utilities for adding monitoring
Negative
- Sampling Trade-offs: 10% trace sampling means we miss 90% of transactions
- Browser Limitations: Some features (like native cron monitoring) aren't available in browser SDK
- Bundle Size: Sentry SDK adds ~50KB to bundle (mitigated by code splitting)
- Learning Curve: Team needs to understand new v9 APIs and monitoring patterns
Neutral
- Maintenance Overhead: Requires periodic review of sampling rates and alert rules
- Privacy Considerations: Must carefully manage what data is sent to Sentry
Implementation Details
1. Core Configuration (/src/lib/sentry.tsx)
Sentry.init({
dsn: import.meta.env.VITE_SENTRY_DSN?.trim(), // Fix: trim whitespace
tracesSampleRate: 0.1, // 10% in production
replaysSessionSampleRate: 0.01, // 1% in production
replaysOnErrorSampleRate: 1.0, // Always on error
sendDefaultPii: false, // Privacy first
})
2. User Flow Tracking (/src/lib/sentry-performance.ts)
// Track complete user journeys
const flow = new UserFlowTracker()
flow.startFlow('authentication')
flow.trackStep('enter-email', { email_domain })
flow.trackStep('verify-otp')
flow.completeFlow()
3. GraphQL Integration
// Automatic performance tracking for all queries
Sentry.startSpan({
name: `graphql.${operationName}`,
op: 'graphql.query',
attributes: { variables },
})
4. Error Filtering
// Ignore non-actionable errors
ignoreErrors: [
'ResizeObserver loop limit exceeded',
'chrome-extension://',
'NetworkError',
'Script error',
]
Alternatives Considered
- LogRocket: More expensive, includes session replay by default
- Datadog: Enterprise-focused, overkill for our needs
- Custom Solution: Too much maintenance overhead
- PostHog Only: Lacks robust error tracking capabilities
- Sentry v8: Would require migration later, missing new features
Migration Path
- ✅ Fix DSN configuration issue
- ✅ Upgrade to Sentry v9
- ✅ Implement user flow tracking
- ✅ Add GraphQL/Stripe monitoring
- ✅ Configure alerts and ownership
- 🔄 Monitor usage and adjust sampling rates (ongoing)
Lessons Learned
- Environment Variables: Always validate and trim environment variables
- SDK Versions: Stay current with major versions for better APIs
- Sampling Strategy: Start conservative, increase based on actual usage
- User Journeys: Flow tracking provides more value than isolated error tracking
- Documentation: Comprehensive setup guides essential for team adoption
References
- Sentry v9 Migration Guide
- Sentry Performance Monitoring
- Sentry Free Tier Limits
- Implementation PR: #[TBD]
- Setup Documentation:
/docs/sentry-v9-features.md - Alerts Guide:
/docs/sentry-alerts-setup.md