设计背景
基于 UModel 的可观测系统中,访问可观测数据需要上层感知 UModel 的概念,包括DataSet、Storage、Filter等,这给实际使用带来了以下挑战:
复杂的存储查找:需要解决各类存储查找问题,包括Filter的路由、字段映射等。
底层实现感知:需要了解MetricStore/LogSet实现的MetricSet等底层细节。
复杂的查询拼接:需要多次交互,例如先检索Meta再查数据。
重复开发:各个使用场景等都需要实现类似的查询逻辑。
应用案例
当前应用案例相关素材,请参考:umodel.zip
设计目标
UModel 高阶接口旨在提供统一、简洁的数据访问层,实现以下核心目标:
1. 简化查询
屏蔽底层复杂性:用户无需了解存储细节、字段映射等实现。
统一查询语法:提供一致的SPL查询接口,降低学习成本。
自动化处理:自动完成路由、映射、过滤等底层操作。
2. 统一接口
标准化访问:为所有数据类型提供标准化的访问方式。
简化集成:简化MCP、AIOps Agent、和其他系统集成的开发工作。
统一SPL:UModel高阶接口使用SPL语法,支持在Query后继续调用SPL进一步分析。
3. 高级抽象
面向对象语义:提供基于实体的抽象访问方式。
智能方法调用:支持运行时获取对象接口并调用(类似Java反射)。
架构设计
整体架构
UModel PaaS接口采用分层架构设计,通过服务化部署提供统一的数据访问能力:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 客户端 │ │ AIOps Agent │ │ UI界面 │
│ (SPL查询) │ │ (智能分析) │ │ (可视化) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ UModel PaaS API │
│ (转换服务) │
└─────────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 数据层API │ │ 对象层API │ │ 元数据层API │
│ (Table模式) │ │ (Object模式) │ │ (Meta查询) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ EntityStore │
│ (底层存储) │
└─────────────────┘
两阶段查询模式
PaaS接口设计采用两阶段查询模式,实现特化过滤和通用计算的解耦:
Phase 1: Table模式 (数据层)
直接数据访问:直接访问数据集(DataSet),返回SPL查询。
特化过滤:基于DataSet的特定能力,定义额外参数(如MetricSet的Step、聚合、Labels/Metrics)。
横向纵向过滤:指定需要的行和列。
适用场景:需要完全控制查询逻辑,不需要实体关系抽象。
Phase 2: Object模式 (对象层)
实体抽象访问:通过实体(EntitySet)访问相关数据。
自动字段映射:自动处理字段映射和过滤条件。
关系数据查询:支持基于实体关系的数据访问。
适用场景:需要基于实体的抽象,自动处理复杂的关系查询。
接口概述
数据层 (Phase 1 Table模式)
提供对各类数据集的直接访问能力:
数据集类型 | SPL语法 | 功能说明 |
MetricSet |
| 指标数据查询,支持PromQL和SPL模式 |
LogSet |
| 日志数据查询,支持全文检索和过滤 |
TraceSet |
| 链路追踪数据查询 |
EventSet |
| 事件数据查询 |
ProfileSet |
| 性能剖析数据查询 |
对象层 (Phase 2 Object模式)
提供面向对象的实体访问能力:
.entity_set with(domain='域名', name='实体名称', [参数])
| entity-call 方法名(参数...)
核心方法类别:
方法类别 | 示例方法 | 功能说明 |
内置管理 |
| 方法列表、配置检查 |
数据访问 |
| 获取实体相关的指标、日志等数据 |
关系访问 |
| 获取实体间关系数据 |
实体管理 |
| 实体列表、相邻实体查询 |