首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Elasticsearch ES|QL 视图:一个查询统领十二个仪表盘

Elasticsearch ES|QL 视图:一个查询统领十二个仪表盘

作者头像
点火三周
发布2026-05-11 14:11:07
发布2026-05-11 14:11:07
1070
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

Elasticsearch ES|QL 视图:一个查询统领十二个仪表盘

Elasticsearch 查询语言(ES|QL)现在支持 逻辑视图。只需定义一次查询,然后在 FROM 中像索引一样通过名称引用它。十二个仪表盘,一个定义,零复制粘贴。更新视图后,所有使用者都会自动获得更改。

视图不存储数据;每次读取时都会重新执行,因此结果始终反映当前数据和当前定义。如果你在 SQL 数据库中使用过视图,会感到非常熟悉。区别在于:ES|QL 视图是存储在 Elasticsearch 集群级别的引擎级虚拟索引,而不是在客户端展开的保存查询文本。它们会出现在 Kibana 的自动补全中,支持 跨集群搜索(CCS),并由专用的基于角色的访问控制(RBAC)权限管理。

一个简单的视图

视图可以封装任何 ES|QL 查询。从一个简单的过滤器开始——API 网关的 HTTP 500 错误:

代码语言:javascript
复制
1
2
3
4
5
6
7
8
PUT _query/view/error_triage
{
  "query": """
    FROM svc-gateway-*
    | WHERE http.response.status_code >= 500
    | KEEP @timestamp, http.response.status_code, url.path, source.ip
  """
}

现在任何人都可以编写 FROM error_triage,而无需知道索引模式或过滤条件:

代码语言:javascript
复制
1
2
3
FROM error_triage
| STATS error_count = COUNT(*) BY url.path
| SORT error_count DESC

查询只需定义一次。使用者只需引用名称。

仪表盘界面,顶部显示查询编辑器,内容为“FROM error_triage | STATS error_count@error_triage | SORT error_count DESC”。柱状图显示三个服务的错误计数:payments、gateway 和 auth。图表下方,结果表格列出相同服务,错误计数分别为 payments 194、gateway 37、auth 19。
仪表盘界面,顶部显示查询编辑器,内容为“FROM error_triage | STATS error_count@error_triage | SORT error_count DESC”。柱状图显示三个服务的错误计数:payments、gateway 和 auth。图表下方,结果表格列出相同服务,错误计数分别为 payments 194、gateway 37、auth 19。

仪表盘界面,顶部显示查询编辑器,内容为“FROM error_triage | STATS error_count@error_triage | SORT error_count DESC”。柱状图显示三个服务的错误计数:payments、gateway 和 auth。图表下方,结果表格列出相同服务,错误计数分别为 payments 194、gateway 37、auth 19。

视图通过 _query/view REST API 支持完整的创建、读取、列出、更新和删除(CRUD)操作。

更新传播

假设团队决定 error_triage 还应捕获客户端错误,而不仅仅是 500 错误。原地更新定义:

代码语言:javascript
复制
1
2
3
4
5
6
7
8
PUT _query/view/error_triage
{
  "query": """
    FROM svc-gateway-*
    | WHERE http.response.status_code >= 400
    | KEEP @timestamp, http.response.status_code, url.path, source.ip
  """
}

每个使用 FROM error_triage 的仪表盘面板、警报规则和临时查询都会立即反映更宽的过滤器。无需查找保存的对象,没有过时的副本。一次更改,处处更新。

并排比较,左侧标题“无视图”,右侧标题“有视图”。左侧:一个中心文档连接到多个窗口图标,带有红色箭头和说明“在保存对象中手动查找替换”。右侧:一个标有“critical_errors”的中心文档连接到类似窗口图标,带有绿色箭头和绿色勾号,说明“一次更改,自动处处更新”。
并排比较,左侧标题“无视图”,右侧标题“有视图”。左侧:一个中心文档连接到多个窗口图标,带有红色箭头和说明“在保存对象中手动查找替换”。右侧:一个标有“critical_errors”的中心文档连接到类似窗口图标,带有绿色箭头和绿色勾号,说明“一次更改,自动处处更新”。

并排比较,左侧标题“无视图”,右侧标题“有视图”。左侧:一个中心文档连接到多个窗口图标,带有红色箭头和说明“在保存对象中手动查找替换”。右侧:一个标有“critical_errors”的中心文档连接到类似窗口图标,带有绿色箭头和绿色勾号,说明“一次更改,自动处处更新”。

嵌套视图

视图可以引用其他视图,从而实现分层抽象。创建可疑 IP 和威胁情报的视图,然后组合它们:

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
PUT _query/view/suspicious_ips
{
  "query": """
    FROM svc-auth-*
    | WHERE event.action == "login" AND event.outcome == "failure"
    | STATS attempts    = COUNT(*),
            first_seen  = FIRST(@timestamp, @timestamp),
            latest_user = LAST(user.name, @timestamp)
        BY source.ip
    | WHERE attempts > 3
  """
}
 
PUT _query/view/known_threats
{
  "query": """
    FROM threat-intel
  """
}
 
PUT _query/view/security_overview
{
  "query": """
    FROM suspicious_ips, known_threats
  """
}
 
FROM security_overview
| WHERE source.ip IS NOT NULL
| EVAL is_known_threat = threat.category IS NOT NULL
| KEEP source.ip, attempts, threat.category, threat.severity, is_known_threat
| SORT is_known_threat DESC, attempts DESC

