mirror of
https://github.com/DRYTRIX/TimeTracker.git
synced 2026-01-04 10:40:23 -06:00
Implement comprehensive analytics and monitoring system with PostHog integration, complete observability stack (Prometheus, Grafana, Loki, Promtail), and CI/CD workflows for automated builds. Features: - Add PostHog telemetry integration with privacy-focused event tracking - Implement installation flow for opt-in telemetry configuration - Add telemetry management UI in admin panel with detailed transparency - Track key user events across all major features (projects, tasks, timer, etc.) Infrastructure: - Set up Prometheus for metrics collection - Configure Grafana for visualization dashboards - Integrate Loki and Promtail for log aggregation - Add separate analytics docker-compose configuration CI/CD: - Add GitHub Actions workflows for building and publishing Docker images - Implement separate dev and production build pipelines - Configure automated image publishing to registry Documentation: - Restructure documentation into organized docs/ directory - Add comprehensive guides for telemetry, analytics, and local development - Create transparency documentation for tracked events - Add CI/CD and build configuration guides Code improvements: - Integrate telemetry hooks across all route handlers - Add feature flags and configuration management - Refactor test suite for analytics functionality - Clean up root directory by moving docs and removing test artifacts Breaking changes: - Requires new environment variables for PostHog configuration - Docker compose setup now supports analytics stack Changes: 73 files changed, 955 insertions(+), 14126 deletions(-)
215 lines
5.6 KiB
Markdown
215 lines
5.6 KiB
Markdown
# Analytics and Monitoring
|
|
|
|
TimeTracker includes comprehensive analytics and monitoring capabilities to help understand application usage, performance, and errors.
|
|
|
|
## Overview
|
|
|
|
The analytics system consists of several components:
|
|
|
|
1. **Structured JSON Logging** - Application-wide event logging in JSON format
|
|
2. **Sentry Integration** - Error monitoring and performance tracking
|
|
3. **Prometheus Metrics** - Performance metrics and monitoring
|
|
4. **PostHog Analytics** - Product analytics and user behavior tracking
|
|
5. **Telemetry** - Opt-in installation and version tracking
|
|
|
|
## Features
|
|
|
|
### Structured Logging
|
|
|
|
All application events are logged in structured JSON format to `logs/app.jsonl`. Each log entry includes:
|
|
|
|
- Timestamp
|
|
- Log level
|
|
- Event name
|
|
- Request ID (for tracing requests)
|
|
- Additional context (user ID, project ID, etc.)
|
|
|
|
Example log entry:
|
|
```json
|
|
{
|
|
"asctime": "2025-10-20T10:30:45.123Z",
|
|
"levelname": "INFO",
|
|
"name": "timetracker",
|
|
"message": "project.created",
|
|
"request_id": "abc123-def456",
|
|
"user_id": 42,
|
|
"project_id": 15
|
|
}
|
|
```
|
|
|
|
### Error Monitoring (Sentry)
|
|
|
|
When enabled, Sentry captures:
|
|
- Uncaught exceptions
|
|
- Performance traces
|
|
- Request context
|
|
- User context
|
|
|
|
### Performance Metrics (Prometheus)
|
|
|
|
Exposed at `/metrics` endpoint:
|
|
- Total request count by method, endpoint, and status code
|
|
- Request latency histogram by endpoint
|
|
- Custom business metrics
|
|
|
|
### Product Analytics (PostHog)
|
|
|
|
Tracks user behavior and feature usage with advanced features:
|
|
- **Event Tracking**: Timer operations, project management, reports, exports
|
|
- **Person Properties**: User role, auth method, login history
|
|
- **Feature Flags**: Gradual rollouts, A/B testing, kill switches
|
|
- **Group Analytics**: Segment by platform, version, deployment method
|
|
- **Cohort Analysis**: Target specific user segments
|
|
- **Rich Context**: Browser, device, URL, environment on every event
|
|
|
|
See [POSTHOG_ADVANCED_FEATURES.md](../POSTHOG_ADVANCED_FEATURES.md) for complete guide.
|
|
|
|
### Telemetry
|
|
|
|
Optional, opt-in telemetry helps us understand:
|
|
- Number of active installations (anonymized)
|
|
- Version distribution
|
|
- Update patterns
|
|
|
|
**Privacy**: Telemetry is disabled by default and contains no personally identifiable information (PII).
|
|
|
|
**Implementation**: Telemetry data is sent via PostHog using anonymous fingerprints, keeping all installation data in one place.
|
|
|
|
## Configuration
|
|
|
|
All analytics features are controlled via environment variables. See `env.example` for configuration options.
|
|
|
|
### Enabling Analytics
|
|
|
|
```bash
|
|
# Enable Sentry
|
|
SENTRY_DSN=https://your-sentry-dsn@sentry.io/project-id
|
|
SENTRY_TRACES_RATE=0.1 # 10% sampling for performance traces
|
|
|
|
# Enable PostHog
|
|
POSTHOG_API_KEY=your-posthog-api-key
|
|
POSTHOG_HOST=https://app.posthog.com
|
|
|
|
# Enable Telemetry (opt-in, uses PostHog)
|
|
ENABLE_TELEMETRY=true
|
|
TELE_SALT=your-unique-salt
|
|
APP_VERSION=1.0.0
|
|
```
|
|
|
|
## Disabling Analytics
|
|
|
|
By default, most analytics features are disabled. To ensure they remain disabled:
|
|
|
|
```bash
|
|
# Disable all optional analytics
|
|
SENTRY_DSN=
|
|
POSTHOG_API_KEY=
|
|
ENABLE_TELEMETRY=false
|
|
```
|
|
|
|
Structured logging to files is always enabled as it's essential for troubleshooting.
|
|
|
|
## Log Management
|
|
|
|
Logs are written to `logs/app.jsonl` and should be rotated using:
|
|
- Docker volume mounts + host logrotate
|
|
- Grafana Loki + Promtail
|
|
- Elasticsearch + Filebeat
|
|
- Or similar log aggregation solutions
|
|
|
|
## Dashboards
|
|
|
|
Recommended dashboards:
|
|
|
|
### Sentry
|
|
- Error rate alerts
|
|
- New issue notifications
|
|
- Performance regression alerts
|
|
|
|
### Grafana + Prometheus
|
|
- Request rate and latency (P50, P95, P99)
|
|
- Error rates by endpoint
|
|
- Active timers gauge
|
|
- Database connection pool metrics
|
|
|
|
### PostHog
|
|
- User engagement funnels
|
|
- Feature adoption rates
|
|
- Session recordings (if enabled)
|
|
|
|
## Data Retention
|
|
|
|
- **Logs**: Retained locally based on your logrotate configuration
|
|
- **Sentry**: Based on your Sentry plan (typically 90 days)
|
|
- **Prometheus**: Based on your Prometheus configuration (typically 15-30 days)
|
|
- **PostHog**: Based on your PostHog plan
|
|
- **Telemetry**: 12 months
|
|
|
|
## Privacy & Compliance
|
|
|
|
See [privacy.md](privacy.md) for detailed information about data collection, retention, and GDPR compliance.
|
|
|
|
## Event Schema
|
|
|
|
See [events.md](events.md) for a complete list of tracked events and their properties.
|
|
|
|
## Maintenance
|
|
|
|
### Adding New Events
|
|
|
|
1. Define the event in `docs/events.md`
|
|
2. Instrument the code using `log_event()` or `track_event()`
|
|
3. Update this documentation
|
|
4. Test in development environment
|
|
5. Monitor in production dashboards
|
|
|
|
### Event Naming Convention
|
|
|
|
- Use dot notation: `resource.action`
|
|
- Examples: `project.created`, `timer.started`, `export.csv`
|
|
- Be consistent with existing event names
|
|
|
|
### Who Can Add Events
|
|
|
|
Changes to analytics require approval from:
|
|
- Product owner (for PostHog events)
|
|
- DevOps/SRE (for infrastructure metrics)
|
|
- Privacy officer (for any data collection changes)
|
|
|
|
## Troubleshooting
|
|
|
|
### Logs Not Appearing
|
|
|
|
1. Check `logs/` directory permissions
|
|
2. Verify LOG_LEVEL is set correctly
|
|
3. Check disk space
|
|
|
|
### Sentry Not Receiving Errors
|
|
|
|
1. Verify SENTRY_DSN is set correctly
|
|
2. Check network connectivity
|
|
3. Verify Sentry project is active
|
|
4. Check Sentry rate limits
|
|
|
|
### Prometheus Metrics Not Available
|
|
|
|
1. Verify `/metrics` endpoint is accessible
|
|
2. Check Prometheus scrape configuration
|
|
3. Verify network connectivity
|
|
|
|
### PostHog Events Not Appearing
|
|
|
|
1. Verify POSTHOG_API_KEY is set correctly
|
|
2. Check PostHog project settings
|
|
3. Verify network connectivity
|
|
4. Check PostHog rate limits
|
|
|
|
## Support
|
|
|
|
For analytics-related issues:
|
|
1. Check this documentation
|
|
2. Review logs in `logs/app.jsonl`
|
|
3. Check service-specific dashboards (Sentry, Grafana, PostHog)
|
|
4. Contact support with relevant log excerpts
|
|
|