Files
AI-Proxy-Worker/docs/Monitoring.md
2025-08-17 19:59:10 +08:00

399 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 监控指南
<div align="center">
**🌍 Language / 语言**
[🇺🇸 English](./Monitoring.en.md) | [🇨🇳 中文](./Monitoring.md)
</div>
学习如何监控你的 AI Proxy Worker 部署,跟踪性能,并使用 Cloudflare 内置监控工具排查问题。
## 📊 Cloudflare 控制台监控
### Worker 分析
在 Cloudflare 控制台中访问实时指标:
1. **导航到 Workers & Pages**
2. **选择你的 AI Proxy Worker**
3. **查看分析标签**
### 需要监控的关键指标
#### 请求指标
- **每秒请求数** - 流量大小
- **成功率** - 成功请求的百分比
- **错误率** - 需要关注的失败请求
- **响应时间** - 平均延迟
#### 资源使用
- **CPU 使用率** - Worker 执行时间
- **内存使用** - 每个请求的内存消耗
- **持续时间** - 请求处理时间
#### 错误分析
- **4xx 错误** - 客户端问题(认证、验证)
- **5xx 错误** - 服务器端问题(上游 API 问题)
- **超时错误** - 超过时间限制的请求
## 🔍 日志分析
### 访问日志
```bash
# 查看实时日志
wrangler tail
# 按特定日志级别过滤
wrangler tail --format json | jq 'select(.level == "error")'
# 保存日志到文件
wrangler tail --format json > worker-logs.json
```
### 日志级别和含义
#### INFO 级别
```javascript
console.log('收到请求:', {
method: request.method,
url: request.url,
timestamp: new Date().toISOString()
});
```
#### WARN 级别
```javascript
console.warn('接近速率限制:', {
clientId: 'user123',
requestCount: 95,
limit: 100
});
```
#### ERROR 级别
```javascript
console.error('API 请求失败:', {
error: error.message,
statusCode: response.status,
timestamp: new Date().toISOString()
});
```
## 📈 性能监控
### 响应时间跟踪
监控这些关键性能指标:
```javascript
// 自定义计时日志
const start = Date.now();
const response = await fetch(upstreamAPI);
const duration = Date.now() - start;
console.log('上游 API 计时:', {
duration: duration,
endpoint: 'deepseek-api',
status: response.status
});
```
### 推荐的响应时间目标
- **聊天请求**: < 2
- **流式响应**: 首个令牌 < 1
- **健康检查**: < 500ms
### 性能优化监控
跟踪这些指标以识别优化机会
1. **冷启动频率** - Worker 初始化时间
2. **内存使用模式** - 识别内存泄漏
3. **CPU 利用率** - 优化重计算
4. **网络延迟** - 上游 API 响应时间
## 🚨 告警配置
### Cloudflare 告警
为关键问题设置告警
#### 错误率告警
```yaml
告警类型: Worker 错误率
阈值: > 5% 错误率
时间段: 5 分钟
通知方式: 邮件, Webhook
```
#### 响应时间告警
```yaml
告警类型: Worker 响应时间
阈值: > 3 秒平均值
时间段: 5 分钟
通知方式: 邮件, Slack
```
#### 请求量告警
```yaml
告警类型: 请求量
阈值: > 1000 请求/分钟
时间段: 1 分钟
通知方式: 邮件
```
### 自定义告警实现
```javascript
// 在你的 worker 代码中
const ALERT_THRESHOLDS = {
ERROR_RATE: 0.05, // 5%
RESPONSE_TIME: 3000, // 3 秒
REQUEST_RATE: 1000 // 1000/分钟
};
async function checkAlerts(metrics) {
if (metrics.errorRate > ALERT_THRESHOLDS.ERROR_RATE) {
await sendAlert('检测到高错误率', metrics);
}
}
```
## 📋 健康检查
### 端点监控
创建健康检查端点
```javascript
// 添加到你的 worker
if (url.pathname === '/health') {
const healthStatus = await checkSystemHealth();
return new Response(JSON.stringify(healthStatus), {
headers: { 'Content-Type': 'application/json' }
});
}
async function checkSystemHealth() {
return {
status: 'healthy',
timestamp: new Date().toISOString(),
version: '1.0.0',
upstreamAPIs: {
deepseek: await checkDeepSeekAPI()
}
};
}
```
### 外部监控服务
与外部监控工具集成
#### Uptime Robot
```bash
# 监控端点
https://your-worker.workers.dev/health
# 每 5 分钟检查一次
# 连续 3 次失败时告警
```
#### Pingdom
```bash
# HTTP 检查配置
URL: https://your-worker.workers.dev/health
间隔: 1 分钟
超时: 30
```
## 🔧 调试工具
### 调试模式
启用详细日志进行故障排除
```javascript
const DEBUG = env.DEBUG_MODE === 'true';
if (DEBUG) {
console.log('调试: 请求详情:', {
headers: Object.fromEntries(request.headers),
body: await request.clone().text(),
timestamp: new Date().toISOString()
});
}
```
### 请求追踪
跟踪请求在系统中的流转
```javascript
function generateTraceId() {
return Math.random().toString(36).substring(2, 15);
}
const traceId = generateTraceId();
console.log('请求开始:', { traceId, url: request.url });
// 在所有函数调用中传递 traceId
const result = await processRequest(request, { traceId });
console.log('请求完成:', { traceId, duration });
```
## 📊 自定义指标
### 业务指标
跟踪应用程序特定指标
```javascript
// 跟踪模型使用情况
const modelUsage = {
'deepseek-chat': 0,
'deepseek-reasoner': 0
};
// 跟踪用户活动
const userMetrics = {
activeUsers: new Set(),
totalRequests: 0,
streamingRequests: 0
};
// 定期记录指标
setInterval(() => {
console.log('业务指标:', {
modelUsage,
userMetrics: {
activeUsers: userMetrics.activeUsers.size,
totalRequests: userMetrics.totalRequests,
streamingRequests: userMetrics.streamingRequests
}
});
}, 60000); // 每分钟
```
### 成本跟踪
监控使用成本
```javascript
// 跟踪请求成本
const costTracking = {
totalRequests: 0,
cpuTime: 0,
bandwidthUsed: 0
};
// 计算预估成本
function calculateCosts(metrics) {
const workerCost = metrics.totalRequests * 0.0000005; // 每百万 $0.50
const cpuCost = metrics.cpuTime * 0.000002; // 每百万 CPU 秒 $2
return {
workerCost,
cpuCost,
totalCost: workerCost + cpuCost
};
}
```
## 🔍 日志分析最佳实践
### 结构化日志
使用一致的日志格式
```javascript
function logEvent(level, event, data) {
const logEntry = {
level,
event,
timestamp: new Date().toISOString(),
workerId: env.WORKER_ID || 'unknown',
...data
};
console[level](JSON.stringify(logEntry));
}
// 使用方法
logEvent('info', 'request_received', { method, url });
logEvent('error', 'api_error', { error: err.message, statusCode });
```
### 日志保留
了解 Cloudflare 的日志保留策略
- **实时日志**: 开发期间可用
- **分析数据**: 保留 30
- **自定义日志**: 使用外部服务进行长期存储
### 外部日志聚合
发送日志到外部服务
```javascript
async function sendToLogService(logData) {
if (env.LOG_SERVICE_URL) {
await fetch(env.LOG_SERVICE_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(logData)
});
}
}
```
## 📱 监控仪表板
### 创建自定义仪表板
使用 Grafana Datadog 等工具
```javascript
// 发送指标到外部服务
async function sendMetrics(metrics) {
if (env.METRICS_ENDPOINT) {
await fetch(env.METRICS_ENDPOINT, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${env.METRICS_API_KEY}`
},
body: JSON.stringify({
service: 'ai-proxy-worker',
timestamp: Date.now(),
metrics
})
});
}
}
```
### 关键仪表板组件
1. **请求量** - 显示随时间变化的请求的折线图
2. **错误率** - 带有阈值告警的百分比仪表
3. **响应时间** - 显示延迟分布的直方图
4. **模型使用** - 显示模型使用情况的饼图
5. **地理分布** - 显示请求来源的地图
## 🚨 事故响应
### 事故检测
自动化监控应检测
- 高错误率 (>5%)
- 慢响应时间 (>3s 平均)
- 服务不可用
- 异常流量模式
### 响应程序
1. **立即**: 检查 Cloudflare 状态页面
2. **调查**: 查看最近的部署和日志
3. **缓解**: 必要时回滚
4. **沟通**: 更新状态页面并通知用户
5. **解决**: 修复根本原因
6. **事后分析**: 记录经验教训
### 紧急联系人
维护升级列表:
- 主要: 值班工程师
- 次要: 团队负责人
- 升级: 基础设施团队
---
**有效的监控确保可靠的服务** 📊
定期监控帮助你维护高可用性并快速解决问题。