8.3 KiB
8.3 KiB
监控指南
🌍 Language / 语言
学习如何监控你的 AI Proxy Worker 部署,跟踪性能,并使用 Cloudflare 内置监控工具排查问题。
📊 Cloudflare 控制台监控
Worker 分析
在 Cloudflare 控制台中访问实时指标:
- 导航到 Workers & Pages
- 选择你的 AI Proxy Worker
- 查看分析标签
需要监控的关键指标
请求指标
- 每秒请求数 - 流量大小
- 成功率 - 成功请求的百分比
- 错误率 - 需要关注的失败请求
- 响应时间 - 平均延迟
资源使用
- CPU 使用率 - Worker 执行时间
- 内存使用 - 每个请求的内存消耗
- 持续时间 - 请求处理时间
错误分析
- 4xx 错误 - 客户端问题(认证、验证)
- 5xx 错误 - 服务器端问题(上游 API 问题)
- 超时错误 - 超过时间限制的请求
🔍 日志分析
访问日志
# 查看实时日志
wrangler tail
# 按特定日志级别过滤
wrangler tail --format json | jq 'select(.level == "error")'
# 保存日志到文件
wrangler tail --format json > worker-logs.json
日志级别和含义
INFO 级别
console.log('收到请求:', {
method: request.method,
url: request.url,
timestamp: new Date().toISOString()
});
WARN 级别
console.warn('接近速率限制:', {
clientId: 'user123',
requestCount: 95,
limit: 100
});
ERROR 级别
console.error('API 请求失败:', {
error: error.message,
statusCode: response.status,
timestamp: new Date().toISOString()
});
📈 性能监控
响应时间跟踪
监控这些关键性能指标:
// 自定义计时日志
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
性能优化监控
跟踪这些指标以识别优化机会:
- 冷启动频率 - Worker 初始化时间
- 内存使用模式 - 识别内存泄漏
- CPU 利用率 - 优化重计算
- 网络延迟 - 上游 API 响应时间
🚨 告警配置
Cloudflare 告警
为关键问题设置告警:
错误率告警
告警类型: Worker 错误率
阈值: > 5% 错误率
时间段: 5 分钟
通知方式: 邮件, Webhook
响应时间告警
告警类型: Worker 响应时间
阈值: > 3 秒平均值
时间段: 5 分钟
通知方式: 邮件, Slack
请求量告警
告警类型: 请求量
阈值: > 1000 请求/分钟
时间段: 1 分钟
通知方式: 邮件
自定义告警实现
// 在你的 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);
}
}
📋 健康检查
端点监控
创建健康检查端点:
// 添加到你的 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
# 监控端点
https://your-worker.workers.dev/health
# 每 5 分钟检查一次
# 连续 3 次失败时告警
Pingdom
# HTTP 检查配置
URL: https://your-worker.workers.dev/health
间隔: 1 分钟
超时: 30 秒
🔧 调试工具
调试模式
启用详细日志进行故障排除:
const DEBUG = env.DEBUG_MODE === 'true';
if (DEBUG) {
console.log('调试: 请求详情:', {
headers: Object.fromEntries(request.headers),
body: await request.clone().text(),
timestamp: new Date().toISOString()
});
}
请求追踪
跟踪请求在系统中的流转:
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 });
📊 自定义指标
业务指标
跟踪应用程序特定指标:
// 跟踪模型使用情况
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); // 每分钟
成本跟踪
监控使用成本:
// 跟踪请求成本
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
};
}
🔍 日志分析最佳实践
结构化日志
使用一致的日志格式:
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 天
- 自定义日志: 使用外部服务进行长期存储
外部日志聚合
发送日志到外部服务:
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 等工具:
// 发送指标到外部服务
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
})
});
}
}
关键仪表板组件
- 请求量 - 显示随时间变化的请求的折线图
- 错误率 - 带有阈值告警的百分比仪表
- 响应时间 - 显示延迟分布的直方图
- 模型使用 - 显示模型使用情况的饼图
- 地理分布 - 显示请求来源的地图
🚨 事故响应
事故检测
自动化监控应检测:
- 高错误率 (>5%)
- 慢响应时间 (>3s 平均)
- 服务不可用
- 异常流量模式
响应程序
- 立即: 检查 Cloudflare 状态页面
- 调查: 查看最近的部署和日志
- 缓解: 必要时回滚
- 沟通: 更新状态页面并通知用户
- 解决: 修复根本原因
- 事后分析: 记录经验教训
紧急联系人
维护升级列表:
- 主要: 值班工程师
- 次要: 团队负责人
- 升级: 基础设施团队
有效的监控确保可靠的服务 📊
定期监控帮助你维护高可用性并快速解决问题。