# 监控指标定义 ## 概述 本文档详细描述监控系统的指标定义和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. 后台任务 → 定时汇总写入数据库 ```