Analytics Stack Overview
The analytics infrastructure consists of:- ClickHouse: Time-series database for storing events and logs
- Vector: Log aggregation and forwarding
- Grafana: Visualization and dashboards
- Traefik: Access logs and routing
docker-compose.yml:332-419.
Enabling Analytics
Enable Analytics in Docker Compose
Set the environment variable indocker-compose.yml:99 or in your override file:
Django Settings
Analytics are controlled by theANALYTICS_ENABLED setting in cvat/settings/base.py:177-180:
ClickHouse Configuration
ClickHouse stores analytics events and logs.Environment Variables
Defined indocker-compose.yml:31-36:
Django Configuration
ClickHouse settings incvat/settings/base.py:701-709:
ClickHouse Container
Defined indocker-compose.yml:332-343:
Vector Log Aggregation
Vector collects logs from Django and forwards them to ClickHouse.Vector Configuration
Source:components/analytics/vector/vector.toml:1-47
Event Fields
Vector forwards these fields to ClickHouse:scope: Event scope/categoryobj_name: Object nameobj_id: Object IDobj_val: Object valuesource: Event sourcetimestamp: Event timestampcount: Event countduration: Event durationproject_id: Associated project IDtask_id: Associated task IDjob_id: Associated job IDuser_id: User IDuser_name: Usernameuser_email: User emailorg_id: Organization IDorg_slug: Organization slugpayload: Additional event dataaccess_token_id: Access token ID
Vector Container
Defined indocker-compose.yml:345-364:
Django Logging Configuration
Logging setup incvat/settings/base.py:481-553:
Log Handler
Log Files
File-based logging handlers:cvat_logs volume mounted at /home/django/logs.
Log Level Configuration
cvat/settings/base.py:532.
Grafana Dashboards
Grafana provides visualization of analytics data stored in ClickHouse.Accessing Grafana
Grafana is accessible at:components/analytics/grafana_conf.yml.
Grafana Configuration
Grafana container indocker-compose.yml:366-419:
Anonymous Access
By default, Grafana allows anonymous access with admin role:docker-compose.override.yml:
Pre-built Dashboards
CVAT includes three dashboards incomponents/analytics/grafana/dashboards/:
- all_events.json: All events overview (default home dashboard)
- management.json: Management metrics
- monitoring.json: System monitoring
Custom Dashboards
To add custom dashboards:- Create a dashboard JSON file
- Place it in
components/analytics/grafana/dashboards/ - Restart Grafana:
Traefik Access Logs
Traefik logs all HTTP requests in JSON format.Log Configuration
Defined indocker-compose.yml:275-287:
Log Rotation
Traefik logs are rotated automatically:Viewing Traefik Logs
Container Health Monitoring
CVAT includes health check endpoints.Health Check Apps
Installed incvat/settings/base.py:103-106:
Health Check Configuration
Disk usage threshold incvat/settings/base.py:788:
Health Check Endpoint
Access health status:- Database connectivity
- Cache availability
- Disk usage
- System resources (CPU, memory)
Monitoring with External Tools
Prometheus Integration
To export metrics to Prometheus:- Install django-prometheus:
- Add to Django settings:
- Expose metrics endpoint in
docker-compose.override.yml:
Datadog Integration
Add Datadog agent to your compose file:Sentry Error Tracking
Add Sentry SDK to track errors:- Install sentry-sdk:
- Configure in custom settings:
Log Management
Accessing Container Logs
Log Files Location
Application logs are stored in thecvat_logs volume:
cvat_server.log: Main application logcvat_server_dataset.log: Dataset operations log
Extracting Logs from Volume
Log Retention
Rotating file handlers automatically manage log retention:- Server logs: 5 files × 50 MB = 250 MB max
- Dataset logs: 3 files × 50 MB = 150 MB max
Performance Monitoring
Database Performance
Monitor PostgreSQL performance:Redis Performance
Monitor Redis:Container Resource Usage
Troubleshooting
Analytics Not Working
Check if analytics are enabled:Grafana Connection Issues
Test ClickHouse connectivity from Grafana:High Disk Usage
Check volume sizes:Best Practices
- Enable analytics: Always enable analytics in production for troubleshooting
- Monitor disk space: Set up alerts for disk usage thresholds
- Backup analytics data: Include ClickHouse in backup procedures
- Secure Grafana: Disable anonymous access in production
- Rotate logs: Ensure log rotation is working to prevent disk exhaustion
- Monitor container health: Set up external monitoring of health endpoints
- Review dashboards regularly: Check Grafana dashboards for anomalies
Additional Resources
- ClickHouse Documentation
- Vector Documentation
- Grafana Documentation
- Traefik Documentation
- Source:
components/analytics/vector/vector.toml - Source:
components/analytics/grafana/dashboards/ - Source:
docker-compose.yml:332-419