运维维护
...
01 / Agile Operations
DevOps
敏捷运维模式:开发运维一体化、自动化变更、全链路可观测性
MTTR
分钟级
运维模式演进
Phase 1
独立运维
专职运维团队
Phase 2
DevOps
开发运维一体
Phase 3
SRE
站点可靠性工程
演进阶段
演进方向
Traditional → DevOps → SRE运维模式演进
传统 vs 敏捷
Traditional
👥
独立运维团队
运维与开发分离
📝
严格变更审批
手工审批流程
🔧
手工故障排查
依赖经验定位
⏰
MTTR 数小时
恢复时间长
📋
被动响应
事后处理为主
Agile DevOps
🤝
开发运维一体
DevOps 模式
🤖
自动化变更
健康检查自动触发
📊
全链路可观测
监控日志追踪
⚡
MTTR 分钟级
快速恢复能力
🔮
主动预防
持续优化改进
Key Metrics
故障响应
数小时分钟级
改进-95%
可用性
99.5%99.9%+
改进+0.4%
变更频率
月度每日
改进+30x
文档依赖
重度自动化
改进-80%
DevOps Lifecycle运维
运维
生命周期
运维在 DevOps 中的位置:从监控告警到持续优化的闭环
↻
Continuous Loop
持续迭代
01
代码提交
Git Push
02
CI/CD
自动构建
03
自动部署
蓝绿切换
04
运维核心健康检查
自动验证
05
运维核心监控告警
实时监测
06
运维核心异常处理
回滚/告警
问题定位→修复代码→代码提交(循环)
02 / Observability
可观测性
监控架构:数据采集 → 存储 → 可视化,三层体系实现全链路可观测
第一层
数据采集
Node Exporter · 系统指标
cAdvisor · 容器指标
App /metrics · 业务指标
第二层
数据存储
Prometheus 时序数据库
数据保留 7 天
采集间隔 30s
第三层
可视化
Grafana 仪表盘
端口 :3001
实时监控面板
监控配置
prometheus
localhost:9090
自监控
:9090
node-exporter
node-exporter:9100
系统指标
:9100
cadvisor
cadvisor:8080
容器指标
:8080
backend
backend:8000
后端应用
:8000
postgres
postgres:5432
数据库
:5432
redis
redis:6379
缓存
:6379
采集间隔
30s
数据保留
7 天
监控任务
6 个
监控服务
服务
镜像
端口
内存
CPU
Prometheus
prom/prometheus:latest
:9090
200M
0.3
Grafana
grafana/grafana:latest
:3001
150M
0.2
Node Exporter
prom/node-exporter:latest
:9100
50M
0.1
03 / Logging System
日志系统
请求日志中间件 + Docker 日志驱动,实现完整的日志记录与查看
日志级别
5 级
实时日志示例
2024-01-15 10:23:45INFO收到请求: GET /api/v1/health
2024-01-15 10:23:45INFO客户端IP: 192.168.1.100
2024-01-15 10:23:45INFO请求完成: 状态码 200 - 耗时 0.015秒
2024-01-15 10:24:12WARN数据库连接池使用率: 85%
2024-01-15 10:25:33ERRORRedis 连接超时: connection refused
日志架构
第一步
应用日志
FastAPI 中间件拦截请求
记录请求方法、路径、IP
计算处理耗时
第二步
Docker 日志驱动
json-file 驱动存储
单文件最大 10MB
最多保留 3 个文件
第三步
日志查看
docker logs -f 实时查看
--tail N 查看最近 N 行
支持过滤和搜索
Docker Compose 日志配置
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
请求日志
中间件
FastAPI 中间件自动记录每个请求的完整生命周期
自动拦截所有请求
记录请求方法和路径
记录客户端 IP 地址
计算请求处理耗时
记录响应状态码
backend/app/middleware/logging.pyPython
import time from fastapi import Request async def log_requests_middleware(request, call_next): """请求日志中间件""" start_time = time.time() # 记录请求开始 logger.info(f"收到请求: {request.method} {request.url.path}") logger.info(f"客户端IP: {request.client.host}") # 处理请求 response = await call_next(request) # 计算处理时间 process_time = time.time() - start_time # 记录响应 logger.info( f"请求完成: 状态码 {response.status_code} - " f"耗时: {process_time:.3f}秒" ) return response
日志级别
DEBUG
调试信息,详细的程序运行状态
开发环境
INFO
一般信息,记录关键业务流程
生产环境
WARNING
警告信息,潜在问题提示
需要关注
ERROR
错误信息,程序运行错误
需要处理
CRITICAL
严重错误,系统可能崩溃
紧急处理
开发环境
DEBUG
显示所有调试信息
生产环境
INFO
只记录重要信息
04 / Health Check
健康检查
三个健康检查端点 + 容器健康检查配置,实现自动化健康验证
All Systems
Healthy
健康检查端点
GET
/health
基础健康检查
{"status": "ok"}
GET
/health/api
API 服务状态
{"status": "ok"}
GET
/health/v1
API v1 健康检查
{"status": "ok", "version": "v1"}
使用场景
• CI/CD 部署验证
• 负载均衡器探活
• 监控系统检测
• 蓝绿部署流量切换
健康检查
实现
FastAPI 路由实现,三个端点返回服务状态信息
/health基础健康检查
/health/apiAPI 服务状态
/health/v1API v1 检查
backend/app/routers/health.pyPython
from datetime import datetime from fastapi import APIRouter router = APIRouter(tags=["健康检查"]) @router.get("/", summary="健康检查") def health_check(): """基础健康检查""" return { "status": "ok", "message": "凝神后端服务运行正常", "timestamp": datetime.now().isoformat(), } @router.get("/api", summary="API 健康检查") def health_check_api(): return {"status": "ok"} @router.get("/v1", summary="API v1 健康检查") def health_check_v1(): return {"status": "ok", "version": "v1"}
容器健康检查
服务
检查命令
间隔
超时
重试
Backend
curl -sf http://localhost:8000/health
30s
3s
3
Postgres
pg_isready -U ningshen -d ningshen
10s
5s
5
Redis
redis-cli --raw incr ping
10s
3s
3
Docker Compose 配置
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8000/health"]
interval: 30s
timeout: 3s
retries: 3
start_period: 5s
test: ["CMD", "curl", "-sf", "http://localhost:8000/health"]
interval: 30s
timeout: 3s
retries: 3
start_period: 5s
05 / Backup & Recovery
备份策略
4 种备份类型,按时间频率排列。条形长度 = 保留时间
1天7天14天21天30天
代码备份
每周
30 天 · 外部硬盘
数据库备份
每日
7 天 · Docker Volume
配置备份
每次变更
永久 · Git 历史 · GitHub
镜像备份
每次构建
3 个版本 · 阿里云 ACR
图例:
代码
数据库
配置
镜像
3-2-1 原则
3
份备份
至少保留 3 份数据副本
2
种介质
存储在 2 种不同介质上
1
份异地
至少 1 份在异地存储
本项目实现
✓
本地备份
Docker Volume
✓
外部硬盘
代码备份
✓
云存储
阿里云 ACR + GitHub
备份与恢复命令
操作
命令
SQL 备份
docker exec ningshen-postgres pg_dump -U ningshen ningshen > backup.sql
压缩备份
docker exec ningshen-postgres pg_dump -U ningshen -Fc ningshen > backup.dump
SQL 恢复
cat backup.sql | docker exec -i ningshen-postgres psql -U ningshen ningshen
压缩恢复
docker exec -i ningshen-postgres pg_restore -U ningshen -d ningshen < backup.dump
备份脚本
scripts/backup.sh
自动打包 + 清理旧备份
定期验证
每月一次恢复演练
确保备份文件可用
06
Chapter 06 / Incident Response
故障响应
5 步响应流程:发现 → 恢复 → 定位 → 修复 → 复盘
目标 MTTR
<10分钟
响应流程
01
分钟级
故障发现
• 健康检查失败 → CI/CD 触发回滚
• 监控告警 → 运维人员收到通知
• 用户反馈 → 工单系统记录
02
秒~分钟
快速恢复
• 蓝绿回滚:
rollback-blue-green.sh• 重启服务:
docker restart backend-blue• 扩容资源:增加容器内存/CPU 限制
03
分钟级
问题定位
• 容器日志:
docker logs --tail 100• 监控指标:Grafana 仪表盘
• 请求链路:日志追踪
04
小时级
根因修复
• 修复代码 → 提交 → CI/CD 自动部署
• 配置调整 → 更新配置文件 → 重新部署
• 资源优化 → 调整容器资源限制
05
持续
复盘总结
• 记录故障原因和解决方案
• 更新运维知识库
• 优化监控告警规则
常见故障处理
容器崩溃
P0健康检查失败
docker restart backend-blue
docker logs 查看错误日志
内存溢出
P1OOM Killed
调大内存限制
分析内存使用模式,优化代码
数据库连接
P1Connection refused
docker restart postgres
检查连接池配置、数据库日志
磁盘满
P2No space left
docker system prune
清理旧镜像、日志轮转
部署失败
P0CI/CD 流水线失败
rollback-blue-green.sh
检查 CI 日志、健康检查端点
P0 紧急
P1 重要
P2 一般
Chapter 07
容量规划
Total Server
2GB
Memory Allocation (Block Width = Memory Size)
800MB
System
400M
300M
250M
150M
100M
System (800MB)
PostgreSQL (400MB)
Backend (300MB)
Frontend (250MB)
Redis (150MB)
Nginx (100MB)
Allocated
~1.2GB
服务详细配置
Service
Memory Limit
Actual Usage
CPU Limit
Description
PostgreSQL
400MB
~300MB
0.5 Core
Relational Database
Backend
300MB
~200MB
0.5 Core
FastAPI Application
Frontend
250MB
~180MB
0.3 Core
Nuxt.js SSR
Redis
150MB
~80MB
0.2 Core
Cache Service
Nginx
100MB
~50MB
0.2 Core
Reverse Proxy
MONITORING (OPTIONAL)
Prometheus200MB
Grafana150MB
Node Exporter50MB
扩容建议
基于关键指标的自动化或人工扩容策略。
Traffic Spike
CPU > 80% for 5m→ Increase Backend Replicas
Data Growth
Disk > 80%→ Expand Volume / Clean Logs
Memory Leak
OOM Killed→ Upgrade Server / Optimize Code
Latency
P99 > 1s→ Add Redis Cache / SQL Tuning
Chapter 08 / Fundamental Contrast
根本对比
传统运维
DevOps 运维
8.1
团队结构对比
团队结构
开发与运维分离
VS
团队结构
开发运维一体
责任边界
"代码写完交给运维"
VS
责任边界
"谁开发谁运维"
知识传递
依赖文档交接
VS
知识传递
代码即文档 + 自动化
问题响应
运维先处理,复杂问题找开发
VS
问题响应
开发者直接参与故障处理
8.2
变更管理对比
变更审批TRAD
CAB 委员会审批
VS
变更审批NEW
CI/CD 自动化门禁
变更窗口TRAD
固定时间窗口
VS
变更窗口NEW
随时可部署
回滚机制TRAD
手工执行,耗时长
VS
回滚机制NEW
一键回滚,秒级完成
变更验证TRAD
手工测试
VS
变更验证NEW
自动化健康检查
8.3
监控告警对比
监控范围
主要监控硬件指标
VS
监控范围
全链路可观测(指标+日志)
告警方式
邮件/短信告警
VS
告警方式
自动化响应 + 人工通知
故障定位
依赖经验手工排查
VS
故障定位
日志追踪 + 监控面板
MTTR
数小时
VS
MTTR
分钟级
Chapter 09 / Daily Operations
运维速查表
TOTAL COMMANDS
18
9.1
容器管理 CONTAINER
| COMMAND | DESCRIPTION | NOTES |
|---|---|---|
| docker ps | 查看运行中的容器 | Status check |
| docker ps -a | 查看所有容器(包括停止的) | All status |
| docker stats | 查看容器资源使用情况 | CPU/Mem |
| cat .deployment-state | 查看当前活跃环境 | Blue/Green |
| docker logs -f backend-blue | 实时查看后端日志 | Follow mode |
| docker logs --tail 100 backend-blue | 查看最近 100 行日志 | Limit lines |
| docker restart backend-blue | 重启容器 | Quick reset |
| docker exec -it backend-blue /bin/sh | 进入容器内部 | Interactive |
| docker exec backend-blue curl ... | 执行健康检查 | Health check |
9.2
数据库管理 DATABASE
| COMMAND | DESCRIPTION | NOTES |
|---|---|---|
| docker exec -it ningshen-postgres psql ... | 连接数据库 | Connect |
| ... pg_size_pretty ... | 查看数据库大小 | Disk usage |
| ... pg_stat_activity ... | 查看活动连接 | Connections |
| docker exec ... pg_dump ... | 备份数据库 | Backup |
9.3
清理维护 MAINTENANCE
| COMMAND | DESCRIPTION | NOTES |
|---|---|---|
| docker image prune -f | 清理未使用的镜像 | Cleanup |
| docker system prune -f | 清理未使用的容器、网络、镜像 | Deep clean |
| docker system df | 查看磁盘使用 | Disk stats |
| docker builder prune -f | 清理构建缓存 | Build cache |
Chapter 10 / Project Artifacts
产出物清单
<Project Root>
├── monitoring/
├── backend/
├── database/
└── scripts/
├── monitoring/
├── backend/
├── database/
└── scripts/
10.1
Monitoring
./monitoring/prometheus.yml
Prometheus
yml
指标采集配置
./monitoring/grafana/datasources/
Grafana DS
dir
数据源配置
./monitoring/grafana/dashboards/
Grafana DB
dir
可视化面板配置
./docker-compose.monitoring.yml
Compose
yml
监控容器编排
10.2
Logging
./backend/app/utils/logger.py
Logger
py
日志配置
./backend/app/middleware/logging.py
Middleware
py
请求追踪中间件
./docker-compose.blue-green.yml
Config
yml
日志轮转配置
10.3
Backup
./scripts/backup.sh
Script
sh
项目备份脚本
./database/init.sql
SQL Init
sql
数据库结构
./ningshen-postgres-data
Volume
vol
持久化存储卷
Chapter 11 / Summary
总结
"
运维不是项目的终点
而是价值持续交付的保障
"
敏捷运维将运维能力内建到开发流程中,实现从被动救火到主动预防的转变
11.1 Core Values
1
全链路可观测
Prometheus + Grafana 监控体系
2
自动化响应
健康检查 + 蓝绿部署
3
日志追踪
请求日志中间件
4
备份保障
定期备份 + 多副本存储
5
DevOps
开发运维一体
故障发现
小时级→分钟级
故障恢复
数小时→秒级
变更部署
月度→每日
运维模式
被动救火→主动预防
Appendix / Quick Reference
1.
docker ps查看服务状态
2.
docker logs -f backend-blue实时查看日志
3.
curl http://localhost/api/v1/health健康检查
4.
docker restart backend-blue重启服务
5.
./scripts/deploy/rollback-blue-green.sh蓝绿回滚
6.
docker exec ... pg_dump ...数据库备份
7.
docker system prune -f清理资源