运维指南
健康检查
后端暴露 /healthz(存活探针)和 /readyz(就绪探针):
bash
curl http://localhost:8080/healthz
curl http://localhost:8080/readyz通过 nginx(TLS):
bash
curl -k https://localhost/healthz日志
bash
# 所有服务
make prod-logs
# 特定服务
docker logs -f umoo-backend
docker logs -f umoo-postgres
docker logs -f umoo-nginx生产环境后端输出结构化 JSON 日志(UMOO_LOG_FORMAT=json)。
监控
NATS
NATS 监控端点 http://localhost:8222:
bash
curl http://localhost:8222/varz # 服务器变量
curl http://localhost:8222/connz # 连接信息
curl http://localhost:8222/routez # 路由信息
curl http://localhost:8222/subsz # 订阅信息PostgreSQL
检查连接池和活跃查询:
bash
docker exec umoo-postgres psql -U umoo -d umoo -c \
"SELECT pid, state, query_start, query FROM pg_stat_activity WHERE datname='umoo';"Redis
bash
docker exec umoo-redis redis-cli -a $REDIS_PASSWORD INFO memory
docker exec umoo-redis redis-cli -a $REDIS_PASSWORD INFO clients备份与恢复
PostgreSQL 备份
bash
docker exec umoo-postgres pg_dump -U umoo umoo > backup_$(date +%Y%m%d_%H%M%S).sqlPostgreSQL 恢复
bash
docker exec -i umoo-postgres psql -U umoo umoo < backup_20260101_120000.sqlRedis 备份
Redis 配置了 AOF 持久化,数据存储在 redis_data 卷中。
bash
docker exec umoo-redis redis-cli -a $REDIS_PASSWORD BGSAVE
docker cp umoo-redis:/data/dump.rdb ./redis_backup_$(date +%Y%m%d).rdb故障排查
服务无法启动
bash
# 检查容器状态
docker ps -a | grep umoo
# 查看最近日志
docker logs --tail 50 umoo-backend
# 验证依赖服务是否健康
docker inspect --format='{{.State.Health.Status}}' umoo-postgres
docker inspect --format='{{.State.Health.Status}}' umoo-redis
docker inspect --format='{{.State.Health.Status}}' umoo-nats-1数据库连接问题
bash
# 从后端容器测试连通性
docker exec umoo-backend sh -c 'nc -z postgres 5432 && echo OK || echo FAIL'
# 检查 PostgreSQL 最大连接数
docker exec umoo-postgres psql -U umoo -c "SHOW max_connections;"
docker exec umoo-postgres psql -U umoo -c "SELECT count(*) FROM pg_stat_activity;"NATS 集群问题
bash
# 检查集群路由
curl -s http://localhost:8222/routez | python3 -m json.tool
# 验证所有节点相互可见
for port in 8222; do
echo "Node on $port:"
curl -s "http://localhost:$port/routez" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f' Routes: {d[\"num_routes\"]}')"
done限流
如果客户端收到 HTTP 429 响应,请检查限流配置:
- Nginx:
nginx.conf中的limit_req_zone(默认每 IP 100r/s) - 应用层:通过 Redis 实现的租户级限流(可按租户配置)
优雅关闭
后端支持优雅排水。收到 SIGTERM 时:
- 健康端点返回不健康(nginx 停止路由)
- 处理中的请求完成(30 秒超时)
- WebSocket 连接排水
- 数据库和 Redis 连接关闭
- 进程退出
bash
# 优雅重启
docker restart umoo-backend
# 或通过 compose
make prod-down && make prod-up资源监控
bash
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"