本文引用的文件
本手册面向部署后的运维与技术支持人员,覆盖 ai-gateway、ai-server、Electron 客户端三端的日志收集、监控指标采集和故障排查方法。文档同时给出 PostgreSQL/pgvector、Redis、Elasticsearch、Neo4j、DuckDB、向量模型、Agent SSE、文件上传、登录成功率等关键指标的观测方式,并补充常见问题的定位步骤及 deploy/env.sh 相关配置项。
系统由三层组成:
后端 ai-server:业务服务、PostgreSQL/pgvector、Redis、Elasticsearch、Neo4j、DuckDB、本地文件存储、向量模型、Agent 会话与清洗能力。
graph TB
Client["Electron 客户端<br/>主进程 + 渲染进程"] --> Gateway["ai-gateway<br/>Spring Cloud Gateway"]
Gateway --> Server["ai-server<br/>Spring Boot 应用"]
Server --> PG["PostgreSQL/pgvector"]
Server --> Redis["Redis<br/>sa-token / 缓存"]
Server --> ES["Elasticsearch<br/>全文检索索引 zsjz_search"]
Server --> Neo4j["Neo4j<br/>可选图谱"]
Server --> DuckDB["DuckDB<br/>案件库"]
Server --> Files["本地文件存储<br/>./data/files"]
Client --> Map["离线 PMTiles<br/>china.pmtiles"]
图表来源
章节来源
com.zsjz.ai.module.plat:平台、登录、用户、许可证。com.zsjz.ai.module.agent:Agent、SSE、Insight。com.zsjz.ai.module.aiclean:AI 清洗、模板匹配、向量索引。com.zsjz.ai.module.knowledge:知识库、文档索引。com.zsjz.ai.common:异常处理、缓存、数据源、认证。org.springframework:框架层错误单独输出,便于快速发现启动或调度问题。当前配置文件只启用控制台输出,没有独立文件路径,因此生产环境必须额外配置日志文件,否则无法通过常规日志文件收集。
章节来源
章节来源
建议:
章节来源
章节来源
章节来源
| 类别 | 指标 | 说明 | 采集方式 | 关联配置 |
|---|---|---|---|---|
| PostgreSQL/pgvector | 连接数 | 监控 active、idle、idle_in_transaction 连接数,防止连接泄漏 | pg_stat_activity、Prometheus JMX Exporter、数据库自带监控 | SPRING_DATASOURCEDYNAMIC* |
| PostgreSQL/pgvector | 慢查询 | 超过阈值的 SQL 执行时间 | pg_stat_statements 或数据库慢查询日志 | MyBatis 日志实现为 Slf4jImpl |
| Redis | 命中率 | key 命中/未命中比率 | INFO stats、Redis 监控面板 | SPRING_DATA_REDIS_HOST/PORT |
| Redis | 内存使用 | used_memory、evicted_keys、connected_clients | INFO memory、监控工具 | SPRING_DATAREDIS* |
| Elasticsearch | 索引状态 | zsjz_search 索引 health、shard、doc_count | _cat/indices、Kibana、APM | SPRING_ELASTICSEARCH_URIS |
| Neo4j | 连接数与延迟 | 活跃连接、查询耗时 | Neo4j 监控 API、驱动指标 | NEO4J_URI/USERNAME/PASSWORD |
| DuckDB | 打开案件数 | 同时打开的 DuckDB 实例数量 | 应用层统计、进程资源监控 | ZSJZ_DUCKDB_MAX_OPEN_CASES |
| 向量模型 | 加载时间 | bge-m3 ONNX 模型首次加载耗时 | 应用日志、JVM 外部内存监控 | ZSJZ_EMBEDDING_MODEL_PATH |
| Agent SSE | 心跳 | heartbeat 事件是否持续到达 | 前端 SSE 解析器、后端调度线程池 | SPRING_TASK_SCHEDULING_POOL_SIZE |
| 文件上传 | 文件大小 | 单次上传大小、队列积压 | 网关/后端 multipart 配置、应用日志 | SPRING_SERVLETMULTIPART* |
| 登录成功率 | 登录成功/失败比例 | 401、403、503 占比 | 网关访问日志、后端异常日志、前端错误上报 | Sa-Token、Redis、CORS |
章节来源
sequenceDiagram
participant User as "用户"
participant Client as "Electron 客户端"
participant Gateway as "ai-gateway"
participant Server as "ai-server"
participant Redis as "Redis"
participant PG as "PostgreSQL/pgvector"
participant ES as "Elasticsearch"
participant DuckDB as "DuckDB"
participant Model as "向量模型"
User->>Client: "打开应用并绑定服务地址"
Client->>Gateway: "GET /js/a/admin/sys/health"
Gateway->>Server: "转发健康检查"
Server-->>Gateway: "健康响应"
Gateway-->>Client: "健康响应"
User->>Client: "发起登录"
Client->>Gateway: "POST /js/a/auth/login"
Gateway->>Server: "转发登录请求"
Server->>Redis: "写入 sa-token 登录态"
Server->>PG: "校验用户信息"
Server-->>Gateway: "返回 x-token"
Gateway-->>Client: "携带 token 响应"
User->>Client: "发送 Agent 消息"
Client->>Gateway: "POST /js/a/agent/stream"
Gateway->>Server: "转发 SSE 流"
Server->>PG: "RAG 表结构语义检索"
Server->>Model: "生成向量或调用在线 embedding"
Server->>ES: "全文检索辅助"
Server->>DuckDB: "按需打开案件库"
Server-->>Client: "SSE token/heartbeat/done/error"
图表来源
建议采集:
章节来源
建议采集:
章节来源
建议采集:
章节来源
graph LR
Env["deploy/env.sh"] --> AppYaml["ai-server application.yaml"]
DevYaml["ai-server application-dev.yaml"] --> AppYaml
ProdYaml["ai-gateway application-pro.yaml"] --> GWYaml["ai-gateway application.yaml"]
AppYaml --> PG["PostgreSQL/pgvector"]
AppYaml --> Redis["Redis"]
AppYaml --> ES["Elasticsearch"]
AppYaml --> Neo4j["Neo4j"]
AppYaml --> DuckDB["DuckDB"]
AppYaml --> Files["本地文件存储"]
Client["Electron 客户端"] --> GWYaml
GWYaml --> AppYaml
图表来源
章节来源
[本节为通用性能指导,不直接分析具体代码行]
章节来源
章节来源
章节来源
章节来源
章节来源
章节来源
章节来源
章节来源
章节来源
章节来源