全部产品
Search
文档中心

云监控:UModel 建模原则

更新时间:Oct 09, 2025

概述

UModel 是阿里云可观测性产品的核心建模框架,旨在通过统一的数据建模方法,将分散的可观测数据融合成具有内在关联性的知识图谱。本文档阐述了UModel 建模的核心原则,为开发者和架构师提供系统性的建模指导。

1. 总体建模原则

1.1 域设计原则

原则说明:域(Domain)是UModel中最高层次的组织单位,代表了不同的业务领域或技术栈。

核心要求:

  • 谨慎创建:域的创建需要经过团队充分讨论和评估,避免域的随意创建和重复。

  • 业务对齐:每个域应当对应明确的业务边界或技术领域。

  • 治理责任:每个域需要有明确的负责团队,负责该域下所有UModel资源的质量和一致性。

最佳实践:

# 推荐的域划分示例
domains:
  - name: apm           # 应用性能监控
    owner: apm-team
    description: 应用、服务、实例相关的实体和数据
  
  - name: infra         # 基础设施监控  
    owner: infra-team
    description: 主机、容器、网络等基础设施实体
  
  - name: acs           # 阿里云服务
    owner: cloud-team
    description: 云产品和资源相关实体

1.2 通用性原则

原则说明:实体定义应当具备良好的通用性和可扩展性,避免过度特化。

核心要求:

  • 抽象层次适中:既不过于抽象导致无法使用,也不过于具体导致复用性差。

  • 举一反三:考虑同类实体的共同特征,建立可复用的实体模式。

  • 面向场景:基于实际使用场景设计实体,而不是基于数据源结构。

设计示例:

# 通用性好的设计
entity_set:
  name: service
  description: 通用的服务实体,适用于各种服务类型
  fields:
    - name: service_name        # 通用字段
    - name: service_type        # 支持不同类型:web/rpc/db等
    - name: language           # 开发语言
    - name: framework          # 技术框架

# 避免过度特化的设计  
# entity_set:
#   name: spring_boot_web_service  # 过于具体

1.3 单一接入原则

原则说明:同一实体或数据集只应当接入一次,避免重复定义造成的数据混乱。

核心要求:

  • 唯一数据源:每个实体类型对应唯一的权威数据源。

  • 避免重复:不同域之间不应重复定义相同的实体类型。

  • 协调机制:建立跨域协调机制,确保实体定义的一致性。

2. 高质量实体设计标准

2.1 实体重要性评估

评估维度:

评估标准

重要实体特征

非重要实体特征

依赖广度

多个业务模块依赖

单一模块使用

功能核心性

核心功能不可或缺

辅助功能,可替代方案存在

业务价值

直接影响业务决策

仅用于内部运维

查询频率

高频查询访问

低频或批处理访问

决策矩阵:

重要性\质量

高质量

低质量

重要

通过

评审后决定

非重要

评审后决定

不通过

2.2 实体质量评估

数量控制标准:

  • 生命周期总量:单一实体类型在生命周期内总数量应控制在千级别(<10,000)。

  • 单实例规模:单一实体规模上限为10万条记录。

  • 增长可控性:实体数量增长应当可预测和可控制。

Schema质量要求:

  • 结构清晰:字段定义明确,类型一致。

  • 变更稳定:Schema变更频率低,向后兼容。

  • 语义完整:提供完整的字段说明和使用示例。

2.3 实体提取成本

成本评估维度:

成本类型

低成本特征

高成本特征

数据获取

现有系统直接提供

需要复杂ETL处理

计算复杂度

简单字段映射

复杂业务逻辑计算

维护成本

自动化程度高

需要大量人工维护

关系建立

天然关联关系丰富

需要额外计算关联

优化建议:

  • 优先选择ETL成本低的实体定义方案。

  • 建立自动化的实体发现和维护机制。

  • 通过批处理和流处理优化实体生成性能。

2.4 语义完整性

命名规范:

  • 一致性:同类概念使用统一的命名模式。

  • 可理解性:尽可能使用业界标准的术语。

  • 精确性:避免模糊或有歧义的命名,确保语义准确。

