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(-)
5.6 KiB
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:
- Structured JSON Logging - Application-wide event logging in JSON format
- Sentry Integration - Error monitoring and performance tracking
- Prometheus Metrics - Performance metrics and monitoring
- PostHog Analytics - Product analytics and user behavior tracking
- 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:
{
"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 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
# 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:
# 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 for detailed information about data collection, retention, and GDPR compliance.
Event Schema
See events.md for a complete list of tracked events and their properties.
Maintenance
Adding New Events
- Define the event in
docs/events.md - Instrument the code using
log_event()ortrack_event() - Update this documentation
- Test in development environment
- 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
- Check
logs/directory permissions - Verify LOG_LEVEL is set correctly
- Check disk space
Sentry Not Receiving Errors
- Verify SENTRY_DSN is set correctly
- Check network connectivity
- Verify Sentry project is active
- Check Sentry rate limits
Prometheus Metrics Not Available
- Verify
/metricsendpoint is accessible - Check Prometheus scrape configuration
- Verify network connectivity
PostHog Events Not Appearing
- Verify POSTHOG_API_KEY is set correctly
- Check PostHog project settings
- Verify network connectivity
- Check PostHog rate limits
Support
For analytics-related issues:
- Check this documentation
- Review logs in
logs/app.jsonl - Check service-specific dashboards (Sentry, Grafana, PostHog)
- Contact support with relevant log excerpts