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

news2024/12/23 9:36:33

作者:Lalit Satapathy

Elasticsearch® 最近发布了用于指标的时间序列数据流。 这不仅为 Elastic Observability 提供了更好的指标支持,而且还有助于降低存储成本。 我们在之前的博客中讨论过这个问题。

在本博客中,我们通过回顾什么是时间序列指标文档(document)以及用于启用时间序列的映射(mapping),深入探讨如何启用和使用时间序列数据流。 特别是,我们将通过使用 Elastic Observability 的 Nginx 集成来展示这一点。 随着 Elastic® 时间序列数据流 (Time Series Data Strream - TSDS) 指标功能的发展,以下一些场景将会发生变化。

Elastic TSDS 将指标存储在针对时间序列数据库 (TSDB) 优化的索引中,TSDB 用于存储时间序列指标。 Elastic 的 TSDB 在 8.7 中也得到了显着优化,存储成本降低了 70% 以上。

 

什么是 Elastic 时间序列数据流?

时间序列数据流 (TSDS) 将带时间戳的指标数据建模为一个或多个时间序列。 在 TSDS 中,每个 Elasticsearch 文档代表特定时间序列中的一个观察或数据点。 虽然一份 TSDS 可以包含多个时间序列,但一篇文档只能属于一个时间序列。 时间序列不能跨越多个数据流。

常规数据流可以有不同的用途,包括日志。 但是,对于指标使用,建议使用时间序列数据流。 时间序列数据流在很多方面与常规数据流不同。 TSDS 包含多个预定义维度和多个指标。

以 Nginx 指标为例

集成(integrations)提供了一种简单的方法来获取大量服务和系统的可观察性指标。 我们在这里使用 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"
                }
           }
       }
    }
}

维度字段

维度(dimensions)是字段名称和值,它们组合起来标识文档的时间序列。

在 Elastic 时间序列中,维度还有一些额外的考虑因素:

  • 需要为每个时间序列定义维度字段。 不会有零维度字段的时间序列。
  • 关键字(keyword,或类似)类型字段可以定义为维度。
  • 当前可以在数据流中定义的维度数量存在限制。 未来限制可能会取消。

维度对于单个文档中的所有指标是通用的,作为数据流的一部分。 包(例如: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
                },
            }
       }
    }
}

元字段 - Meta fields

除了上面解释的指标和维度字段之外,摄取的文档还具有其他元字段。 这些附加字段为指标提供了更丰富的查询功能。

Elastic 元字段示例

 "data_stream": {
      "dataset": "nginx.stubstatus",
      "namespace": "default",
      "type": "metrics"
 }

在 Kibana 中 Discover 和可视化

Elastic 为时间序列指标提供全面的搜索和可视化。 可以在 Discover 中按原样搜索时间序列指标。 在下面的搜索中,计数器(counters)和仪表(gauges)指标被捕获为不同的图标。 下面我们还提供了使用 Nginx 集成包中包含的 Lens 和 OOTB 仪表板进行时间序列指标可视化的示例。

Discover TSDS 指标搜索

 

使用 Lens 可视化的计数器字段 nginx.stubstatus.accepts 的最大值

 

带有 TSDS 指标可视化的 OOTB Nginx 仪表板

 

试试看!

我们提供了由 Elastic Nginx 集成摄取的时间序列文档的详细示例。 我们已经通过示例了解了如何在 Elastic 中对时间序列指标进行建模以及其他时间序列映射。 我们提供了 Elastic 时间序列的维度要求的详细信息,以及 Kibana® 中 TSDS 指标的搜索/可视化/仪表板的简要示例。

还没有 Elastic Cloud 帐户? 注册 Elastic Cloud 并尝试我上面讨论的自动检测功能。 我很想了解你对使用 Elastic 了解应用程序堆栈的体验的反馈。

原文:Exploring Nginx metrics with Elastic time series data streams | Elastic Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/748407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rar文件怎么打开?简单4步,轻松解决!

什么是rar文件? Rar文件是一种专用的文件格式,比较常用于归档打包和数据的压缩,我们可以将原有的文件数据压缩后保存为rar文件格式。其常用于将文件夹或者大型文件压缩为单个文件,以便更方便地传输和存储。 在日常的工作中&…

jmeter 终端命令执行jmx文件 生成jtl日志文件

终端命令执行jmx文件 生成jtl日志文件, 步骤如下: 步骤1:终端进入jmx文件目录 步骤2:执行命令:jmeter -n -t ****.jmx -l ****.jtl -n 以cli模式(命令行运行模式)运行jmeter -t 需要运行的…

怎么快速敲代码,最简单的代敲代码工具,codeWhisperer走起

题记:谁不想提升工作效率,谁不想有人帮你敲代码,来吧,上菜; 第一步:下载并安装AWS Toolkit(下载有点慢,请耐心等待); 第二步:点击start。 第三步…

【论文阅读笔记】Attack-Resistant Federated Learning with Residual-based Reweighting

