基础建模概念

UModel 作为统一的可观测数据建模框架,提供了一套完整的建模语法和概念体系。本章将详细介绍 UModel 的基础建模概念,帮助您理解如何使用 UModel 进行数据建模。

应用案例

当前应用案例相关素材,请参考:umodel.zip

UModel 的核心建模理念基于以下几个基础概念:

  • Field(字段):数据的基本单元和属性定义。

  • Node(节点):数据、实体、存储等的抽象。

  • Link(关联):实体和实体、实体和数据之间的关系。

Node 概念

UModel 采用图论的基本概念,使用 Node(节点)和 Link(边)组成有向图来描述 IT 系统。在 Node 中,根据类型分为:

  • 实体节点(EntitySet):表示具有相同属性的实体的集合。

  • 可观测数据节点(TelemetryDataSet):表示具有相同属性的可观测数据的集合。

  • 存储节点(Storage):表示存储的抽象,例如 SLS、Prometheus、MySQL 等。

Set 的定义

在 UModel 中,Set 是一类特殊的Node,即具有相同属性和特征的数据或实体的抽象集合。Set 类似于数据库中的表或编程语言中的类概念,为同类型的数据提供统一的结构定义。

核心 Set 类型

UModel 定义了两大类核心 Set 类型:

1. EntitySet(实体集)

EntitySet 用于定义实体,是具有相同属性的实体的集合。

主要特性:

  • 实体生命周期管理:支持首次观测时间、最后观测时间、保活机制。

  • 主键定义:通过 primary_key_fields 唯一标识实体。

  • 动态实体支持:支持静态存储和动态生成两种模式。

  • 关系建模:可与其他 EntitySet 、TelemetryDataSet 建立关联关系。

核心配置字段:

spec:
  primary_key_fields: ["field1", "field2"]  # 主键字段列表
  first_observed_time_field: "first_seen"   # 首次观测时间字段
  last_observed_time_field: "last_seen"     # 最后观测时间字段
  keep_alive_seconds: 3600                  # 保活时间(秒)
  dynamic: false                            # 是否为动态实体

应用场景:

  • IT 基础设施实体:主机、容器、网络设备。

  • 应用层实体:服务、接口、数据库实例。

  • 业务实体:用户、订单、产品。

  • 运维实体:运维人员、代码仓库、部署环境。

2. TelemetryDataSet(可观测数据集)

TelemetryDataSet 是可观测数据的通用表示,从结构上类似于数据库的表,但针对"观测"特点添加了时间维度和观测特性。

核心特性:

  • 时间维度:所有可观测数据都包含时间字段。

  • 字段管理:支持显示字段、隐藏字段、标签字段的分类管理。

  • 排序支持:定义默认排序字段和排序方向。

  • 继承机制:其他具体数据集类型都继承自此基础类型。

基础配置:

spec:
  fields: []                    # 字段定义列表
  time_field: "timestamp"       # 时间字段
  name_fields: []               # 显示名称字段
  tag_fields: []                # 标签字段
  hidden_fields: []             # 隐藏字段
  ordered_fields: []            # 排序字段
  default_order: "asc"          # 默认排序方向

3. 具体数据集类型

基于 TelemetryDataSet,UModel 定义了以下具体的数据集类型:

MetricSet(指标集)

  • 用于定义监控指标的集合。

  • 支持标签管理和指标聚合。

  • 包含查询语法类型(prom、spl、cms)。

spec:
  labels:                       # 指标标签配置
    keys: []                    # 标签字段列表
    dynamic: true               # 动态标签生成
  metrics: []                   # 详细指标列表
  query_type: "prom"            # 查询语法类型

LogSet(日志集)

  • 用于定义日志数据的集合。

  • 继承 TelemetryDataSet 的基础能力。

  • 支持灵活的字段定义和过滤。

TraceSet(链路集)

  • 用于定义分布式追踪数据。

  • 包含必需的链路字段:trace_id、span_id、parent_span_id。

  • 支持不同的追踪协议(默认 opentelemetry)。

spec:
  trace_id_field: "traceId"         # TraceID 字段名
  span_id_field: "spanId"           # SpanID 字段名  
  parent_span_id_field: "parentSpanId"  # 父 SpanID 字段名
  protocol: "opentelemetry"         # 追踪协议

EventSet(事件集)

  • 用于定义事件数据的集合。

  • 继承 TelemetryDataSet 基础能力。

  • 适用于告警事件、系统事件等场景。

