mirror of
https://github.com/taylanbakircioglu/haproxy-openmanager.git
synced 2026-09-24 03:16:24 +00:00
73bed7811f
- Add configuration guide for environment variables - Add agent upgrade guide - Use example.com instead of company-specific URLs - No sensitive information included
173 lines
5.1 KiB
Markdown
173 lines
5.1 KiB
Markdown
# Agent Upgrade Guide - Dashboard Stats Fix
|
|
|
|
## Problem
|
|
Dashboard showing 0 metrics after agent auto-upgrade due to missing environment variables (`SOCAT_BIN`, `STATS_SOCKET_PATH`) when agent restarts in daemon mode.
|
|
|
|
## Solution
|
|
Implemented **lazy initialization** in both `get_haproxy_stats_csv()` and `get_server_statuses()` functions. These functions now initialize their dependencies on first call, making them completely independent of global variable initialization.
|
|
|
|
## Deployment Steps
|
|
|
|
### Step 1: Wait for Pipeline ⏳
|
|
```bash
|
|
# Pipeline is currently running after git push
|
|
# Check status: https://[your-azure-devops]/pipeline
|
|
# Wait for deployment to complete (~3-5 minutes)
|
|
```
|
|
|
|
### Step 2: Verify Backend Deployment ✅
|
|
```bash
|
|
# Check backend logs for successful deployment
|
|
kubectl logs -f deployment/backend -n haproxy-manager | head -20
|
|
|
|
# Expected: New pod started with latest code
|
|
```
|
|
|
|
### Step 3: Update Agent Version in UI 🔄
|
|
|
|
**Option A: Automatic Script Sync (Recommended)**
|
|
```bash
|
|
# Get admin token
|
|
TOKEN=$(curl -k -s -X POST "https://haproxy-manager.example.com/api/auth/login" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username": "admin", "password": "admin123"}' | jq -r '.access_token')
|
|
|
|
# Sync scripts from files to database (creates version 1.0.0)
|
|
curl -k -X POST "https://haproxy-manager.example.com/api/agents/sync-scripts-from-files" \
|
|
-H "Authorization: Bearer $TOKEN" | jq .
|
|
|
|
# Expected: {"status": "success", "synced": ["linux", "macos"]}
|
|
```
|
|
|
|
**Option B: Manual UI Update**
|
|
1. Go to **Agent Management** page
|
|
2. Click **Settings** → **Agent Versions**
|
|
3. For **Linux** platform:
|
|
- Click **Edit Script**
|
|
- Version: Keep current or increment (e.g., 1.0.3)
|
|
- Changelog: Add "Fixed stats collection after upgrade"
|
|
- Click **Save** (this syncs file content to database)
|
|
4. Repeat for **macOS** platform
|
|
|
|
### Step 4: Upgrade Agents 🚀
|
|
|
|
**Option A: UI (Single Agent)**
|
|
1. Go to **Agent Management** page
|
|
2. Select agent (e.g., `demo-agent`)
|
|
3. Click **Upgrade** button
|
|
4. Wait 30 seconds for agent to restart
|
|
|
|
**Option B: API (Batch Upgrade)**
|
|
```bash
|
|
# Get all agents
|
|
curl -k -s -X GET "https://haproxy-manager.example.com/api/agents" \
|
|
-H "Authorization: Bearer $TOKEN" | jq '.agents[] | {id, name, version}'
|
|
|
|
# Upgrade specific agent (replace {agent_id})
|
|
curl -k -X POST "https://haproxy-manager.example.com/api/agents/{agent_id}/upgrade" \
|
|
-H "Authorization: Bearer $TOKEN" | jq .
|
|
```
|
|
|
|
### Step 5: Verify Stats Collection 📊
|
|
|
|
**Backend Logs** (30 seconds after upgrade):
|
|
```bash
|
|
kubectl logs -f deployment/backend -n haproxy-manager | grep -E "haproxy_stats_csv|demo-agent"
|
|
|
|
# Expected logs:
|
|
# ✅ "Has haproxy_stats_csv: True"
|
|
# ✅ "CSV preview: IyBweG..." (base64 data)
|
|
# ✅ "STATS: Parsed 15 rows for cluster demo-cluster1"
|
|
```
|
|
|
|
**Agent Logs** (on agent server):
|
|
```bash
|
|
sudo tail -f /var/log/haproxy-agent/agent.log | grep STATS
|
|
|
|
# Expected logs:
|
|
# ✅ "STATS: Initialized socat: /usr/bin/socat"
|
|
# ✅ "STATS: Using default socket path: /var/run/haproxy/admin.sock"
|
|
# ✅ "STATS: Fetched CSV: 2121 bytes, 9 lines, base64: 2828 chars"
|
|
```
|
|
|
|
**Dashboard UI**:
|
|
1. Open **Dashboard** page
|
|
2. Refresh page (F5)
|
|
3. Check metrics:
|
|
- ✅ Frontend/Backend filters populated
|
|
- ✅ Overview metrics showing real data (not 0)
|
|
- ✅ Charts showing data points
|
|
- ✅ "Waiting for Agent Data" warning gone
|
|
|
|
## Troubleshooting
|
|
|
|
### Issue: Backend still shows "Has haproxy_stats_csv: False"
|
|
|
|
**Cause**: Agent hasn't upgraded yet or using old script version
|
|
|
|
**Solution**:
|
|
```bash
|
|
# Check agent version on agent server
|
|
grep "AGENT_VERSION" /usr/local/bin/haproxy-agent | head -1
|
|
|
|
# Force agent restart
|
|
sudo systemctl restart haproxy-agent
|
|
|
|
# Check logs immediately
|
|
sudo tail -20 /var/log/haproxy-agent/agent.log
|
|
```
|
|
|
|
### Issue: "STATS: socat not available"
|
|
|
|
**Cause**: socat not installed
|
|
|
|
**Solution**:
|
|
```bash
|
|
# Install socat
|
|
sudo yum install -y socat # RHEL/CentOS
|
|
sudo apt install -y socat # Debian/Ubuntu
|
|
|
|
# Restart agent
|
|
sudo systemctl restart haproxy-agent
|
|
```
|
|
|
|
### Issue: "STATS: Socket not found: /var/run/haproxy/admin.sock"
|
|
|
|
**Cause**: HAProxy stats socket not configured
|
|
|
|
**Solution**:
|
|
```bash
|
|
# Check HAProxy config for stats socket
|
|
grep "stats socket" /etc/haproxy/haproxy.cfg
|
|
|
|
# Add if missing (in global section):
|
|
# stats socket /var/run/haproxy/admin.sock mode 666 level admin
|
|
|
|
# Reload HAProxy
|
|
sudo systemctl reload haproxy
|
|
```
|
|
|
|
## Verification Checklist
|
|
|
|
- [ ] Pipeline completed successfully
|
|
- [ ] Backend pod restarted with new code
|
|
- [ ] Agent scripts synced to database (version visible in UI)
|
|
- [ ] Agents upgraded to new version
|
|
- [ ] Backend logs show "Has haproxy_stats_csv: True"
|
|
- [ ] Agent logs show STATS messages
|
|
- [ ] Dashboard showing real metrics
|
|
- [ ] Charts populated with data
|
|
- [ ] No "Waiting for Agent Data" warning
|
|
|
|
## Next Upgrades
|
|
|
|
This fix is **permanent**. Future agent upgrades will NOT break stats collection because:
|
|
|
|
1. ✅ Functions are self-contained with lazy initialization
|
|
2. ✅ No dependency on global variable initialization order
|
|
3. ✅ Works in any restart scenario (systemd, daemon mode, upgrade)
|
|
4. ✅ Backward compatible with existing agents
|
|
|
|
**No manual intervention needed for future upgrades!** 🎉
|
|
|