Files
DevServer/docs/CONTAINER_ISSUES_RESOLVED.md
Hardik Sankhla 2304c3ed12 Initial commit: Complete DevServer monitoring framework
- FastAPI application with OpenTelemetry instrumentation
- Redis caching and Celery task processing
- Docker Compose setup with monitoring stack
- Grafana dashboards and Prometheus metrics
- Jaeger distributed tracing
- Comprehensive documentation in docs/ folder
- Monitoring configuration and troubleshooting guides
2025-10-13 09:55:17 +05:30

242 lines
7.7 KiB
Markdown

# ✅ Container Issues - RESOLVED
**Date:** October 13, 2025
**Status:** All containers operational ✅
---
## 🎯 Issues Fixed
### 1. Grafana Container - FIXED ✅
**Status:** Now running on port 3000
**Problem:**
```
Status: Exited (1)
Error: "Only one datasource per organization can be marked as default"
```
**Root Cause:**
- **Two datasource configuration files** both marking Prometheus as default:
- `monitoring/grafana/provisioning/datasources/datasources.yaml`
- `monitoring/grafana/provisioning/datasources/prometheus.yml` ⚠️ (duplicate)
- Grafana was loading both files and seeing two datasources with `isDefault: true`
**Solution Applied:**
1. ✅ Deleted duplicate `prometheus.yml` file
2. ✅ Kept only `datasources.yaml` with proper configuration
3. ✅ Restarted Grafana container
**Additional Fixes:**
- **Dashboard provisioning issue** - Invalid dashboard JSON structure
- Problem: Dashboard was nested under `{"dashboard": {...}}` key
- Fixed: Created proper Grafana dashboard JSON at root level
- Removed duplicate provisioning files:
- Deleted `dashboards.yaml` (kept `dashboards.yml`)
- Removed JSON files from wrong location (provisioning/dashboards/)
**Result:**
```
NAME IMAGE STATUS PORTS
devserver_grafana grafana/grafana:latest Up 43 seconds 0.0.0.0:3000->3000/tcp
```
**Grafana Now Accessible:**
- **URL:** http://localhost:3000
- **Credentials:** admin/admin
- **Datasources:** Prometheus, Loki, Jaeger (auto-provisioned)
- **Dashboards:** DevServer Monitoring Dashboard (auto-provisioned)
---
### 2. node-exporter Container - REMOVED ✅
**Status:** Orphaned container cleaned up
**Problem:**
```
Status: Created (never started)
Warning: "Found orphan containers ([devserver_node_exporter])"
```
**Root Cause:**
- node-exporter was removed from `docker-compose.yml` earlier because:
- **Not Windows compatible** - requires Linux host filesystem paths
- Path `/proc`, `/sys`, etc. don't exist on Windows
- Replaced by **cAdvisor** for container monitoring
- Old container from previous configuration still existed
**Solution Applied:**
1. ✅ Removed orphaned container: `docker rm devserver_node_exporter`
2. ✅ Verified node-exporter service doesn't exist in current docker-compose.yml
**Alternative:**
- Using **cAdvisor** instead for container metrics (Windows compatible)
- cAdvisor monitors all Docker containers on the system
- Exposed on port 8080
---
## 📊 Current Container Status
### All 11 Services Running ✅
| Service | Status | Port | Purpose |
|---------|--------|------|---------|
| **devserver** | ✅ UP | 8000 | FastAPI backend |
| **celery_worker** | ✅ UP | - | Background tasks |
| **redis** | ✅ UP | 6379 | Cache & Celery backend |
| **rabbitmq** | ✅ UP | 5672, 15672 | Message broker |
| **prometheus** | ✅ UP | 9090 | Metrics collection |
| **grafana** | ✅ UP | 3000 | **JUST FIXED** |
| **otel-collector** | ✅ UP | 4317, 8889 | Telemetry pipeline |
| **jaeger** | ✅ UP | 16686 | Distributed tracing |
| **loki** | ✅ UP | 3100 | Log aggregation |
| **promtail** | ✅ UP | - | Log shipper |
| **cadvisor** | ✅ UP | 8080 | Container monitoring |
### Services Removed
- ❌ **node-exporter** - Not Windows compatible (replaced by cAdvisor)
---
## 🔧 Files Modified
### Deleted Files:
1. `monitoring/grafana/provisioning/datasources/prometheus.yml` - Duplicate datasource config
2. `monitoring/grafana/provisioning/dashboards/dashboards.yaml` - Duplicate dashboard provisioning
3. `monitoring/grafana/provisioning/dashboards/devserver-dashboard.json` - Wrong location
4. `monitoring/grafana/provisioning/dashboards/system-monitoring.json` - Wrong location
### Kept Files:
1. ✅ `monitoring/grafana/provisioning/datasources/datasources.yaml` - Main datasource config
2. ✅ `monitoring/grafana/provisioning/dashboards/dashboards.yml` - Main dashboard provisioning
3. ✅ `monitoring/grafana/dashboards/devserver-dashboard.json` - Corrected dashboard (proper location)
---
## 📈 New Grafana Dashboard
**Dashboard Name:** DevServer Monitoring Dashboard
**Panels Included:**
1. **API Request Rate** - Requests per second by method/endpoint
2. **API Response Time** - p95 and p50 percentiles
3. **HTTP Status Codes** - Pie chart distribution
4. **Active Requests** - Current requests in progress
5. **Total Requests** - 5-minute rolling count
6. **Error Rate (5xx)** - Server error percentage
7. **Average Response Time** - Mean response latency
8. **Container CPU Usage** - Per-container CPU utilization
9. **Container Memory Usage** - Per-container RAM usage
10. **RabbitMQ Queue Size** - Message queue depth
11. **RabbitMQ Message Rate** - Published vs delivered
12. **OTEL Collector Metrics** - Spans received/exported
13. **Process Memory Usage** - Memory by service
**Features:**
- ✅ Auto-refresh every 30 seconds
- ✅ 1-hour time range by default
- ✅ Color-coded thresholds for warnings/errors
- ✅ Prometheus datasource pre-configured
- ✅ Alert annotations enabled
---
## ✅ Verification Commands
### Check All Containers:
```powershell
cd d:\GNPL-Private\DevServer
docker-compose ps
```
### Access Grafana:
```powershell
# Open in browser
Start-Process "http://localhost:3000"
# Test health endpoint
Invoke-WebRequest -Uri "http://localhost:3000/api/health"
```
### View Logs:
```powershell
# Grafana logs
docker-compose logs -f grafana
# All services
docker-compose logs -f
```
---
## 🎓 Key Learnings
### Grafana Configuration:
1. **Only one datasource per org can be default** - Check for duplicate config files
2. **Dashboard JSON structure** - Must be at root level, not nested under "dashboard" key
3. **Provisioning directory structure:**
```
monitoring/grafana/
├── provisioning/
│ ├── datasources/
│ │ └── datasources.yaml (ONE file)
│ └── dashboards/
│ └── dashboards.yml (ONE file, points to path)
└── dashboards/
└── *.json (dashboard files here)
```
### Windows Docker Limitations:
1. **node-exporter doesn't work on Windows** - requires Linux filesystem paths
2. **Use cAdvisor instead** - Works on all platforms, monitors containers
3. **Host path mounts** - Some Linux-specific paths don't exist on Windows
### Docker Compose Best Practices:
1. **Orphaned containers** - Use `docker-compose down` to clean up
2. **Restart vs Recreate** - Config changes may need `--force-recreate`
3. **Health checks** - Essential for dependency management
---
## 🚀 Next Steps
### Recommended Actions:
1. ✅ **Grafana is working** - Access dashboards at http://localhost:3000
2. 📊 **View metrics** - Check the DevServer Monitoring Dashboard
3. 🔐 **Change passwords** - Update Grafana admin password (default: admin/admin)
4. 📈 **Generate traffic** - Test APIs to populate dashboard with data
5. 🎨 **Customize dashboards** - Add application-specific metrics
### Test Your Monitoring:
```powershell
# Generate API requests
Invoke-WebRequest -Uri "http://localhost:8000/api/v1/roll-dice"
Invoke-WebRequest -Uri "http://localhost:8000/api/v1/fibonacci/10"
# Check metrics are flowing
Invoke-WebRequest -Uri "http://localhost:9090/targets" # Prometheus
Start-Process "http://localhost:3000" # Grafana
```
---
## 📝 Summary
**Before:**
- ❌ Grafana: Exited (1) - Datasource configuration error
- ❌ node-exporter: Created - Orphaned container
**After:**
- ✅ Grafana: Up and running with clean configuration
- ✅ node-exporter: Removed (replaced by cAdvisor)
- ✅ All 11 services operational
- ✅ Monitoring stack fully functional
**System Status:** PRODUCTION READY ✅
---
**Last Verified:** October 13, 2025
**Verification:** All containers running, no errors in logs, Grafana accessible