mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-09-13 16:34:57 +00:00
feat: 新增通用链路追踪模块与 RAG 对话全链路埋点
- 新增 ruoyi-common-trace 模块:TraceContext 上下文、TraceNodeAspect 注解切面、数据库双表持久化 - ChatServiceFacade / KnowledgeRetrievalServiceImpl 完成 RAG 对话 retrieval → rerank → llm-call 全链路采集 - 新增 TraceController 提供列表/详情/节点查询 API 及数据统计 - 支持 trace.enabled 开关、payload 长度截断、错误安全降级 - TraceNodeTemplate 模板封装标准节点生命周期,减少重复样板代码
This commit is contained in:
128
docs/script/sql/update/update-0615-trace.sql
Normal file
128
docs/script/sql/update/update-0615-trace.sql
Normal file
@@ -0,0 +1,128 @@
|
||||
-- 链路追踪运行记录表
|
||||
CREATE TABLE IF NOT EXISTS `trace_run` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`trace_id` varchar(64) NOT NULL COMMENT '链路ID',
|
||||
`trace_name` varchar(128) NOT NULL COMMENT '链路名称',
|
||||
`business_type` varchar(64) NOT NULL COMMENT '业务类型',
|
||||
`business_id` varchar(128) DEFAULT NULL COMMENT '业务ID',
|
||||
`user_id` bigint DEFAULT NULL COMMENT '用户ID',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`status` varchar(32) NOT NULL COMMENT '状态',
|
||||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
||||
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
|
||||
`duration_ms` bigint DEFAULT NULL COMMENT '耗时毫秒',
|
||||
`error_message` varchar(1000) DEFAULT NULL COMMENT '错误摘要',
|
||||
`metadata` text DEFAULT NULL COMMENT '元数据JSON',
|
||||
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` bigint DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_trace_run_trace_id` (`trace_id`) USING BTREE,
|
||||
KEY `idx_trace_run_business` (`business_type`, `business_id`) USING BTREE,
|
||||
KEY `idx_trace_run_status_time` (`status`, `start_time`) USING BTREE,
|
||||
KEY `idx_trace_run_tenant_time` (`tenant_id`, `start_time`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='链路追踪运行记录表' ROW_FORMAT=DYNAMIC;
|
||||
|
||||
-- 链路追踪节点记录表
|
||||
CREATE TABLE IF NOT EXISTS `trace_node` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`trace_id` varchar(64) NOT NULL COMMENT '链路ID',
|
||||
`node_id` varchar(64) NOT NULL COMMENT '节点ID',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`parent_node_id` varchar(64) DEFAULT NULL COMMENT '父节点ID',
|
||||
`node_name` varchar(128) NOT NULL COMMENT '节点名称',
|
||||
`node_type` varchar(64) NOT NULL COMMENT '节点类型',
|
||||
`depth` int DEFAULT 0 COMMENT '节点深度',
|
||||
`sort_order` int DEFAULT 0 COMMENT '排序',
|
||||
`class_name` varchar(255) DEFAULT NULL COMMENT '类名',
|
||||
`method_name` varchar(128) DEFAULT NULL COMMENT '方法名',
|
||||
`status` varchar(32) NOT NULL COMMENT '状态',
|
||||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
||||
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
|
||||
`duration_ms` bigint DEFAULT NULL COMMENT '耗时毫秒',
|
||||
`error_message` varchar(1000) DEFAULT NULL COMMENT '错误摘要',
|
||||
`input_payload` text DEFAULT NULL COMMENT '输入JSON',
|
||||
`output_payload` text DEFAULT NULL COMMENT '输出JSON',
|
||||
`metadata` text DEFAULT NULL COMMENT '元数据JSON',
|
||||
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` bigint DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `idx_trace_node_trace_id` (`trace_id`) USING BTREE,
|
||||
KEY `idx_trace_node_parent` (`trace_id`, `parent_node_id`) USING BTREE,
|
||||
KEY `idx_trace_node_time` (`trace_id`, `start_time`) USING BTREE,
|
||||
KEY `idx_trace_node_tenant_time` (`tenant_id`, `start_time`) USING BTREE,
|
||||
KEY `idx_trace_node_type_status` (`node_type`, `status`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='链路追踪节点记录表' ROW_FORMAT=DYNAMIC;
|
||||
|
||||
-- 兼容已存在的旧 trace 表:CREATE TABLE IF NOT EXISTS 不会给旧表补新字段
|
||||
SET @trace_run_add_tenant_sql = (
|
||||
SELECT IF(COUNT(*) = 0,
|
||||
'ALTER TABLE `trace_run` ADD COLUMN `tenant_id` varchar(20) DEFAULT ''000000'' COMMENT ''租户编号'' AFTER `user_id`',
|
||||
'SELECT 1'
|
||||
)
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'trace_run'
|
||||
AND COLUMN_NAME = 'tenant_id'
|
||||
);
|
||||
PREPARE trace_run_add_tenant_stmt FROM @trace_run_add_tenant_sql;
|
||||
EXECUTE trace_run_add_tenant_stmt;
|
||||
DEALLOCATE PREPARE trace_run_add_tenant_stmt;
|
||||
|
||||
SET @trace_run_add_tenant_idx_sql = (
|
||||
SELECT IF(COUNT(*) = 0,
|
||||
'ALTER TABLE `trace_run` ADD INDEX `idx_trace_run_tenant_time` (`tenant_id`, `start_time`) USING BTREE',
|
||||
'SELECT 1'
|
||||
)
|
||||
FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'trace_run'
|
||||
AND INDEX_NAME = 'idx_trace_run_tenant_time'
|
||||
);
|
||||
PREPARE trace_run_add_tenant_idx_stmt FROM @trace_run_add_tenant_idx_sql;
|
||||
EXECUTE trace_run_add_tenant_idx_stmt;
|
||||
DEALLOCATE PREPARE trace_run_add_tenant_idx_stmt;
|
||||
|
||||
SET @trace_node_add_tenant_sql = (
|
||||
SELECT IF(COUNT(*) = 0,
|
||||
'ALTER TABLE `trace_node` ADD COLUMN `tenant_id` varchar(20) DEFAULT ''000000'' COMMENT ''租户编号'' AFTER `node_id`',
|
||||
'SELECT 1'
|
||||
)
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'trace_node'
|
||||
AND COLUMN_NAME = 'tenant_id'
|
||||
);
|
||||
PREPARE trace_node_add_tenant_stmt FROM @trace_node_add_tenant_sql;
|
||||
EXECUTE trace_node_add_tenant_stmt;
|
||||
DEALLOCATE PREPARE trace_node_add_tenant_stmt;
|
||||
|
||||
SET @trace_node_add_tenant_idx_sql = (
|
||||
SELECT IF(COUNT(*) = 0,
|
||||
'ALTER TABLE `trace_node` ADD INDEX `idx_trace_node_tenant_time` (`tenant_id`, `start_time`) USING BTREE',
|
||||
'SELECT 1'
|
||||
)
|
||||
FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'trace_node'
|
||||
AND INDEX_NAME = 'idx_trace_node_tenant_time'
|
||||
);
|
||||
PREPARE trace_node_add_tenant_idx_stmt FROM @trace_node_add_tenant_idx_sql;
|
||||
EXECUTE trace_node_add_tenant_idx_stmt;
|
||||
DEALLOCATE PREPARE trace_node_add_tenant_idx_stmt;
|
||||
|
||||
-- 链路追踪监控菜单 & 按钮权限
|
||||
INSERT INTO `sys_menu`
|
||||
(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
SELECT (SELECT COALESCE(MAX(`menu_id`), 0) + 1 FROM (SELECT `menu_id` FROM `sys_menu`) t), '链路追踪', 2, 7, 'trace', 'monitor/trace/index', '', 1, 0, 'C', '0', '0', 'monitor:trace:list', 'tabler:route', 103, 1, NOW(), '链路追踪监控菜单';
|
||||
|
||||
INSERT INTO `sys_menu`
|
||||
(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `remark`)
|
||||
SELECT (SELECT COALESCE(MAX(`menu_id`), 0) + 1 FROM (SELECT `menu_id` FROM `sys_menu`) t), '链路追踪查询', (SELECT `menu_id` FROM `sys_menu` WHERE `perms` = 'monitor:trace:list' AND `menu_type` = 'C' LIMIT 1), 1, '#', '', '', 1, 0, 'F', '0', '0', 'monitor:trace:query', '#', 103, 1, NOW(), '';
|
||||
Reference in New Issue
Block a user