ProfileSet(性能剖析集)

  • 用于定义性能剖析数据。

  • 支持不同的 Profile 协议(默认 pprof)。

  • 适用于 CPU、内存等性能分析场景。

Storage 的定义

Storage(存储)是 UModel 中用于定义数据物理存储的抽象概念。Storage 将数据建模与具体的存储实现解耦,支持多种存储类型,并提供统一的存储接口。

核心 Storage 类型

  1. SLS LogStore 用于存储日志数据,提供强大的日志搜索和分析能力。

  2. SLS MetricStore 用于存储时序指标数据,提供高性能的指标查询和聚合能力。

  3. Aliyun Prometheus 用于存储 Prometheus 指标数据,提供标准的 Prometheus 指标存储能力,兼容 PromQL 查询语法。

  4. SLS EntityStore 专门用于存储可观测实体和关系数据,提供图查询和关系分析能力。是默认EntitySetEntitySetLink数据的存储类型。

Link(关联)是 UModel 中用于定义不同 Set 之间关系的核心概念。Link 实现了实体与实体、实体与数据、数据与存储之间的关联关系,构建了完整的可观测数据关系图谱。

所有 Link 类型都包含以下通用属性:

spec:
  src:                                # 源 Set 定义
    domain: "example.com"
    kind: "entity_set"
    name: "host"
  dest:                               # 目标 Set 定义  
    domain: "example.com"
    kind: "metric_set"
    name: "host_metrics"
  1. EntitySetLink 用于定义两个 EntitySet 之间的关系,建立实体间的拓扑结构。

  2. DataLink 用于定义 EntitySet/Link 和 DataSet 之间的关系,实现实体与可观测数据的关联。

  3. StorageLink 用于定义 EntitySet/DataSet 和 Storage 之间的关系,实现数据建模与物理存储的解耦。

Storage 概念

Storage 的定义

Storage(存储)是 UModel 中用于定义数据物理存储的抽象概念。Storage 将数据建模与具体的存储实现解耦,支持多种存储类型,并提供统一的存储接口。

核心 Storage 类型

1. SLS LogStore(SLS 日志存储)

SLS LogStore 用于存储日志数据,提供强大的日志搜索和分析能力。

主要特性:

  • 区域项目管理:支持多区域、多项目的存储配置。

  • 过滤优化:支持 search_filter、spl_filter、sql_filter 多种过滤方式。

  • 视图支持:支持 SPL 和 SQL 视图来动态生成数据。

核心配置:

spec:
  region: "cn-beijing"               # 存储区域
  project: "my-project"              # SLS 项目
  store: "app-logs"                  # LogStore 名称
  search_filter: "*"                 # 搜索过滤条件
  spl_filter: "status: 200"          # SPL 过滤条件
  spl_view: "* | where status > 400" # SPL 视图定义

2. SLS MetricStore(SLS 指标存储)

SLS MetricStore 用于存储时序指标数据,提供高性能的指标查询和聚合能力。

主要特性:

  • 时序优化:针对时序数据进行存储和查询优化。

  • 多指标支持:支持多个指标在同一存储中。

  • 高并发查询:支持大规模并发指标查询。

核心配置:

spec:
  region: "cn-beijing"               # 存储区域
  project: "my-project"              # SLS 项目
  store: "app-metrics"               # MetricStore 名称

3. SLS EntityStore(SLS 实体存储)

SLS EntityStore 专门用于存储可观测实体和关系数据,提供图查询和关系分析能力。

主要特性:

  • 实体管理:专门针对实体数据进行优化。

  • 关系存储:支持实体间关系的存储和查询。

  • 工作空间隔离:支持多租户的工作空间隔离。

核心配置:

spec:
  region: "cn-beijing"               # 存储区域
  project: "my-project"              # SLS 项目  
  workspace: "my-workspace"          # 工作空间

4. Aliyun Prometheus(阿里云 Prometheus 存储)

Aliyun Prometheus 提供标准的 Prometheus 指标存储能力,兼容 PromQL 查询语法。

主要特性:

  • Prometheus 兼容:完全兼容 Prometheus 协议和 PromQL。

  • 高可用架构:提供企业级的高可用和容灾能力。

  • SLS 集成:底层基于 SLS 存储,提供统一的可观测体验。

核心配置:

spec:
  region: "cn-beijing"               # 实例区域
  instance_id: "prometheus-xxx"      # Prometheus 实例 ID
  sls_project: "prometheus-project"  # 底层 SLS 项目
  sls_metricstore: "prometheus-data" # 底层 SLS MetricStore