安全团队查询 FROM security_overview,无需了解底层数据模型。他们也不会受到 suspicious_ips 所有者对其所做的任何更改的影响;抽象边界是真实的,而非语法上的。

图表标题“从文本到拓扑”,显示三个堆叠层。底层标记为“基岩 – 原始索引”,包含“svc-auth-*”和“threat-intel”。中间层标记为“基础视图”,包含“suspicious_ips”和“known_threats”。顶层标记为“操作视图”,包含“security_overview”。箭头从每个下层指向上层。右侧文本框说明消费者只查询顶层,下层的更改会立即向上级联。
图表标题“从文本到拓扑”,显示三个堆叠层。底层标记为“基岩 – 原始索引”,包含“svc-auth-*”和“threat-intel”。中间层标记为“基础视图”,包含“suspicious_ips”和“known_threats”。顶层标记为“操作视图”,包含“security_overview”。箭头从每个下层指向上层。右侧文本框说明消费者只查询顶层,下层的更改会立即向上级联。

图表标题“从文本到拓扑”,显示三个堆叠层。底层标记为“基岩 – 原始索引”,包含“svc-auth-*”和“threat-intel”。中间层标记为“基础视图”,包含“suspicious_ips”和“known_threats”。顶层标记为“操作视图”,包含“security_overview”。箭头从每个下层指向上层。右侧文本框说明消费者只查询顶层,下层的更改会立即向上级联。

带子查询的多源视图

视图可以封装任何 ES|QL 查询,包括多源组合,使用 FROM 中的子查询。每个子查询分支独立查询一个服务(自己的过滤器、自己的字段规范化),结果自动合并:

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PUT _query/view/all_errors
{
  "query": """
    FROM
      (FROM svc-gateway-*
       | WHERE http.response.status_code >= 500
       | EVAL service = "gateway",
              error_detail = CONCAT("HTTP ", http.response.status_code::string)
       | KEEP @timestamp, service, error_detail, source.ip),
      (FROM svc-payments-*
       | WHERE transaction.status IN ("failed", "timeout")
       | EVAL service = "payments", error_detail = transaction.status
       | KEEP @timestamp, service, error_detail, source.ip)
  """
}

消费者只需编写:

代码语言:javascript
复制
1
2
3
FROM all_errors
| STATS error_count = COUNT(*) BY service
| SORT error_count DESC

两个索引,两个独立管道,一个名称。稍后要添加第三个服务,只需添加第三个分支;现有分支不变,每个下游仪表盘和警报都会自动反映更新。有关子查询语法以及每个分支中可以执行的操作的深入介绍,请参阅 三个索引走进一个 FROM 子句。

视图的工作原理

当你编写 FROM view_name 时,ES|QL 会解析视图存储的查询并内联执行。视图在每次读取时重新执行,因此结果始终反映当前数据和当前定义。

视图与索引、别名和 数据流 共享命名空间。视图不能与其中任何一个同名(在创建时强制执行)。这确保了无论名称解析为视图、索引还是别名,FROM my_name 都是明确的。

安全模型

视图由四个专用的 RBAC 权限管理:create_viewread_view_metadatadelete_viewmanage_view。Elasticsearch 检查运行查询的用户(调用者安全)的权限,而不是定义视图的用户。查询视图的用户需要同时拥有视图及其底层索引的权限。

Kibana 集成

视图会出现在 Discover 的 ES|QL 编辑器自动补全中,与索引并列。基于 ES|QL 的仪表盘面板可以透明地使用视图。在初始技术预览版中,视图管理仅通过 API 进行。计划推出用于创建和管理视图的 Kibana UI。

跨集群搜索

视图的定义可以使用 CCS 语法 引用远程索引:

代码语言:javascript
复制
1
2
3
4
5
6
7
PUT _query/view/cross_cluster_errors
{
  "query": """
    FROM cluster-west:logs-*, cluster-east:logs-*
    | WHERE log.level IN ("error", "crit")
  """
}

消费者查询 FROM cross_cluster_errors,无需知道涉及哪些集群。

当前限制

在技术预览版中,视图管理仅通过 API 进行,并且 SET 指令不能出现在视图定义内部;调用者在查询时应用它们。基于子查询的视图不能嵌套在其他多源 FROM 表达式中。请参阅 视图文档 获取完整列表。

视图的未来

目前的视图始终是新鲜的;它们在读取时重新执行。物化视图 将翻转这一权衡:预先计算一次,即时读取。例如,为服务等级协议(SLA)仪表盘预先聚合的汇总视图,加载时间仅为毫秒级,而不是每次刷新时扫描原始数据。还计划推出 Kibana 的视图 CRUD UI,包括 Discover 中的“另存为视图”工作流。

尝试一下

逻辑视图作为技术预览版提供。在 Kibana 开发工具或 Discover 中尝试。我们期待你的反馈;请在 GitHub 问题 中提交,并标记 ES|QL 标签。

ES|QL 逻辑视图是技术预览版功能。技术预览版功能可能会发生变化,并且不受 GA 功能支持 SLA 的覆盖。本文描述的任何功能或特性的发布和时机完全由 Elastic 自行决定。任何当前不可用的功能或特性可能无法按时交付或根本无法交付。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点火三周 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Elasticsearch ES|QL 视图:一个查询统领十二个仪表盘
    • 一个简单的视图
    • 更新传播
    • 嵌套视图
    • 带子查询的多源视图
    • 视图的工作原理
    • 安全模型
    • Kibana 集成
    • 跨集群搜索
    • 当前限制
    • 视图的未来
    • 尝试一下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档