数据视图
Elastic Stack Serverless
默认情况下,诸如 Discover 之类的分析功能需要数据视图才能访问您想要浏览的 Elasticsearch 数据。数据视图可以指向一个或多个索引、数据流或 索引别名。 例如,数据视图可以指向昨天的日志数据,或包含您所有数据的索引。
在某些应用中,您还可以使用 ES|QL 查询您的 Elasticsearch 数据。 使用 ES|QL,不需要数据视图。
- 创建和管理数据视图需要具有以下权限的 角色:
数据视图管理
Kibana 权限。view_index_metadata
Elasticsearch 权限。
- 如果出现只读指示器,则您没有足够的权限来创建或保存数据视图。 此外,创建数据视图或保存现有数据视图的按钮不可见。
如果您使用 Kibana 摄取选项 之一收集了数据、上传了文件或添加了示例数据,则会自动创建一个数据视图,您可以开始浏览您的数据。 如果您加载了自己的数据,请按照以下步骤创建数据视图。
打开 Lens 或 Discover,然后打开数据视图菜单。
单击 创建数据视图。
为您的数据视图命名。
在 索引模式 字段中开始键入,Kibana 会查找与您的输入匹配的索引、数据流和别名的名称。 您可以查看所有可用的源,或仅查看数据视图针对的源。
- 要匹配多个源,请使用通配符 (*)。
filebeat-*
匹配filebeat-apache-a
、filebeat-apache-b
等。 - 要匹配多个单个源,请输入它们的名称,用逗号分隔。 请勿在逗号后包含空格。
filebeat-a,filebeat-b
匹配两个索引。 - 要排除某个源,请使用减号 (-),例如,
-test3
。
- 要匹配多个源,请使用通配符 (*)。
打开 时间戳字段 下拉列表,然后选择用于按时间过滤数据的默认字段。
- 如果您未设置默认时间字段,则无法在仪表板上使用全局时间过滤器。 如果您有多个时间字段并且想要创建将基于不同时间戳的可视化效果组合在一起的仪表板,这将非常有用。
- 如果您的索引没有基于时间的数据,请选择 我不想使用时间过滤器。
单击 显示高级设置 以
- 显示隐藏和系统索引。
- 指定您自己的数据视图名称。 例如,输入您的 Elasticsearch 索引别名名称。
-
您可以从 管理 菜单管理您的数据视图。
想要浏览您的数据或创建可视化效果而不将其保存为数据视图? 在 Discover 或 Lens 中的 创建数据视图 表单中选择 不保存使用。 使用临时数据视图,您可以添加字段并创建 Elasticsearch 查询警报,就像使用常规数据视图一样。 您的工作对您空间中的其他人不可见。
临时数据视图会一直保留在您的空间中,直到您更改应用程序或保存它为止。

