CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页实践文章UModel查询基础:实体检索和分析

UModel查询基础:实体检索和分析

#UModel查询基础#实体检索和分析#可观测性#observability#Kubernetes#Docker

agenticOps | 2026-05-23

1. 背景

在可观测性系统中,UModel定义了统一的数据模型(Schema),UModel查询专注于探索知识图谱元数据,而Entity查询则用于查询和检索具体的实体实例数据。Entity查询基于USearch引擎,提供了强大的全文检索、精确查找、条件过滤等能力,支持跨域、跨实体类型的联合查询。

与UModel查询关注Schema定义不同,Entity查询专注于运行时实体数据,帮助用户快速定位、检索和分析具体的实体实例,如服务实例、Pod实例、主机实例等。

1.1 Entity查询解决的问题

在实际的可观测性场景中,我们经常需要:

  1. 快速定位实体:根据关键词、属性值快速找到相关实体
  2. 跨域检索:在多个域(APM、K8s、云资源等)中联合搜索
  3. 精确查询:根据已知的实体ID批量查询详细信息
  4. 条件过滤:基于实体属性进行复杂的条件筛选
  5. 统计分析:对实体数据进行聚合分析和计算

Entity查询通过USearch引擎的统一接口,解决了传统多系统查询的痛点,提供了高效、灵活的实体检索能力。

1.2 三种查询类型的区别

在EntityStore中,存在三种不同类型的查询:

查询类型目标数据查询内容典型场景
UModel查询知识图谱SchemaEntitySet定义、关系类型定义"系统中有哪些实体类型?"
Entity查询具体实体实例服务实例、Pod实例、主机实例等"user-service这个服务现在状态如何?"
Topo查询实体间关系实例具体的调用关系、部署关系等"user-service调用了哪些服务?"

Entity查询专注于实体实例数据,是日常运维和问题排查中最常用的查询方式。

2. Entity查询介绍

2.1 数据模型

三层存储结构

USearch采用分层存储结构,确保数据的逻辑隔离和高效查询:

  1. Workspace层:最顶层隔离单位,不同workspace之间完全隔离
  2. Domain层:域级别的分类,用于业务逻辑分组(如apm、k8s、acs等)
  3. EntityType层:具体的实体类型,包含实际的实体数据(如apm.service、k8s.pod等)

Workspace: my-observability
├── Domain: apm
│ ├── EntityType: apm.service
│ ├── EntityType: apm.host 
│ └── EntityType: apm.instance
├── Domain: k8s
│ ├── EntityType: k8s.pod
│ ├── EntityType: k8s.node
│ └── EntityType: k8s.service
└── Domain: acs
├── EntityType: acs.ecs.instance
└── EntityType: acs.rds.instance
 

数据存储特点

  • 唯一性保证:在同一EntityType下,__entity_id__保证唯一性
  • 列式存储:支持多行多列的表结构数据,支持SPL进行统计分析
  • 索引优化:针对检索场景进行全文索引优化,支持多关键词检索和Ranking打分
  • 时序支持:支持基于时间范围的数据查询和过滤,支持回溯任意时刻的实体和关系状态

2.2 USearch核心功能

检索能力

USearch提供强大的全文检索能力,支持:

  • 多类型联合检索:跨多个domain和entity_type进行联合查询,统一打分排序
  • 多关键词检索打分:基于词权重、字段权重等信息计算相关性分数
  • 智能分词:自动分词和相关性打分,提高检索准确性
-- 检索所有domain中包含"cart"的实体
.entity with(domain='*', name='*', query='cart')

扫描能力

除了检索模式,USearch还支持扫描模式,读取原始数据后通过SPL进行更多的过滤和计算,适用于需要复杂数据处理的场景。

-- 扫描apm域中香港区域的应用数量
.entity with(domain='apm', name='apm.service') 
| where region_id = 'cn-hongkong'
| stats count = count()

2.3 查询语法

基础语法结构

.entity with(
domain='domain_pattern', -- 域过滤模式
name='type_pattern', -- 类型过滤模式 
query='search_query', -- 查询条件
topk=10, -- 返回条数
ids=['id1','id2','id3'] -- 精确ID查询
)

参数详解

参数类型说明示例
domainstring域过滤,支持fnmatch模式'apm', 'a*', '*'
namestring类型过滤,支持fnmatch模式'apm.service', '*service', 'k8s.*'
querystring查询条件,支持多种语法'error', 'name:web-app'
topkint返回记录数,默认10050, 200
idsstring[]精确ID查询,string数组['id1','id2']

