Built-in Metrics
Security Task Metrics
Bitwarden tracks security task completion metrics for organizations: Endpoint:src/Core/Vault/Queries/GetTaskMetricsForOrganizationQuery.cs
Organization Report Metrics
Comprehensive reporting metrics for organization security posture: Available Metrics:- Application count and risk assessment
- Member count and risk assessment
- Password count and risk assessment
- Critical application/member/password tracking
src/Core/Dirt/Models/Data/OrganizationReportMetricsData.cs
Performance Metrics
Rate Limiting Metrics
Bitwarden implements distributed rate limiting with configurable thresholds:- Request counts per endpoint
- Rate limit violations
- Redis timeout occurrences
- Client IP patterns
src/Api/appsettings.json:72
Database Performance
Monitor database query performance through health checks and connection metrics: SQL Server Connection:- Connection pool utilization
- Query execution times
- Failed connection attempts
src/Api/Utilities/ServiceCollectionExtensions.cs:86 for implementation.
Application Metrics
Service Startup Metrics
Each service logs startup completion:src/Api/Startup.cs:364
Request Metrics
The request logging middleware tracks:- Request count by endpoint
- Response time percentiles
- HTTP status code distribution
- Error rates
src/SharedWeb/Utilities/RequestLoggingMiddleware.cs
Event Metrics
Bitwarden’s event system provides comprehensive audit and usage metrics:Event Types Tracked
- User authentication events
- Cipher access and modifications
- Collection operations
- Organization changes
- Security task updates
- Service account activity
Event Storage Options
Azure Queue Storage:src/Core/Dirt/Services/Implementations/EventService.cs
Observability Integration
Prometheus
While Bitwarden doesn’t natively export Prometheus metrics, you can expose them using middleware: Example Integration:- Add the Prometheus ASP.NET Core package:
- Configure in Startup:
- Scrape configuration:
Application Insights
For Azure deployments, integrate with Application Insights:OpenTelemetry
Modern observability using OpenTelemetry:Custom Metrics Collection
Database Metrics
Query repository metrics directly:Performance Counters
Monitor .NET performance counters:Monitoring Dashboards
Grafana Dashboard Example
Key Metrics to Monitor
Request Latency
P50, P95, P99 response times for critical endpoints like
/api/ciphers and /connect/tokenError Rates
HTTP 4xx and 5xx response rates, exception counts, failed authentication attempts
Database Health
Connection pool utilization, query duration, failed queries, deadlocks
Resource Utilization
CPU usage, memory consumption, GC pause times, thread pool saturation
Alerting
Critical Alerts
High Error Rate:Performance Tuning
Rate Limit Optimization
Adjust rate limits based on metrics:Database Connection Pooling
Optimize based on connection metrics:Best Practices
1
Establish Baselines
Monitor metrics for 1-2 weeks to establish normal operating baselines for your deployment.
2
Set Meaningful Alerts
Configure alerts based on baselines, not arbitrary thresholds. Focus on symptoms, not causes.
3
Monitor Trends
Track metrics over time to identify gradual degradation before it becomes critical.
4
Correlate Metrics
Use distributed tracing to correlate metrics across services for root cause analysis.
5
Review Regularly
Periodically review and adjust monitoring based on actual production patterns.