209 lines
5.0 KiB
Markdown
209 lines
5.0 KiB
Markdown
# 监控指标定义
|
|
|
|
## 概述
|
|
|
|
本文档详细描述监控系统的指标定义和LLM成本追踪。
|
|
|
|
## Prometheus指标
|
|
|
|
位置:`backend/app/monitoring/metrics.py`
|
|
|
|
### API层指标
|
|
|
|
| 指标名 | 类型 | 标签 | 说明 |
|
|
|--------|------|------|------|
|
|
| geo_api_requests_total | Counter | method, endpoint, status | HTTP请求总数 |
|
|
| geo_api_request_duration_seconds | Histogram | method, endpoint | 请求延迟分布 |
|
|
| geo_api_requests_in_progress | Gauge | method, endpoint | 当前处理中的请求数 |
|
|
|
|
### Agent层指标
|
|
|
|
| 指标名 | 类型 | 标签 | 说明 |
|
|
|--------|------|------|------|
|
|
| geo_agent_executions_total | Counter | agent_name, status | Agent执行总数 |
|
|
| geo_agent_execution_duration_seconds | Histogram | agent_name | Agent执行耗时 |
|
|
| geo_agent_running_tasks | Gauge | agent_name | 当前运行的任务数 |
|
|
|
|
### LLM层指标
|
|
|
|
| 指标名 | 类型 | 标签 | 说明 |
|
|
|--------|------|------|------|
|
|
| geo_llm_requests_total | Counter | provider, model, status | LLM请求总数 |
|
|
| geo_llm_request_duration_seconds | Histogram | provider, model | LLM请求耗时 |
|
|
| geo_llm_tokens_total | Counter | provider, model, token_type | Token消耗总量 |
|
|
| geo_llm_cost_estimated | Gauge | provider, model | 预估成本(USD) |
|
|
|
|
### 业务层指标
|
|
|
|
| 指标名 | 类型 | 标签 | 说明 |
|
|
|--------|------|------|------|
|
|
| geo_brands_total | Gauge | - | 品牌总数 |
|
|
| geo_queries_total | Counter | platform, status | 查询总数 |
|
|
| geo_content_generated_total | Counter | - | 生成内容总数 |
|
|
| geo_citations_detected_total | Counter | platform | 引用检测总数 |
|
|
|
|
## LLM成本追踪
|
|
|
|
位置:`backend/app/monitoring/llm_metrics.py`
|
|
|
|
### 成本估算表
|
|
|
|
```python
|
|
LLM_COST_PER_TOKEN = {
|
|
# OpenAI
|
|
("openai", "gpt-4o"): {
|
|
"prompt": 0.000005, # $5/1M tokens
|
|
"completion": 0.000015, # $15/1M tokens
|
|
},
|
|
("openai", "gpt-4o-mini"): {
|
|
"prompt": 0.00000015, # $0.15/1M tokens
|
|
"completion": 0.0000006, # $0.60/1M tokens
|
|
},
|
|
("openai", "gpt-4-turbo"): {
|
|
"prompt": 0.00001, # $10/1M tokens
|
|
"completion": 0.00003, # $30/1M tokens
|
|
},
|
|
# DeepSeek
|
|
("deepseek", "deepseek-chat"): {
|
|
"prompt": 0.00000014, # $0.14/1M tokens
|
|
"completion": 0.00000028, # $0.28/1M tokens
|
|
},
|
|
("deepseek", "deepseek-coder"): {
|
|
"prompt": 0.00000014,
|
|
"completion": 0.00000028,
|
|
},
|
|
}
|
|
```
|
|
|
|
### 成本计算公式
|
|
|
|
```
|
|
总成本 = prompt_tokens * prompt_price + completion_tokens * completion_price
|
|
```
|
|
|
|
### LLMMetricsWrapper
|
|
|
|
```python
|
|
class LLMMetricsWrapper:
|
|
def record_request(
|
|
self,
|
|
status: str,
|
|
duration: float,
|
|
prompt_tokens: int = None,
|
|
completion_tokens: int = None,
|
|
):
|
|
"""
|
|
记录LLM请求指标
|
|
1. 记录请求数和耗时
|
|
2. 记录Token消耗
|
|
3. 估算并记录成本
|
|
"""
|
|
```
|
|
|
|
## Histogram buckets
|
|
|
|
### API延迟
|
|
|
|
```python
|
|
buckets=(0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0)
|
|
# 单位:秒
|
|
# P50/P90/P99 估算
|
|
```
|
|
|
|
### Agent执行耗时
|
|
|
|
```python
|
|
buckets=(0.1, 0.5, 1.0, 5.0, 10.0, 30.0, 60.0, 120.0)
|
|
# 单位:秒
|
|
```
|
|
|
|
### LLM请求耗时
|
|
|
|
```python
|
|
buckets=(0.1, 0.5, 1.0, 2.0, 5.0, 10.0, 30.0, 60.0)
|
|
# 单位:秒
|
|
```
|
|
|
|
## 健康检查
|
|
|
|
位置:`backend/app/services/health_checker.py`
|
|
|
|
### 检查端点
|
|
|
|
| 路径 | 说明 | 检查项 |
|
|
|------|------|--------|
|
|
| GET /health | 综合健康检查 | 所有检查项 |
|
|
| GET /health/ready | 就绪检查 | 数据库、Redis |
|
|
| GET /health/live | 存活检查 | 服务运行状态 |
|
|
|
|
### 检查项
|
|
|
|
| 检查项 | 说明 | 超时 |
|
|
|--------|------|------|
|
|
| database | 数据库连接 | 5s |
|
|
| redis | Redis连接 | 5s |
|
|
| disk | 磁盘空间 | - |
|
|
| memory | 内存使用率 | - |
|
|
|
|
## 告警规则
|
|
|
|
### 告警条件
|
|
|
|
| 规则 | 条件 | 级别 | 说明 |
|
|
|------|------|------|------|
|
|
| API响应超时 | p99 > 5s | Warning | 99分位响应时间超过5秒 |
|
|
| API错误率高 | error_rate > 5% | Error | 错误率超过5% |
|
|
| 队列积压 | queue_depth > 1000 | Warning | 队列深度超过1000 |
|
|
| Agent离线 | heartbeat_timeout | Critical | 心跳超时 |
|
|
|
|
### 告警级别
|
|
|
|
| 级别 | 说明 | 通知方式 |
|
|
|------|------|----------|
|
|
| Warning | 警告 | 日志 |
|
|
| Error | 错误 | 日志+邮件 |
|
|
| Critical | 严重 | 日志+邮件+短信 |
|
|
|
|
## 监控集成
|
|
|
|
### Prometheus端点
|
|
|
|
```
|
|
GET /metrics
|
|
```
|
|
|
|
返回Prometheus格式的指标数据。
|
|
|
|
### Grafana仪表板
|
|
|
|
推荐配置的仪表板:
|
|
|
|
1. **API Dashboard**
|
|
- QPS
|
|
- 延迟分布 (P50/P90/P99)
|
|
- 错误率
|
|
|
|
2. **Agent Dashboard**
|
|
- 各Agent执行次数
|
|
- 执行耗时
|
|
- 成功率
|
|
|
|
3. **LLM Dashboard**
|
|
- 请求数
|
|
- Token消耗
|
|
- 成本趋势
|
|
|
|
4. **业务 Dashboard**
|
|
- 品牌数量
|
|
- 内容生成量
|
|
- 引用检测量
|
|
|
|
## 指标收集流程
|
|
|
|
```
|
|
1. API请求 → 中间件记录 (method, endpoint, status, duration)
|
|
2. Agent执行 → AgentHooks记录 (agent_name, status, duration)
|
|
3. LLM调用 → LLMMetricsWrapper记录 (provider, model, tokens, cost)
|
|
4. 后台任务 → 定时汇总写入数据库
|
|
```
|