Elasticsearch® 最近发布了用于指标的时序数据流。这不仅为 Elastic 可观测性提供了更好的指标支持,还有助于降低存储成本。我们在之前的博客中讨论了这一点。
在本博客中,我们将深入探讨如何通过查看时序指标文档和用于启用时序的映射,来启用和使用时序数据流。特别是,我们将通过使用 Elastic 可观测性的 Nginx 集成来展示这一点。随着 Elastic® 时序数据流 (TSDS) 指标功能的演变,以下一些场景将会发生变化。
Elastic TSDS 将指标存储在针对时序数据库 (TSDB) 优化的索引中,该数据库用于存储时序指标。Elastic 的 TSDB 在 8.7 版本中也进行了重大优化,将存储成本降低了 70% 以上。
什么是 Elastic 时序数据流?
时序数据流 (TSDS) 将带有时间戳的指标数据建模为一个或多个时序。在 TSDS 中,每个 Elasticsearch 文档表示特定时序中的一个观测或数据点。虽然 TSDS 可以包含多个时序,但一个文档只能属于一个时序。一个时序不能跨越多个数据流。
常规数据流可以有不同的用途,包括日志。但是,对于指标使用,建议使用时序数据流。时序数据流在多个方面不同于常规数据流。TSDS 包含多个预定义的维度和多个指标。
以 Nginx 指标为例
集成提供了一种简单的方法来摄取大量服务和系统的可观测性指标。我们在此以Nginx 集成指标数据集为例。这是最近启用时序的集成之一。
在包上启用 TSDS 的过程
在添加了相关的时序指标和维度映射之后,将在集成包的指标数据流上启用时序。带有指标数据流的现有集成将启用时序指标,以便用户可以直接使用它们,而无需任何其他配置。
下图捕获了时序数据流、相应的索引模板、时序索引和单个文档的高级摘要。我们将在稍后深入探讨文档中每个字段的详细信息。
TSDS 指标文档
下面我们提供一个包含时序指标和维度的已摄取的 Elastic 文档的片段。
{
"@timestamp": "2023-06-29T03:58:12.772Z",
"nginx": {
"stubstatus": {
"accepts": 202,
"active": 2,
"current": 3,
"dropped": 0,
"handled": 202,
"hostname": "host.docker.internal:80",
"reading": 0,
"requests": 10217,
"waiting": 1,
"writing": 1
}
}
}
每个文档有多个指标
已摄取的文档包含一系列字段,包括指标字段。多个相关的指标字段可以是单个文档的一部分。文档是单个数据流的一部分,并且通常它包含的所有指标都是相关的。文档中的所有指标都属于同一个时序。
指标类型和维度作为映射
虽然文档包含指标详细信息,但指标类型和维度详细信息是在字段映射中定义的。所有与时序相关的字段映射都是作为包开发的一部分,为给定的数据流集体定义的。所有使用时序数据流发布的集成都包含所有相关的时序字段映射,作为包发布的一部分。特别需要两个额外的映射:time_series_metric 映射和 time_series_dimension 映射。
指标类型字段
文档包含指标类型字段(如上所示)。指标类型字段的映射是使用索引模板中的 time_series_metric 映射完成的,如下所示
"nginx": {
"properties": {
"stubstatus": {
"properties": {
"accepts": {
"type": "long",
"time_series_metric": "counter"
},
"active": {
"type": "long",
"time_series_metric": "gauge"
},
"current": {
"type": "long",
"time_series_metric": "gauge"
},
"dropped": {
"type": "long",
"time_series_metric": "counter"
},
"handled": {
"type": "long",
"time_series_metric": "counter"
},
"reading": {
"type": "long",
"time_series_metric": "gauge"
},
"requests": {
"type": "long",
"time_series_metric": "counter"
},
"waiting": {
"type": "long",
"time_series_metric": "gauge"
},
"writing": {
"type": "long",
"time_series_metric": "gauge"
}
}
}
}
}
维度字段
维度是字段名称和值,它们组合起来标识文档的时序。
在 Elastic 时序中,维度有一些额外的注意事项
- 需要为每个时序定义维度字段。不会有时序具有零维度字段。
- 关键字(或类似)类型的字段可以定义为维度。
- 当前对可以在数据流中定义的维度数量有限制。未来可能会取消此限制。
维度对于单个文档中的所有指标都是通用的,作为数据流的一部分。包(例如:Nginx)的每个时序数据流都已包含一组预定义的维度字段,如下所示。
文档将包含多个维度字段。在 Nginx 的情况下,agend.id 和 nginx.stubstatus.hostname 是其中一些维度字段。维度字段的映射是使用 time_series_dimension 映射完成的,如下所示
"agent": {
"properties": {
"id": {
"type": "keyword",
"time_series_dimension": true
}
}
},
"nginx": {
"properties": {
"stubstatus": {
"properties": {
"hostname": {
"type": "keyword",
"time_series_dimension": true
},
}
}
}
}
元字段
除了上面解释的指标和维度字段外,摄取的文档还具有其他元字段。这些附加字段为指标提供了更丰富的查询功能。
Elastic 元字段示例
"data_stream": {
"dataset": "nginx.stubstatus",
"namespace": "default",
"type": "metrics"
}
Kibana 中的 Discover 和可视化
Elastic 为时序指标提供全面的搜索和可视化功能。时序指标可以在Discover 中按原样搜索。在下面的搜索中,计数器和仪表指标被捕获为不同的图标。下面我们还提供了使用Lens和作为 Nginx 集成包一部分包含的开箱即用仪表板,进行时序指标可视化的示例。
尝试一下!
我们提供了 Elastic Nginx 集成摄取的时序文档的详细示例。我们介绍了如何在 Elastic 中对时序指标进行建模,以及具有示例的其他时序映射。我们提供了 Elastic 时序的维度要求的详细信息,以及 Kibana® 中 TSDS 指标的搜索/可视化/仪表板的简短示例。
还没有 Elastic Cloud 账户?注册 Elastic Cloud,试用我上面讨论的自动检测功能。我很乐意听取您在使用 Elastic 深入了解应用程序堆栈方面的反馈。