232 lines
4.5 KiB
Markdown
232 lines
4.5 KiB
Markdown
# Error Monitoring with Sentry
|
|
|
|
## Overview
|
|
This project uses **Sentry** for error tracking and performance monitoring.
|
|
|
|
## Setup
|
|
|
|
### 1. Create Sentry Account
|
|
1. Sign up at [sentry.io](https://sentry.io)
|
|
2. Create a new project
|
|
3. Select "React" as the platform
|
|
4. Copy your DSN
|
|
|
|
### 2. Configure Environment Variables
|
|
|
|
Add to `.env.production`:
|
|
```env
|
|
VITE_SENTRY_DSN=https://your-key@sentry.io/your-project-id
|
|
```
|
|
|
|
### 3. Sentry is Already Integrated
|
|
|
|
The following files have Sentry integration:
|
|
- `src/lib/sentry.ts` - Sentry initialization
|
|
- `src/main.tsx` - Sentry init on app start
|
|
- `src/components/ErrorBoundary.tsx` - Error boundary with Sentry
|
|
|
|
## Features
|
|
|
|
### 1. Error Tracking
|
|
All uncaught errors are automatically sent to Sentry:
|
|
```typescript
|
|
try {
|
|
// Your code
|
|
} catch (error) {
|
|
Sentry.captureException(error)
|
|
}
|
|
```
|
|
|
|
### 2. Performance Monitoring
|
|
Tracks page load times and API calls:
|
|
```typescript
|
|
tracesSampleRate: 0.1 // 10% of transactions
|
|
```
|
|
|
|
### 3. Session Replay
|
|
Records user sessions when errors occur:
|
|
```typescript
|
|
replaysOnErrorSampleRate: 1.0 // 100% on errors
|
|
replaysSessionSampleRate: 0.1 // 10% of normal sessions
|
|
```
|
|
|
|
### 4. Error Filtering
|
|
Filters out browser extension errors:
|
|
```typescript
|
|
beforeSend(event, hint) {
|
|
// Filter logic
|
|
}
|
|
```
|
|
|
|
## Manual Error Logging
|
|
|
|
### Capture Exception
|
|
```typescript
|
|
import { Sentry } from '@/lib/sentry'
|
|
|
|
try {
|
|
// risky operation
|
|
} catch (error) {
|
|
Sentry.captureException(error, {
|
|
tags: {
|
|
section: 'user-management',
|
|
},
|
|
extra: {
|
|
userId: user.id,
|
|
},
|
|
})
|
|
}
|
|
```
|
|
|
|
### Capture Message
|
|
```typescript
|
|
Sentry.captureMessage('Something important happened', 'info')
|
|
```
|
|
|
|
### Add Breadcrumbs
|
|
```typescript
|
|
Sentry.addBreadcrumb({
|
|
category: 'auth',
|
|
message: 'User logged in',
|
|
level: 'info',
|
|
})
|
|
```
|
|
|
|
### Set User Context
|
|
```typescript
|
|
Sentry.setUser({
|
|
id: user.id,
|
|
email: user.email,
|
|
username: user.name,
|
|
})
|
|
```
|
|
|
|
## Dashboard Features
|
|
|
|
### 1. Issues
|
|
View all errors with:
|
|
- Stack traces
|
|
- User context
|
|
- Breadcrumbs
|
|
- Session replays
|
|
|
|
### 2. Performance
|
|
Monitor:
|
|
- Page load times
|
|
- API response times
|
|
- Slow transactions
|
|
|
|
### 3. Releases
|
|
Track errors by release version:
|
|
```bash
|
|
# Set release in build
|
|
VITE_SENTRY_RELEASE=1.0.0 npm run build
|
|
```
|
|
|
|
### 4. Alerts
|
|
Configure alerts for:
|
|
- New issues
|
|
- Spike in errors
|
|
- Performance degradation
|
|
|
|
## Best Practices
|
|
|
|
### 1. Environment Configuration
|
|
```typescript
|
|
// Only enable in production
|
|
if (environment !== 'development') {
|
|
Sentry.init({ ... })
|
|
}
|
|
```
|
|
|
|
### 2. Sample Rates
|
|
```typescript
|
|
// Production
|
|
tracesSampleRate: 0.1 // 10%
|
|
replaysSessionSampleRate: 0.1 // 10%
|
|
|
|
// Staging
|
|
tracesSampleRate: 1.0 // 100%
|
|
replaysSessionSampleRate: 0.5 // 50%
|
|
```
|
|
|
|
### 3. PII Protection
|
|
```typescript
|
|
replaysIntegration({
|
|
maskAllText: true,
|
|
blockAllMedia: true,
|
|
})
|
|
```
|
|
|
|
### 4. Error Grouping
|
|
Use fingerprinting for better grouping:
|
|
```typescript
|
|
beforeSend(event) {
|
|
event.fingerprint = ['{{ default }}', event.message]
|
|
return event
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Errors Not Appearing
|
|
1. Check DSN is correct
|
|
2. Verify environment is not 'development'
|
|
3. Check browser console for Sentry errors
|
|
4. Verify network requests to Sentry
|
|
|
|
### Too Many Events
|
|
1. Reduce sample rates
|
|
2. Add more filters in beforeSend
|
|
3. Set up rate limiting in Sentry dashboard
|
|
|
|
### Missing Context
|
|
1. Add more breadcrumbs
|
|
2. Set user context after login
|
|
3. Add custom tags and extra data
|
|
|
|
## Cost Management
|
|
|
|
Sentry pricing is based on:
|
|
- Number of events
|
|
- Number of replays
|
|
- Data retention
|
|
|
|
Tips to reduce costs:
|
|
1. Lower sample rates in production
|
|
2. Filter out noisy errors
|
|
3. Use error grouping effectively
|
|
4. Set up spike protection
|
|
|
|
## Integration with CI/CD
|
|
|
|
### Upload Source Maps
|
|
```yaml
|
|
# In .github/workflows/deploy.yml
|
|
- name: Upload source maps to Sentry
|
|
run: |
|
|
npm install -g @sentry/cli
|
|
sentry-cli releases new ${{ github.sha }}
|
|
sentry-cli releases files ${{ github.sha }} upload-sourcemaps ./dist
|
|
sentry-cli releases finalize ${{ github.sha }}
|
|
env:
|
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
|
SENTRY_ORG: your-org
|
|
SENTRY_PROJECT: your-project
|
|
```
|
|
|
|
## Resources
|
|
|
|
- [Sentry React Documentation](https://docs.sentry.io/platforms/javascript/guides/react/)
|
|
- [Sentry Performance Monitoring](https://docs.sentry.io/product/performance/)
|
|
- [Sentry Session Replay](https://docs.sentry.io/product/session-replay/)
|
|
- [Sentry Best Practices](https://docs.sentry.io/product/best-practices/)
|
|
|
|
## Support
|
|
|
|
For issues with Sentry integration:
|
|
1. Check Sentry documentation
|
|
2. Review browser console
|
|
3. Check Sentry dashboard
|
|
4. Contact Sentry support
|