高阶接口概述

设计背景

基于 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的特定能力,定义额外参数(如MetricSetStep、聚合、Labels/Metrics)。

  • 横向纵向过滤:指定需要的行和列。

  • 适用场景:需要完全控制查询逻辑,不需要实体关系抽象。

Phase 2: Object模式 (对象层)

  • 实体抽象访问:通过实体(EntitySet)访问相关数据。

  • 自动字段映射:自动处理字段映射和过滤条件。

  • 关系数据查询:支持基于实体关系的数据访问。

  • 适用场景:需要基于实体的抽象,自动处理复杂的关系查询。

接口概述

数据层 (Phase 1 Table模式)

提供对各类数据集的直接访问能力:

数据集类型

SPL语法

功能说明

MetricSet

.metric_set with(...)

指标数据查询,支持PromQLSPL模式

LogSet

.log_set with(...)

日志数据查询,支持全文检索和过滤

TraceSet

.trace_set with(...)

链路追踪数据查询

EventSet

.event_set with(...)

事件数据查询

ProfileSet

.profile_set with(...)

性能剖析数据查询

对象层 (Phase 2 Object模式)

提供面向对象的实体访问能力:

.entity_set with(domain='域名', name='实体名称', [参数]) 
| entity-call 方法名(参数...)

核心方法类别

方法类别

示例方法

功能说明

内置管理

__list_method__()__inspect__()

方法列表、配置检查

数据访问

get_golden_metrics()get_metric()

获取实体相关的指标、日志等数据

关系访问

get_relation_metric()list_related_entity_set()

获取实体间关系数据

实体管理

get_entities()get_neighbor_entities()

实体列表、相邻实体查询