fnmatch语法说明:支持通配符匹配,如*匹配任意字符,?匹配单个字符。参考fnmatch文档

域和类型过滤模式

-- 匹配模式示例
.entity with(domain='ac*') -- ac开头的domain
.entity with(domain='a*c') -- a开头、c结尾的domain 
.entity with(name='*instance') -- 以instance结尾的类型
.entity with(name='k8s.*') -- k8s域下的所有类型
.entity with(domain='*', name='*') -- 所有domain和类型

3. 查询模式详解

3.1 精确ID查询

当知道具体的实体ID时,使用ids参数进行精确查询:

-- 查询特定ID的实体
.entity with(
domain='apm', 
name='apm.service', 
ids=['4567bd905a719d197df','973ad511dad2a3f70a']
)

适用场景:

  • 根据告警中的实体ID查询详细信息
  • 验证特定实体的存在性和状态
  • 批量查询已知ID的实体信息

3.2 全文检索模式

基础全文搜索

-- 简单关键词搜索
.entity with(query='web application')

-- 多词OR关系(默认行为)
.entity with(query='kubernetes docker container')

搜索特性:

  • 多个词之间是OR关系,出现任意一个词即满足条件
  • 搜索所有字段,包括系统字段和自定义字段
  • 自动分词和相关性打分

短语搜索

对于通过符号连接(-)的词,必须在同一字段下完整匹配:

-- 完整短语匹配
.entity with(query='opentelemetry.io/name-fraud-detection')

-- 普通搜索(命中任意一个词)
.entity with(query='opentelemetry.io/name cart')

字段限定搜索

指定在特定字段中搜索:

-- 在描述字段中搜索
.entity with(query='description:"error handling service"')

-- 在自定义属性中搜索
.entity with(query='cluster_name:production')

-- 在标签中搜索
.entity with(query='labels.team:backend')

逻辑条件组合

支持and、or、not逻辑运算符:

-- AND条件:同时满足两个条件
.entity with(query='service_name:web AND status:running')

-- OR条件:满足任一条件
.entity with(query='environment:prod OR environment:staging')

-- NOT条件:满足左侧、不满足右侧
.entity with(query='type:service NOT status:stopped')

-- 复杂组合
.entity with(query='(cluster:prod OR cluster:staging) AND NOT status:maintenance')

特殊字符处理:

  • 包含特殊字符(如|、:)的查询必须用双引号包含
  • 示例:query='description:"ratio is 1:2"'

3.3 多类型联合检索

支持跨多个domain和entity_type进行联合查询,统一打分排序:

-- 检索所有domain中包含"cart"的实体
.entity with(domain='*', name='*', query='cart') 

-- 检索所有domain中包含"service"的实体类型,属性中存在"production"的实体
.entity with(domain='*', name='*service*', query='production')

-- 检索特定domain下的多种实体类型,属性中存在"error"或"rate"的实体
.entity with(domain='apm', name='apm.*', query='error rate')

3.4 结合SPL进行数据计算分析

无论检索模式还是扫描模式,都可以结合SPL进行更深入的数据计算:

-- 检索apm域中在香港区域的不同语言的应用数量,按照应用数量降序排列
.entity with(domain='apm', name='apm.service') 
| where region_id = 'cn-hongkong'
| stats count = count() by language 
| project language, count 
| sort count desc

4. 打分和排序机制

4.1 相关性打分

USearch使用多因素综合打分算法:

  1. 词频权重:关键词在文档中出现的频率
  2. 字段权重:不同字段的重要性权重(如名称字段权重高于描述字段)
  3. 文档长度:较短文档中的匹配通常得分更高
  4. 逆文档频率:稀有词汇获得更高权重

4.2 排序规则

默认按相关性分数降序排列,分数相同时按时间戳排序:

-- 默认相关性排序
.entity with(query='web service error', topk=20)

-- 结合SPL自定义排序
.entity with(query='kubernetes pod')
| sort __last_observed_time__ desc
| limit 50

-- 多字段排序
.entity with(domain='apm', name='apm.service')
| sort cluster asc, service_name asc

5. Entity查询具体应用场景

5.1 场景一:快速定位和检索实体

问题描述:线上出现告警或需要查找特定实体时,需要快速定位相关实体实例。

解决方案:根据场景选择不同的查询方式

-- 方式1:根据告警中的实体ID精确查询
.entity with(
domain='apm', 
name='apm.service', 
ids=['4567bd905a719d197df','973ad511dad2a3f70a']
)

