feat(monitoring): add Redis exporter + Sentry docs to deployment guide
Some checks failed
CI / ruff (push) Successful in 10s
CI / pytest (push) Failing after 47m30s
CI / validate (push) Successful in 24s
CI / dependency-scanning (push) Successful in 29s
CI / docs (push) Has been skipped
CI / deploy (push) Has been skipped

- Add redis-exporter container to docker-compose (oliver006/redis_exporter, 32MB)
- Add Redis scrape target to Prometheus config
- Add 4 Redis alert rules: RedisDown, HighMemory, HighConnections, RejectedConnections
- Document Step 19b (Sentry Error Tracking) in Hetzner deployment guide
- Document Step 19c (Redis Monitoring) in Hetzner deployment guide
- Update resource budget and port reference tables

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-27 23:30:18 +01:00
parent ce822af883
commit 35d1559162
54 changed files with 664 additions and 343 deletions

View File

@@ -217,5 +217,3 @@ class MerchantPortalInvoiceListResponse(BaseModel):
total: int
skip: int
limit: int

View File

@@ -191,4 +191,4 @@ function adminDashboard() {
};
}
dashLog.info('Dashboard module loaded');
dashLog.info('Dashboard module loaded');

View File

@@ -126,4 +126,4 @@ function storeDashboard() {
});
}
};
}
}

View File

@@ -337,4 +337,3 @@ class AdminCustomerListResponse(BaseModel):
class AdminCustomerDetailResponse(AdminCustomerItem):
"""Detailed customer response for admin."""

View File

@@ -712,4 +712,4 @@ function adminComponents() {
};
}
componentsLog.info('Components module loaded');
componentsLog.info('Components module loaded');

View File

@@ -219,4 +219,4 @@ function adminIcons() {
};
}
iconsLog.info('Icons page module loaded');
iconsLog.info('Icons page module loaded');

View File

@@ -122,4 +122,4 @@ function adminTestingHub() {
};
}
testingLog.info('Testing hub module loaded');
testingLog.info('Testing hub module loaded');

View File

@@ -1 +1 @@
// System monitoring
// System monitoring

View File

@@ -253,4 +253,3 @@ class TestOrderItemModel:
assert item1.order_id == item2.order_id
assert item1.id != item2.id
assert item1.product_id == item2.product_id # Same product, different items

View File

@@ -73,4 +73,4 @@
<div class="path">Path: {{ path }}</div>
</div>
</body>
</html>
</html>

View File

@@ -76,4 +76,4 @@
<div class="error-code">Error Code: {{ error_code }}</div>
</div>
</body>
</html>
</html>

View File

@@ -76,4 +76,4 @@
<div class="error-code">Error Code: {{ error_code }}</div>
</div>
</body>
</html>
</html>

View File

@@ -7,4 +7,4 @@
<body>
</body>
</html>
</html>

View File

@@ -55,4 +55,4 @@ No server-side store data required - follows same pattern as admin pages
<div x-show="error" class="text-center py-4">
<p class="text-sm text-red-600 dark:text-red-400" x-text="error"></p>
</div>
</div>
</div>