快速理解OpenTSDB的Schema设计

2024-04-06 19:08

本文主要是介绍快速理解OpenTSDB的Schema设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

快速理解OpenTSDB的Schema设计

在时序数据库中,Time Series是一个基础概念。我们先来看看Wiki中关于Time Series的定义:

Time Series是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,1小时等)。

我们可以这样命名一个Time Series:

webserver01.sys.cpu.0.user

这样从名称中可以很容易获知该Time Series关联了如下信息:

Web Server: webserver01

CPU Core:  0

如果我们的查询可以同时指定web server以及cpu core的话,这种设计则非常适合。

但对于一个拥有64 Cores的Web Server,如果查询所有CPU Cores的聚合结果的话,可以通过如下的通配符来匹配所有相关的Time Series:

查询1: webserver01.sys.cpu.*.user

这样,可以获取到64个Time Series,然后聚合结果即可。

但如果有1000个Web Servers呢?我们需要基于如下的通配符来匹配所有的相关Time Series:

查询2: .sys.cpu..user

关于如上两种查询,一种可选的加速方案为:在这64个Time Series之外,记录一个名为”webserver01.sys.cpu.user.all”的Time Series,这样可以加速查询1中所有CPU Cores的聚合统计计算。 而关于查询2,可以记录一个名为”webservers.sys.cpu.user.all”的Time Series来进行加速。

在OpenTSDB的Schema定义中,引入了Tag的概念。每一个Time Series包含一个Metric名称,但可能包含包含1组或多组Tags信息(每一个Tag包含一个TagKey与TagValue),以前面的”webserver01.sys.cpu.0.user”为例,在OpenTSDB表示为:

sys.cpu.user host=webserver01, cpu=0

将其拆解后的构成信息:

sys.cpu.user : <Metric Name>

host : <TagKey>

webserver01 : <TagValue>

cpu : <TagKey>

0 : <TagValue>

OpenTSDB中的一个Time Series,由Metric Name与X个Tags(X>=1)唯一决定。

例如:

sys.cpu.user host=webserver01

sys.cpu.user host=webserver01, cpu=0

sys.cpu.user host=webserver02, cpu=1

代表了三个不同的Time Series。

如果查询时指定Web Server,指定CPU Core的聚合结果,可以简单表达为:

sum: sys.cpu.user {host=webserver01, cpu=42}

注:实际查询时需要指定时间信息,这里为了简单起见,省略了时间信息,下同。

如果查询Web Server上所有的CPU Cores的聚合结果,可以这么表达:

sum: sys.cpu.user {host=webserver01}

这样就可以汇聚了webserver01上所有CPU Cores所关联的Time Series的结果。

再进一步,如果查询所有的Web Servers所有CPU Cores的聚合结果,可以这么表达:

sum: sys.cpu.user

与同一metric name相关的所有的Time Series信息,都是相邻存储的,因此,我们可以轻易实现与此metric相关的快速聚合查询或结果钻取。

既然了解了OpenTSDB的schema由Metric与Tags构成,我们接下来看看需要注意的一个问题:

继续上面的例子,假设我们记录了一个Web Server的64个CPU Cores相关的Time Series:

sys.cpu.user host=webserver01,cpu=0  1356998400  1
sys.cpu.user host=webserver01,cpu=1  1356998400  0
sys.cpu.user host=webserver01,cpu=2  1356998400  2
sys.cpu.user host=webserver01,cpu=3  1356998400  0

sys.cpu.user host=webserver01,cpu=63 1356998400  1

而且我们使用了如下命名的Time Series来记录关于这个Web Server上的所有CPU Cores的聚合结果:

sys.cpu.user host=webserver01        1356998400  50

也就是说,表中一共存储了65条记录。

关于如下查询:sum:sys.cpu.user {host=webserver01}

我们期望的聚合结果应该为50,但实际的查询结果却会变为100,这是因为这次查询共聚合了下面的65条记录的结果:
sys.cpu.user host=webserver01 1356998400 50
sys.cpu.user host=webserver01,cpu=0  1356998400  1
sys.cpu.user host=webserver01,cpu=1  1356998400  0
sys.cpu.user host=webserver01,cpu=2  1356998400  2
sys.cpu.user host=webserver01,cpu=3  1356998400  0

sys.cpu.user host=webserver01,cpu=63 1356998400  1

再举一个典型的例子来阐述说明一下这里的查询行为:

如果查询条件为”sum:sys.cpu.user {host=webserver01}”, 如下这些Time Series都将会被包含其中:
sys.cpu.user host=webserver01,cpu=0
sys.cpu.user host=webserver01,cpu=0,manufacturer=Intel
sys.cpu.userhost=webserver01,foo=bar
sys.cpu.user host=webserver01,cpu=0,datacenter=lax,department=ops

因为这些与”sys.cpu.use”的Time Series中都包含了Tag {host=webserver01}(尽管有一些Time Series中包含了更多的Tags)。

因此,使用OpenTSDB时需要注意关于Tags定义方面的问题。

这篇关于快速理解OpenTSDB的Schema设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880600

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.