-- 方式2:根据关键词全文检索
.entity with(query='user-service error', topk=10)

-- 方式3:字段限定精确查询
.entity with(query='service_name:user-service')

-- 方式4:通过标签查找特定团队的服务
.entity with(
domain='apm', 
name='apm.service', 
query='labels.team:backend AND labels.language:java AND status:running'
)

效果:快速获取问题实体的完整信息,包括状态、属性、标签等,支持多种查询方式满足不同场景需求。

5.2 场景二:跨域联合检索

问题描述:需要在多个域(APM、K8s、云资源等)中搜索包含特定关键词的实体,避免在多系统间切换。

解决方案:使用多类型联合检索

-- 在所有域中搜索包含"error"的实体
.entity with(domain='*', name='*', query='error', topk=50)

-- 检索特定前缀domain下的多种实体类型
.entity with(domain='apm*', name='*', query='error', topk=50)

效果:统一接口检索跨域实体,打破数据孤岛,提高查询效率。

5.3 场景三:条件过滤和数据分析

问题描述:需要找出满足特定条件的实体,并进行统计分析,识别问题模式或进行数据洞察。

解决方案:结合SPL进行条件过滤和聚合分析

-- 找出java语言的apm服务,按集群统计
.entity with(domain='apm', name='apm.service') 
| where language='java'
| stats count=count() by cluster

-- 查询生产环境或预发环境中运行的服务
.entity with(query='(environment:prod OR environment:staging) AND status:running')
| stats count=count() by environment, cluster

-- 检索apm域中ARMS生产应用在不同区域的数量,按照应用数量降序排列
.entity with(domain='apm', query='environment:prod') 
| where telemetry_client='ARMS' 
| stats service_count = count() by service, region_id 
| project region_id, service, service_count 
| sort service_count desc

效果:快速识别问题实体,进行数据聚合分析,发现数据模式。

6. 性能优化建议

6.1 使用精确匹配

字段限定查询比全文搜索更高效:

-- ❌ 全文搜索(较慢)
.entity with(query='production')

-- ✅ 字段限定(更快)
.entity with(query='environment:production')

6.2 避免前缀通配符

后缀通配符比前缀通配符性能更好:

-- ❌ 前缀通配符(较慢)
.entity with(name='*service')

-- ✅ 后缀通配符(更快)
.entity with(name='service*')

6.3 合理使用逻辑运算符

简单的AND条件比复杂的OR条件更高效:

-- ✅ 简单AND条件
.entity with(query='status:running AND cluster:prod')

-- ⚠️ 复杂OR条件(性能较差)
.entity with(query='name:a OR name:b OR name:c OR name:d')

6.4 合理设置topk

根据实际需求设置topk值,避免返回过多不必要的数据:

-- 只需要前10条结果
.entity with(query='error', topk=10)

-- 需要更多结果时再增加
.entity with(query='error', topk=100)

7. 总结

Entity查询作为EntityStore中用于查询实体实例的核心接口,为可观测性场景提供了强大的检索和分析能力。通过Entity查询,用户可以:

  1. 快速定位:通过关键词、ID、条件快速找到目标实体
  2. 跨域检索:统一接口查询多个域的实体数据
  3. 精确查询:支持字段限定、逻辑组合等精确查询方式
  4. 数据分析:结合SPL进行复杂的数据过滤和统计分析

这些能力使得Entity查询成为日常运维、问题排查、数据分析等场景中不可或缺的工具,为可观测性数据的有效利用提供了坚实的基础。

文章大纲

推荐文章

超过 2000+ 位开发者正在阅读

给 OpenClaw 加上企业级 Memory

给 OpenClaw 加上企业级 Memory

4646 阅读

阿里云 STAROps 全域智能运维平台发布!

阿里云 STAROps 全域智能运维平台发布!

3453 阅读

阿里云正式发布 RCA Benchmark

阿里云正式发布 RCA Benchmark

2716 阅读

推荐视频

UModel 最佳实践 Vol.1 UModel 数据建模全景解读

UModel 最佳实践 Vol.1 UModel 数据建模全景解读

3854 观看50:35
云监控2.0全景:可观测范式升级与智能运维蓝图

云监控2.0全景:可观测范式升级与智能运维蓝图

2532 观看41:06

推荐工具

精选可观测领域开发者工具

云监

云监控 2.0 沙箱体验

7483 使用

免费

免费网络拨测工具

2746 使用