语义质量:

  • 完整性:每个实体和字段都有完整的中英文描述。

  • 准确性:描述与实际功能和数据完全一致,避免歧义。

  • 时效性:文档与系统实现保持同步更新。

3. 关系建模最佳实践

3.1 关系类型标准化

标准关系类型:

关系类型

中文描述

英文描述

使用场景

方向性

calls

调用

calls

服务调用、API调用

单向

hosts

承载

hosts

宿主关系,如主机承载服务

单向

contains

包含

contains

组合关系,如集群包含节点

单向

same_as

等同

same as

同一实体的不同表示

双向

related_to

关联

related to

通用关联,兜底使用

双向

关系选择指南:

  1. 优先使用标准关系:尽可能避免创建自定义关系类型。

  2. 语义明确:选择最能准确表达业务语义的关系类型。

  3. 方向一致:同类关系保持一致的方向定义。

  4. 跨域一致:多个域之间的关系方向尽可能保持一致,例如遵循自底向上或自顶向下原则。

3.2 关系方向原则

One-to-Many原则:

  • 宿主关系:主机 hosts 进程(一个主机承载多个进程)。

  • 包含关系:集群 contains 节点(一个集群包含多个节点)。

  • 调用关系:服务A calls 服务B(一个服务可以调用多个服务)。

方向统一性:

  • 同类关系在整个系统中保持一致的方向。

  • 建立标准的关系方向映射表。

  • 在文档中明确说明关系的方向语义。

3.3 EntitySetLink描述准确性

描述要求:

  • 主次关系明确:清晰表达关系中的主体和客体。

  • 时序关系明确:对于有时序特征的关系,明确先后顺序。

  • is_same关系谨慎使用:该关系用于表示实体等价,需要特别谨慎。

# 良好的关系描述示例
kind: entity_set_link
schema:
  url: "umodel.aliyun.com"
  version: "v0.1.0"
metadata:
  name: "infra.host_hosts_apm.service"
  display_name:
    en_us: "Host hosts Service"
    zh_cn: "主机承载服务"
  description:
    en_us: "Indicates that a host provides the runtime environment for services"
    zh_cn: "表示主机为服务提供运行环境的关系"
  domain: infra
spec:
  src:
    domain: infra
    kind: entity_set
    name: infra.host
  dest:
    domain: apm
    kind: entity_set
    name: apm.service
  entity_link_type: hosts

3.4 跨域关联原则

一般情况,跨域关系需要通过一些计算逻辑才能建立,例如通过IP地址、域名、主机名等字段进行匹配。阿里云可观测2.0中的内置关系提供了自动计算的能力。若您需要手动配置这类跨域关系,请按照以下原则进行配置:

  • 需求驱动:跨域的关联关系计算两个域都可实现,建议由最迫切需要该关联关系的业务模块负责配置。

  • 性能优化:需要评估关联计算对底层存储计算性能的影响,并合理配置定期计算的频率。

  • 数据质量:确保关联数据的准确性和时效性,避免关联数据不准确或过期导致的数据错误。

  • 关联灵活性:选择功能丰富的定时、实时计算引擎,建议使用 SLS 提供的定时SQL功能实现。

3.5 关联数量控制

数量限制原则:

  • 避免笛卡尔积:预防关联关系导致的数据爆炸。

  • 分层设计:通过分层架构控制关联复杂度。

  • 渐进式关联:先建立核心关联,再逐步扩展。

3.6 关联规则协作原则

责任分配原则:

  • 业务责任:由最了解业务逻辑的团队负责定义关联规则。

  • 技术责任:由平台团队提供关联计算的技术支持。

  • 质量责任:建立关联质量的监控和反馈机制。

协作机制:

  • 跨域关联需要相关域的团队共同评审。

  • 建立关联变更的影响评估机制。

  • 定期评估关联关系的有效性和准确性。

4. 字段与命名规范(建议)

本节主要介绍UModel建模中的字段与命名规范,当前可观测2.0提供的内置UModel基本遵循此类规范。此规范可以作为企业内部建模的参考。

4.1 基础命名规范

字段名称格式:[a-z][a-z0-9_]*