临时数据视图在 管理 菜单中不可用。
Elastic Stack Serverless
汇总已弃用。 请改用 降采样。
数据视图可以匹配一个汇总索引。 对于具有原始数据和汇总数据的组合汇总数据视图,请使用标准表示法
rollup_logstash,kibana_sample_data_logs
有关示例,请参阅 创建和可视化汇总数据。
Elastic Stack Serverless
如果您的 Elasticsearch 集群配置了 跨集群搜索,则可以创建一个数据视图以跨您选择的集群进行搜索。 使用以下语法在远程集群中指定数据流、索引和别名
<remote_cluster_name>:<target>
要在为跨集群搜索设置的两个 Elasticsearch 集群(命名为 cluster_one
和 cluster_two
)中查询 Logstash 索引
cluster_one:logstash-*,cluster_two:logstash-*
在您的集群名称中使用通配符以匹配任意数量的集群。 要跨名为 cluster_foo
、cluster_bar
等的集群搜索 Logstash 索引
cluster_*:logstash-*
要跨所有已配置为进行跨集群搜索的 Elasticsearch 集群进行查询,请为您的集群名称使用独立的通配符
*:logstash-*
要匹配以 logstash-
开头的索引,但排除以 logstash-old
开头的索引,请从名称以 cluster_
开头的所有集群中排除
cluster_*:logstash-*,cluster_*:-logstash-old*
排除集群可以避免向该集群发送任何网络调用。 要排除名称为 cluster_one
的集群
cluster_*:logstash-*,-cluster_one:*
配置数据视图以使用跨集群搜索语法后,Kibana 中使用该数据视图的所有搜索和聚合都会利用跨集群搜索。
有关更多信息,请参阅 从跨集群搜索中排除集群或索引。
删除数据视图后,您无法恢复关联的字段格式化程序、运行时字段、源过滤器和字段受欢迎程度数据。 删除数据视图不会从 Elasticsearch 中删除任何索引或数据文档。
删除数据视图会破坏引用该数据视图的所有可视化效果、保存的 Discover 会话和其他保存的对象。
- 使用导航菜单或 全局搜索字段 转到 数据视图 管理页面。
- 找到您想要删除的数据视图,然后单击 操作 列中的
。
浏览器会缓存数据视图字段列表,以提高性能。 这对于具有高字段计数且跨越大量索引和集群的数据视图尤其重要。 在典型的 Kibana 使用中,字段列表每隔几分钟更新一次。 或者,使用数据视图管理详细信息页面上的刷新按钮来获取更新的字段列表。 强制重新加载 Kibana 具有相同的效果。
字段列表可能会受到索引和用户权限更改的影响。
要自定义数据视图中的数据字段,您可以将运行时字段添加到现有文档,将脚本字段添加到动态计算数据,并更改 Kibana 显示数据字段的方式。
运行时字段是您在摄取数据后添加到文档的字段,并在查询时进行评估。 使用运行时字段,您可以允许更小的索引和更快的摄取时间,从而可以使用更少的资源并降低运营成本。 您可以在使用数据视图的任何地方使用运行时字段,例如,您可以在 Discover 中浏览运行时字段,并使用运行时字段为您的仪表板创建可视化效果。
使用运行时字段,您可以
- 为特定用例定义字段,而无需修改底层架构。
- 覆盖从索引字段返回的值。
- 在不了解结构的情况下开始处理您的数据。
- 将字段添加到现有文档,而无需重新索引您的数据。
运行时字段可能会影响 Kibana 的性能。 当您运行查询时,Elasticsearch 首先使用您索引的字段来缩短响应时间。 索引您常用的搜索和过滤字段,例如 timestamp
,然后使用运行时字段来限制 Elasticsearch 用于计算值的字段数量。
有关如何将运行时字段与 Elasticsearch 配合使用的详细信息,请参阅 运行时字段。
要向数据视图添加运行时字段,请打开要更改的数据视图,然后使用 Painless 脚本语言发出单个值来定义字段值。您还可以在 Discover 和 Lens 中添加运行时字段。
使用导航菜单或 全局搜索字段 转到 数据视图 管理页面。
选择要添加运行时字段的数据视图,然后单击添加字段。
输入字段名称,然后选择类型。
选择设置自定义标签,然后输入要在使用数据视图的位置(例如 Discover)显示的标签。
选择设置值,然后定义脚本。脚本必须与类型匹配,否则数据视图在任何使用它的地方都会失败。
为了帮助您定义脚本,请使用预览
- 要查看其他可用字段,请使用文档 ID 箭头。
- 要过滤字段列表,请在过滤字段中输入关键字。
- 要将常用字段固定到列表顶部,请将鼠标悬停在字段上,然后单击
。
单击创建字段。
针对数据视图创建的运行时字段不会应用于 Elasticsearch 中基础索引映射。
使用 示例 Web 日志 数据,自行尝试运行时字段示例。
返回 Hello World!
emit("Hello World!");
从字节计算千字节
emit(doc['bytes'].value / 1024)
返回 URL 中最后一个斜杠后出现的字符串
def path = doc["url.keyword"].value;
if (path != null) {
int lastSlashIndex = path.lastIndexOf('/');
if (lastSlashIndex > 0) {
emit(path.substring(lastSlashIndex+1));
return;
}
}
emit("");
当选择类型 Composite
时,单个运行时字段也可以生成多个子字段。脚本编辑器提供可为每个子字段自定义的默认类型。
返回 keyword
和 double
类型子字段。 请注意,emit
的第一个参数是子字段的名称。
emit('subfield_a', 'Hello');
emit('subfield_b', 42);
用 None
替换 null
值
def source = doc['referer'].value;
if (source != null) {
emit(source);
return;
}
else {
emit("None");
}
指定操作系统条件
def source = doc['machine.os.keyword'].value;
if (source != "") {
emit(source);
}
else {
emit("None");
}
编辑运行时字段的设置,或从数据视图中删除运行时字段。
- 使用导航菜单或 全局搜索字段 转到 数据视图 管理页面。
- 选择包含要管理的运行时字段的数据视图,然后打开运行时字段编辑选项或删除运行时字段。
使用 运行时字段 而不是脚本字段。运行时字段支持 Painless 脚本,并提供更大的灵活性。您还可以使用 Elasticsearch 查询语言 (ES|QL) 在查询时直接计算值。
脚本字段从 Elasticsearch 索引中的数据动态计算数据。数据作为文档数据的一部分显示在 Discover 选项卡上,您可以在可视化中使用脚本字段。您可以使用 Kibana 查询语言查询脚本字段,并使用过滤器栏对其进行过滤。脚本字段值是在查询时计算的,因此它们不会被索引,并且不能使用 Kibana 默认查询语言进行搜索。
使用脚本字段动态计算数据可能会消耗大量资源,并可能对 Kibana 性能产生直接影响。请记住,脚本字段没有内置验证。如果您的脚本有错误,则在尝试查看动态生成的数据时会收到异常。
在 Kibana 中定义脚本字段时,您可以选择 Lucene 表达式 或 Painless 脚本语言。
您可以在表达式中引用任何单值数字字段,例如
doc['field_name'].value
有关脚本字段和更多示例的更多信息,请参阅 在 Kibana 脚本字段中使用 Painless
以下代码段演示了如何将 Kibana 示例数据日志数据视图上的一个名为 computed_values
的脚本字段示例迁移到运行时字段或 ES|QL 查询,突出显示了每种方法之间的差异。
在脚本字段示例中,创建变量以跟踪脚本需要访问或返回的所有值。由于脚本字段只能返回单个值,因此创建的变量必须在脚本末尾作为数组一起返回。
def hour_of_day = $('@timestamp', ZonedDateTime.parse('1970-01-01T00:00:00Z')).getHour();
def time_of_day = '';
if (hour_of_day >= 22 || hour_of_day < 5)
time_of_day = 'Night';
else if (hour_of_day < 12)
time_of_day = 'Morning';
else if (hour_of_day < 18)
time_of_day = 'Afternoon';
else
time_of_day = 'Evening';
def response_int = Integer.parseInt($('response.keyword', '200'));
def response_category = '';
if (response_int < 200)
response_category = 'Informational';
else if (response_int < 300)
response_category = 'Successful';
else if (response_int < 400)
response_category = 'Redirection';
else if (response_int < 500)
response_category = 'Client Error';
else
response_category = 'Server Error';
return [time_of_day, response_category];
与脚本字段不同,运行时字段不需要返回单个值,并且可以在脚本中的任何点发出值,这些值将被组合并作为多值字段返回。这使得脚本逻辑更具灵活性,并消除了手动管理值数组的需要。
def hour_of_day = $('@timestamp', ZonedDateTime.parse('1970-01-01T00:00:00Z')).getHour();
if (hour_of_day >= 22 || hour_of_day < 5)
emit('Night');
else if (hour_of_day < 12)
emit('Morning');
else if (hour_of_day < 18)
emit('Afternoon');
else
emit('Evening');
def response_int = Integer.parseInt($('response.keyword', '200'));
if (response_int < 200)
emit('Informational');
else if (response_int < 300)
emit('Successful');
else if (response_int < 400)
emit('Redirection');
else if (response_int < 500)
emit('Client Error');
else
emit('Server Error');
或者,可以使用 ES|QL 跳过对数据视图管理的需要,并简单地在查询时计算您需要的值。ES|QL 支持在单个查询中计算多个字段值,使用具有丰富命令和函数的计算值,甚至对计算值进行聚合。这使其成为一次性查询和实时数据分析的绝佳解决方案。
FROM kibana_sample_data_logs
| EVAL hour_of_day = DATE_EXTRACT("HOUR_OF_DAY", @timestamp)
| EVAL time_of_day = CASE(
hour_of_day >= 22 OR hour_of_day < 5, "Night",
hour_of_day < 12, "Morning",
hour_of_day < 18, "Afternoon",
"Evening"
)
| EVAL response_int = TO_INTEGER(response)
| EVAL response_category = CASE(
response_int < 200, "Informational",
response_int < 300, "Successful",
response_int < 400, "Redirection",
response_int < 500, "Client Error",
"Server Error"
)
| EVAL computed_values = MV_APPEND(time_of_day, response_category)
| DROP hour_of_day, time_of_day, response_int, response_category
在 9.0 中,已从数据视图管理页面中删除了创建新脚本字段的功能。现有脚本字段仍然可以编辑或删除,并且可以通过直接导航到 /app/management/kibana/dataViews/dataView/{{dataViewId}}/create-field
来访问创建 UI,但我们建议迁移到运行时字段或 ES|QL 查询以做好移除准备。
- 使用导航菜单或 全局搜索字段 转到 数据视图 管理页面。
- 选择包含要管理的脚本字段的数据视图。
- 选择脚本字段选项卡,然后打开脚本字段编辑选项或删除脚本字段。
有关 Elasticsearch 中脚本字段的更多信息,请参阅 脚本。
脚本字段不支持内置验证。当您的脚本包含错误时,在您查看动态生成的数据时会收到异常。
Kibana 使用与 Elasticsearch 相同的字段类型,但是,某些 Elasticsearch 字段类型在 Kibana 中不受支持。要自定义 Kibana 显示数据字段的方式,请使用格式化选项。
- 使用导航菜单或 全局搜索字段 转到 数据视图 管理页面。
- 单击包含要更改的字段的数据视图。
- 找到字段,然后打开编辑选项 (
)。
- 选择设置自定义标签,然后输入字段的自定义标签。
- 选择设置格式,然后输入字段的格式。
对于数字字段,默认字段格式化程序基于 meta.unit
字段。该单位与 时间单位、百分比或字节相关联。百分比的约定是使用值 1 表示 100%。
字符串字段支持字符串和 Url 格式化程序。
字符串字段格式化程序使您能够将转换应用于字段。
支持的转换包括
- 转换为小写
- 转换为大写
- 转换为首字母大写
- 应用短点转换,该转换将
.
字符之前的内容替换为内容的第一个字符。例如
- 原始
- 变为
com.organizations.project.ClassName
-
c.o.p.ClassName
- Base64 解码
- URL 参数解码
您可以为 Url
字段格式化程序指定以下类型
- 链接 — 将字段的内容转换为 URL。您可以指定图像的宽度和高度,同时保持纵横比。当图像小于指定的参数时,图像无法放大。
- 图像 — 指定图像目录。
- 音频 — 指定音频目录。
要自定义 URL 字段格式,请使用模板。URL 模板使您能够将值添加到部分 URL。要将字段的内容添加到固定的 URL,请使用 {{value}}
字符串。
例如,当
- 字段包含用户 ID
- 字段使用
Url
字段格式化程序 - URI 模板为
http://company.net/profiles?user_id={{{value}}}
生成的 URL 将 {{value}}
替换为字段中的用户 ID。
{{value}}
模板字符串对字段的内容进行 URL 编码。当编码为 URL 的字段包含非 ASCII 字符时,这些字符将替换为 %
字符和适当的十六进制代码。例如,字段内容 users/admin
导致 URL 模板添加 users%2Fadmin
。
当格式化程序类型为 Image 时,{{value}}
模板字符串指定指定 URI 处的图像名称。
当格式化程序类型为 Audio 时,{{value}}
模板字符串指定指定 URI 处的音频文件名称。
要将未转义的值直接传递到 URL,请使用 {{rawValue}}
字符串。
标签模板使您能够指定一个文本字符串,该字符串显示为代替原始 URL。您可以像往常一样在标签模板中使用 {{value}}
模板字符串。您还可以使用 {{url}}
模板字符串来显示格式化的 URL。
日期字段支持日期、字符串和 Url 格式化程序。
日期格式化程序使您能够使用 moment.js 标准格式定义来选择日期戳的显示格式。
字符串字段格式化程序使您能够将转换应用于字段。
支持的转换包括
- 转换为小写
- 转换为大写
- 转换为首字母大写
- 应用短点转换,该转换将
.
字符之前的内容替换为内容的第一个字符。例如
- 原始
- 变为
com.organizations.project.ClassName
-
c.o.p.ClassName
- Base64 解码
- URL 参数解码
您可以为 Url
字段格式化程序指定以下类型
- 链接 — 将字段的内容转换为 URL。您可以指定图像的宽度和高度,同时保持纵横比。当图像小于指定的参数时,图像无法放大。
- 图像 — 指定图像目录。
- 音频 — 指定音频目录。
要自定义 URL 字段格式,请使用模板。URL 模板使您能够将值添加到部分 URL。要将字段的内容添加到固定的 URL,请使用 {{value}}
字符串。
例如,当
- 字段包含用户 ID
- 字段使用
Url
字段格式化程序 - URI 模板为
http://company.net/profiles?user_id={{{value}}}
生成的 URL 将 {{value}}
替换为字段中的用户 ID。
{{value}}
模板字符串对字段的内容进行 URL 编码。当编码为 URL 的字段包含非 ASCII 字符时,这些字符将替换为 %
字符和适当的十六进制代码。例如,字段内容 users/admin
导致 URL 模板添加 users%2Fadmin
。
当格式化程序类型为 Image 时,{{value}}
模板字符串指定指定 URI 处的图像名称。
当格式化程序类型为 Audio 时,{{value}}
模板字符串指定指定 URI 处的音频文件名称。
要将未转义的值直接传递到 URL,请使用 {{rawValue}}
字符串。
标签模板使您能够指定一个文本字符串,该字符串显示为代替原始 URL。您可以像往常一样在标签模板中使用 {{value}}
模板字符串。您还可以使用 {{url}}
模板字符串来显示格式化的 URL。
地理点字段支持字符串格式化程序。
字符串字段格式化程序使您能够将转换应用于字段。
支持的转换包括
- 转换为小写
- 转换为大写
- 转换为首字母大写
- 应用短点转换,该转换将
.
字符之前的内容替换为内容的第一个字符。例如
- 原始
- 变为
com.organizations.project.ClassName
-
c.o.p.ClassName
- Base64 解码
- URL 参数解码
数字字段支持字节和位、颜色、持续时间、直方图、数字、百分比、字符串和 Url 格式化程序。
字节和位、数字和百分比格式化程序使您能够使用 Kibana 维护的 Elastic 数字模式语法来选择字段中数字的显示格式。
直方图格式化程序仅用于 直方图字段类型。当您使用直方图格式化程序时,可以将字节和位、数字或百分比格式应用于聚合数据。
您可以为 Url
字段格式化程序指定以下类型
- 链接 — 将字段的内容转换为 URL。您可以指定图像的宽度和高度,同时保持纵横比。当图像小于指定的参数时,图像无法放大。
- 图像 — 指定图像目录。
- 音频 — 指定音频目录。
要自定义 URL 字段格式,请使用模板。URL 模板使您能够将值添加到部分 URL。要将字段的内容添加到固定的 URL,请使用 {{value}}
字符串。
例如,当
- 字段包含用户 ID
- 字段使用
Url
字段格式化程序 - URI 模板为
http://company.net/profiles?user_id={{{value}}}
生成的 URL 将 {{value}}
替换为字段中的用户 ID。
{{value}}
模板字符串对字段的内容进行 URL 编码。当编码为 URL 的字段包含非 ASCII 字符时,这些字符将替换为 %
字符和适当的十六进制代码。例如,字段内容 users/admin
导致 URL 模板添加 users%2Fadmin
。
当格式化程序类型为 Image 时,{{value}}
模板字符串指定指定 URI 处的图像名称。
当格式化程序类型为 Audio 时,{{value}}
模板字符串指定指定 URI 处的音频文件名称。
要将未转义的值直接传递到 URL,请使用 {{rawValue}}
字符串。
标签模板使您能够指定一个文本字符串,该字符串显示为代替原始 URL。您可以像往常一样在标签模板中使用 {{value}}
模板字符串。您还可以使用 {{url}}
模板字符串来显示格式化的 URL。
字符串字段格式化程序使您能够将转换应用于字段。
支持的转换包括
- 转换为小写
- 转换为大写
- 转换为首字母大写
- 应用短点转换,该转换将
.
字符之前的内容替换为内容的第一个字符。例如
- 原始
- 变为
com.organizations.project.ClassName
-
c.o.p.ClassName
- Base64 解码
- URL 参数解码
持续时间字段格式化程序以以下增量显示字段的数值
- 皮秒
- 纳秒
- 微秒
- 毫秒
- 秒
- 分钟
- 小时
- 天
- 周
- 月
- 年
您可以为输入和输出格式指定最多 20 位小数的这些增量。
颜色字段格式化器允许您为数字字段指定具有值范围的颜色。
当您选择颜色格式化器时,点击添加颜色,然后指定范围、文本颜色和背景颜色。