个人阅读笔记,如有错误欢迎指出 Arxiv 2019 [1912.11464] Attack-Resistant Federated Learning with Residual-based Reweighting (arxiv.org) 问题: 联邦学习容易受到后门攻击 创新: 提出一种基于残差的重新加权聚合算法 聚合算法…

windows系统下jdk8和jdk17灵活切换

安装了jdk8和jdk17后环境变量path中会多出2条 C:\Program Files\Common Files\Oracle\Java\javapath C:\Program Files (x86)\Common Files\Oracle\Java\javapath 将它们下移到最下面,点击确认 这样做的原因是为了JAVA_HOME的优先级最高,达到更换JAVA…

分布式应用之监控Zabbix

分布式应用之监控Zabbix 一、什么是Zabbix? ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存…

深入Vite核心编译能力

我们知道,Vite 在开发阶段实现了一个按需加载的服务器,每一个文件请求进来都会经历一系列的编译流程,然后 Vite 会将编译结果响应给浏览器。而在生产环境下,Vite 同样会执行一系列编译过程,将编译结果交给 Rollup 进行…

CP AUTOSAR中的CanTrcv

环境 CanTrcv驱动实际上是要实现CanIf指出的接口,包括5个API函数 CanTrcv_SetOpMode CanTrcv_GetOpMode CanTrcv_GetBusWuReason CanTrcv_SetWakeupMode CanTrcv_CheckWakeup CanIf接口会有对应的接口回调CanTrcv的API,包括5个A…

CODESYS 联合体变量(Union)

联合Union也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体),联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的…

Drools用户手册翻译——第三章 构建,部署,应用和运行(三)运行

主要对于运行相关内容的介绍,又多了很多新的概念,还没有着手去尝试,感觉很多内容确实有用,等我把这一章结束时候,实际跑一跑代码感受一下。 甩锅声明:本人英语一般,翻译只是为了做个笔记&#…

在Vue种使用Vant框架

第一步:打开Vant框架地址 https://vant-contrib.gitee.io/vant/v2/#/zh-CN/home 第二步: 安装 第三步:引入(我这里使用的是按需导入) 执行命令: npm i babel-plugin-import -D ①:src下创建个…

pycharm 配置github

文章目录 环境必备操作步骤1.在pycharm中配置git和github2.获取ssh密钥3.将本地项目与github仓库连接4.同步本地项目到github 相关问题参考文章 环境必备 pycharm 2020.1:集成开发环境,需要安装并配置环境 PyCharm 开发环境搭建指南:安装、配…

【RISC-V】寄存器及 PCS(过程调用标准)

文章目录 寄存器与别名函数入栈示例代码作用为什么需要保存 函数出栈示例代码作用为什么需要恢复 浮点寄存器的保存示例代码作用 浮点寄存器的恢复示例代码作用 寄存器与别名 Caller(调用者)指的是调用(或执行)一个函数的代码段或…

Pandas 和 CSV文件读取导出小纪

要从CSV文件中访问数据,我们需要一个函数read_csv(),它以数据帧的形式检索数据。 read_csv() 语法: pd.read_csv(filepath_or_buffer, sep’ ,’ , header’infer’, index_colNone, usecolsNone, engineNone, skiprowsNone, nrowsNone) 参…

vue启动编译时报错:134(内存溢出)

项目环境:win7 vue2 webpack2 最近开发过程中项目莫名其妙就起不来了,报错大致如下: 经过一番搜索,尝试了多种方法都不行,比如: 1. npm install increase-memory-limit npm install cross-env 在package.json中添加…

首个!AI开发者创作激励计划开启,有成长、有收入

各种视频网站都有什么创作激励!那什么时候有专属于AI开发者的创作激励?好!那AI开发者的福利来了!!既能潜心进行模型开发,又能提升技术能力,还能领一份创作金!!飞桨AI Stu…

Codeforces Round 882 (Div. 2)(视频讲解A——D)

[TOC](Codeforces Round 882 (Div. 2)&#xff08;视频讲解A——D&#xff09;) 讲解在B站&#xff1a;Codeforces Round 882 (Div. 2)&#xff08;视频讲解A——D&#xff09; A The Man who became a God #include<bits/stdc.h> #define endl \n #define INF 0x3f3…

k8s 大量 pod 处于 ContainerStatusUnknown 状态

如图所示&#xff0c;nexus 正常运行&#xff0c;但产生了大量的状态不明的 pod&#xff0c;原因也无从所知 解决办法&#xff0c;删除多余的 pod&#xff0c;一个一个删除&#xff0c;非常费劲 获取 namespace 中状态为 ContainerStatusUnknown 的 pod&#xff0c;并删除 …

从零学习微服务

更新中&#xff0c;关注不断更… 这里讲的是基于springboot和springboot alibaba的微服务&#xff0c;Spring Boot和Spring Boot Alibaba都是基于Spring框架的开源框架&#xff0c;用于简化应用程序的开发和部署。 这篇文章里会介绍微服务的整体概念&#xff0c;目前国内常用的…