命名原则:

  • 小写字母开头:所有字段名必须以小写字母开头。

  • 下划线分隔:使用下划线分隔多个单词。

  • 语义明确:字段名应当清楚表达其含义。

  • 长度适中:避免过长或过短的字段名。

示例:

# 正确的字段命名
fields:
  - name: service_name
  - name: cpu_usage
  - name: last_update_time 

# 错误的字段命名
# - name: ServiceName     # 驼峰命名
# - name: cpu-usage       # 使用连字符
# - name: 1st_metric      # 数字开头

4.2 EntitySet命名规范

格式要求:{domain}.{name}

命名原则:

  • 域前缀必须:必须以域名开头,确保全局唯一性。

  • 名称简洁:name部分应当简洁明了,避免冗余。

  • 语义清晰:名称应当准确反映实体的业务含义。

示例:

# 正确的EntitySet命名
entity_sets:
  - name: apm.service          # APM域的服务实体
  - name: infra.host          # 基础设施域的主机实体
  - name: acs.ecs.instance    # 阿里云ECS实例

# 错误的EntitySet命名  
# - name: service            # 缺少域前缀
# - name: apm_service_entity # 冗余的entity后缀

4.3 DataSet命名规范

格式要求:{domain}.{DataSetShortType}.{name}

DataSetShortType类型:

  • metric - 指标数据集。

  • trace - 链路追踪数据集。

  • log - 日志数据集。

  • event - 事件数据集。

  • profile - 性能剖析数据集。

示例:

# 正确的DataSet命名
data_sets:
  - name: apm.metric.jvm           # APM域的JVM指标
  - name: apm.trace.http_request   # APM域的HTTP请求链路
  - name: infra.metric.system      # 基础设施系统指标
  - name: acs.log.access          # 阿里云访问日志

# 错误的DataSet命名
# - name: apm.jvm_metric         # 缺少DataSetShortType
# - name: metric.apm.jvm         # 顺序错误

4.4 Link命名规范

格式要求:{src_object_name}_{LinkType}_{dest_object_name}

命名原则:

  • 关系明确:链接名称应当清楚表达关系类型。

  • 方向一致:源实体在前,目标实体在后。

  • 类型标准:使用标准的关系类型名称。

示例:

# 正确的Link命名
entity_set_links:
  - name: apm.service_calls_apm.service          # 服务调用关系
  - name: apm.service_contains_apm.operation     # 服务包含接口
  - name: infra.server_host_apm.instance         # 主机承载APM实例

# 错误的Link命名
# - name: service_link                          # 不明确的关系
# - name: calls_service_service                 # 缺少域前缀

4.5 必填项规范

国际化要求:所有面向用户的文本都必须提供中英文版本

必填元数据:

# 必填的国际化字段示例
display_name:
  en_us: "Service Name"
  zh_cn: "服务名称"
  
description:
  en_us: "The unique identifier of the service"
  zh_cn: "服务的唯一标识符"
  
short_description:
  en_us: "Service ID"  
  zh_cn: "服务 ID"

质量要求:

  • 准确翻译:中英文描述应当准确对应。

  • 术语一致:使用统一的术语表。

  • 语法正确:确保语法和拼写正确。

  • 中英文衔接:中英文之间添加空格,更加清晰。

4.6 特殊情况处理

豁免机制:对于现有系统已经定义的特殊格式,可以通过@exempt注解申请豁免。

  • 注意: 这种豁免机制只在于阿里云可观测团队内的 CommonSchema 规范审核,对于企业内部建模,请根据实际情况进行调整。

使用场景:

  • 云产品原生字段格式与规范不符。

  • 第三方系统集成的字段命名。

  • 历史遗留系统的兼容性要求。

豁免示例:

fields:
  - name: StatusCode  # @exempt 该云产品本身字段定义为该格式
    description:
      en_us: "HTTP status code from cloud product API"
      zh_cn: "来自云产品 API 的 HTTP 状态码"
    exempt_reason: "阿里云 ECS API 原生字段格式"

审批要求:

  • 提供详细的豁免理由。

  • 评估对系统一致性的影响。

  • 定期review豁免项的必要性。

5. 性能与限制考量

相关内容建议参考 EntityStore 限制。