Lalit Satapathy

使用 Elastic 时序数据流探索 Nginx 指标

Elasticsearch 最近发布了 GA 版本的时序指标。在本博客中,我们将深入探讨什么是时序指标文档,以及如何通过使用现有的开箱即用的 Nginx 集成来启用时序的映射。

11 分钟阅读
Exploring Nginx metrics with Elastic time series data streams

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.idnginx.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 深入了解应用程序堆栈方面的反馈。

分享这篇文章