geo/docs/02-模块说明/metrics-definition.md

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. 后台任务 → 定时汇总写入数据库
```