120 lines
3.4 KiB
Bash
120 lines
3.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# b0esche.cloud Monitoring Script
|
||
|
|
# Usage: ./monitor.sh
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
RED='\033[0;31m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
NC='\033[0m' # No Color
|
||
|
|
|
||
|
|
echo "=== b0esche.cloud Service Status ==="
|
||
|
|
echo
|
||
|
|
|
||
|
|
# Check critical services
|
||
|
|
services=("traefik" "go-backend" "go-postgres" "flutter-web" "nextcloud" "nextcloud-db" "collabora")
|
||
|
|
|
||
|
|
for service in "${services[@]}"; do
|
||
|
|
if docker ps --format "table {{.Names}}" | grep -q "^$service$"; then
|
||
|
|
echo -e "${GREEN}✓${NC} $service is running"
|
||
|
|
else
|
||
|
|
echo -e "${RED}✗${NC} $service is not running"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== Service Health Checks ==="
|
||
|
|
echo
|
||
|
|
|
||
|
|
# HTTP/HTTPS health checks
|
||
|
|
echo -n "Flutter Web (www.b0esche.cloud): "
|
||
|
|
if curl -s --max-time 5 https://www.b0esche.cloud | grep -q "b0esche_cloud"; then
|
||
|
|
echo -e "${GREEN}OK${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${RED}FAILED${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -n "Go Backend (go.b0esche.cloud): "
|
||
|
|
if curl -s --max-time 5 https://go.b0esche.cloud/health | grep -q "ok"; then
|
||
|
|
echo -e "${GREEN}OK${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${RED}FAILED${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -n "Nextcloud (storage.b0esche.cloud): "
|
||
|
|
if curl -s --max-time 5 -I https://storage.b0esche.cloud | grep -q "HTTP/2 200"; then
|
||
|
|
echo -e "${GREEN}OK${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${RED}FAILED${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -n "Collabora (of.b0esche.cloud): "
|
||
|
|
if curl -s --max-time 5 -I https://of.b0esche.cloud | grep -q "HTTP/2"; then
|
||
|
|
echo -e "${GREEN}OK${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}DEGRADED${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== Resource Usage ==="
|
||
|
|
echo
|
||
|
|
|
||
|
|
# Show container resource usage
|
||
|
|
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" | grep -E "(traefik|go-backend|flutter-web|nextcloud|collabora)"
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== Recent Error Logs ==="
|
||
|
|
echo
|
||
|
|
|
||
|
|
# Show recent error logs from each service
|
||
|
|
for service in traefik go-backend nextcloud collabora; do
|
||
|
|
errors=$(docker logs "$service" --since=1h 2>&1 | grep -i error | tail -3 | wc -l)
|
||
|
|
if [ "$errors" -gt 0 ]; then
|
||
|
|
echo -e "${YELLOW}$service:${NC} $errors errors in last hour"
|
||
|
|
docker logs "$service" --since=1h 2>&1 | grep -i error | tail -3 | sed 's/^/ /'
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== SSL Certificate Status ==="
|
||
|
|
echo
|
||
|
|
|
||
|
|
# Check certificate expiry for main domains
|
||
|
|
domains=("www.b0esche.cloud" "go.b0esche.cloud" "storage.b0esche.cloud" "of.b0esche.cloud")
|
||
|
|
|
||
|
|
for domain in "${domains[@]}"; do
|
||
|
|
expiry=$(echo | openssl s_client -servername "$domain" -connect "$domain:443" 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d= -f2)
|
||
|
|
if [ -n "$expiry" ]; then
|
||
|
|
expiry_epoch=$(date -d "$expiry" +%s)
|
||
|
|
current_epoch=$(date +%s)
|
||
|
|
days_left=$(( (expiry_epoch - current_epoch) / 86400 ))
|
||
|
|
|
||
|
|
if [ "$days_left" -lt 7 ]; then
|
||
|
|
echo -e "${RED}$domain: ${NC}Expires in $days_left days"
|
||
|
|
elif [ "$days_left" -lt 30 ]; then
|
||
|
|
echo -e "${YELLOW}$domain: ${NC}Expires in $days_left days"
|
||
|
|
else
|
||
|
|
echo -e "${GREEN}$domain: ${NC}Expires in $days_left days"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo -e "${RED}$domain: ${NC}Certificate check failed"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== Disk Usage ==="
|
||
|
|
echo
|
||
|
|
|
||
|
|
# Show disk usage for critical directories
|
||
|
|
echo "PostgreSQL data:"
|
||
|
|
du -sh /opt/go/data/postgres 2>/dev/null || echo " Not accessible"
|
||
|
|
|
||
|
|
echo "Backup directory:"
|
||
|
|
du -sh /opt/backups 2>/dev/null || echo " Not found"
|
||
|
|
|
||
|
|
echo "Docker volumes:"
|
||
|
|
docker system df --format "table {{.Type}}\t{{.TotalCount}}\t{{.Size}}"
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "=== Monitoring Complete ==="
|