(转)opentsdb查询的简介————基础知识和UI操作

这篇文章基本上是转至https://blog.csdn.net/xsdxs/article/details/65938213,先严正声明下。

同时翻译至http://opentsdb.net/docs/build/html/user_guide/query/index.html


其实这种转载我也不想做,但是这篇确实是opentsdb查询的核心内容,但这篇文章也有一定的坑。也是我把它设置为基础知识和UI操作的原因:

因为这里面的查询的一些设定方式和http api的结构和内容有些差异,容易造成误导,比如我就遇到一件这样的事:

同事:UI上面不是有查时间端存储的信息条数,你使用下http api的查询查询下,应该很简单的。

我:OK,两个小时做完。                                   结果最后用了半天也没做好。

用http api做一个count比较复杂。官方文档也写的很零碎,偏重于原理介绍。

所以也是我在这里归档的主要原因,希望了解这个后能去看下/api/query,和我的下一篇博客对照来看,才能熟练使用opentsdb。

OpenTSDB的/ API / query(opentsdb的查询的api)简介(一)https://blog.csdn.net/jyj1100/article/details/81326660

==================================================================================

OpenTSDB提供了多种方法来提取数据,如CLI工具、HTTP API和GnuPlot用户图形界面(其实该用户界面就是HTTP接口的实现)。还有例如Grafana和Bosun等开源工具也能读取TSDB数据。此外学习OpenTSDB查询并不容易,因此请查阅本文档以获取更详细的信息。此页面展示HTTP API查询方式。

查询组件

后来的版本增加了对功能和表达式的支持。 一般来说,每个查询都有以下组件: 

参数日期类型是否为必须描述
Start TimeString or Integer查询的开始时间。这可能是绝对时间或相对时间。有关详细信息,请参阅日期和时间24h-ago
End TimeString or Integer查询的结束时间。如果未提供结束时间,则将使用TSD上的当前时间。有关详细信息,请参阅日期和时间1h-ago
MetricString系统中度量标准的全名。必须是完整的名称,并且始终区分大小写sys.cpu.user
Aggregation FunctionString用于组合多个时间序列的数学函数(即如何合并组中的时间序列)sum
FilterString过滤标记值以减少查询或组中拾取的时间序列数,并在各种标记上进行聚合。host=*,dc=lax
DownsamplerString可选的间隔和函数,用于减少跨时间返回的数据点数1h-avg
RateString一个可选标志,用于计算结果的每秒变化率rate
FunctionsString数据处理功能,如附加过滤,时移等。highestMax(...)
ExpressionsString跨时间序列的数据操作功能,例如将一个系列分成另一个系列。(m2 / (m1 + m2)) * 100

Times(时间)

绝对时间戳以人类可读格式或Unix样式整数支持。相对时间可用于刷新仪表板。目前,所有查询都能够覆盖单个时间跨度。在未来,我们希望提供一个偏移查询参数,该参数允许在不同时间段内对度量进行聚合或绘图,例如比较上周到1年前。有关允许的详细信息,请参阅日期和时间

虽然OpenTSDB可以以毫秒分辨率存储数据,但默认情况下,查询将返回具有第二分辨率的数据,以提供现有工具的向后兼容性。如果每秒存储多个数据点,请确保您发出的任何查询都包含1s- <func>下采样器以读取正确的数据。否则将发出不确定的值。

要以毫秒分辨率提取数据,请使用/api/query端点并指定msResolutionms也可以,但不建议)JSON参数或查询字符串标志,它将绕过采样(除非指定)并以Unix纪元毫秒分辨率返回所有时间戳。此外,scan命令行实用程序将返回存储中写入的时间戳。

Filters(过滤器)

每个时间序列都包含一个metric以及一个或多个键值对tag。在OpenTSBD中过滤器应用于tag-value(目前OpenTSDB还没有针对metric和tag-key的过滤器)。由于查询中的过滤器是可选的,因此如果仅查询metric名,则将返回所有包含这个metric的聚合结果。过滤器类似于SQL中的where条件语句。例如,存有这样的数据集:

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

并制定一个简单的查询用的最低要求起始时间聚合度量,如:start=1356998400&m=sum:sys.cpu.user,我们将得到一个价值81356998400一个聚合和组所有4个时间序列为一体。

如果我们想要放大特定系列或一系列系列,我们可以使用过滤器。例如,我们可以host通过以下方式过滤标签:start=1356998400&m=sum:sys.cpu.user{host=webserver01}。此查询将返回一个值5,仅包含时间序列host=webserver01。要深入查看特定时间序列,您必须包含该系列的所有标记,例如,start=1356998400&m=sum:sys.cpu.user{host=webserver01,cpu=0}将返回查询1

注意

查询时,不一致的标记可能会导致意外结果。请参阅编写数据以获取详细 另请参阅下面的显式标记

阅读查询过滤器文档以获取详细信息

Aggregation(聚合方式)

OpenTSDB的一个强大功能是能够将多个时间序列的即时聚合功能执行到一组数据点。原始数据在存储中始终可用,但我们可以以更有意义的方式来提取数据。 聚合函数是将单个时间戳的两个或多个数据点的值合并成单个数据值的方法。 
参阅Aggregation部分

Downsampling(下采样)

OpenTSDB可以获取大量的数据,甚至在给定的时间序列中每秒获取一个数据点。这样查询将会返回大量的数据点。这样包含大量数据点的查询将会消耗完带宽资源。高频率的数据可以轻易地压垮JavaScript图形库,因此选择使用GnuPlot画图。由GUI创建的图形可能难以阅读,如下图所示,用粗线显示结果。 

../../_images/gui_downsampling_off1.png

可以在查询时使用下采样来减少返回的数据点数,以便您可以从图中提取更好的信息或通过连接传递更少的数据。下采样需要聚合函数和时间间隔。聚合函数用于使用适当的数学函数计算指定区间内所有数据点的新数据点。例如,如果使用聚合sum,则间隔内的所有数据点将一起求和为单个值。如果avg选择,则返回间隔内所有数据点的平均值。

使用下采样我们可以清理上一个图形以获得更有用的东西:

../../_images/gui_downsampling_on1.png

有关详细信息,请参阅下采样

Rate(速率)

许多数据源将值返回为不断递增的计数器。一个例子是网站点击计数器。当您启动Web服务器时,它的命中计数器可能为0.五分钟后,该值可能为1,024。再过五分钟,它可能是2,048。计数器的图形将是一条向右倾斜的直线,并不总是非常有用。OpenTSDB提供速率转换功能,可以计算值随时间的变化率。这会将计数器转换为带有峰值的行,以显示活动何时发生并且可以更有用。

费率是价值的第一个衍生物。它定义为时间以秒为单位。因此,您将获得每秒的变化率。目前,毫秒值之间的变化率默认为每秒计算。(v2 - v1) / (t2 - t1)

OpenTSDB 2.0支持特殊的单调递增计数器数据处理,包括设置“翻转”值和抑制异常波动的能力。当counterMax在查询中指定的值,如果数据点接近该值和点之后是小于前,最大值将被用来计算给定的两个点的准确率。例如,如果我们在2个字节上记录整数计数器,则最大值为65,535。如果在值t064000和值在t1IS 1000,每秒所得到的速率将被作为计算-63000。但是我们知道计数器可能已经翻过来,所以我们可以设置最大值65535,现在计算将给我们。65535 - t0 + t12535

跟踪计数器中的数据的系统通常在重新启动时恢复为0。当发生这种情况时,我们可以在使用最大计数器功能时获得虚假结果。例如,如果计数器达到2000t0和某人重新启动服务器时,下一个值可能会500t1。如果我们设置我们的最大值,65535结果就是给我们。如果正常速率是每秒几个点,这个特定的尖峰,在点之间,将产生一个速率峰值!为避免这种情况,我们可以设置当速率超过此值时,将返回一个数据点,以避免任何一个方向出现尖峰。对于上面的例子,如果我们知道,我们的速度几乎从来没有超过100,我们可以配置的65535 -2000 + 5006403530s2,134.5resetValue0resetValue100当计算出上面的数据点时,它将返回0而不是2,134.5。默认值0表示将忽略复位值,不会抑制速率。

Order of Operations(运行顺序)

了解操作顺序很重要。 返回查询结果时,以下是进行处理的顺序:

  • Filtering
  • Grouping
  • Downsampling
  • Interpolation
  • Aggregation
  • Rate Conversion
  • Functions
  • Expressions

OpenTSDB系列

OpenTSDB的/ API / PUT(opentsdb的输入的api)简介https://blog.csdn.net/jyj1100/article/details/81323705

OpenTSDB使用/ API / PUT进行数据存储的java实现https://blog.csdn.net/jyj1100/article/details/81330623

(转)opentsdb查询的简介——基础知识和UI操作https://blog.csdn.net/jyj1100/article/details/81324017

OpenTSDB的/ API / query(opentsdb的查询的api)简介(一)https://blog.csdn.net/jyj1100/article/details/81326660

OpenTSDB的/ API / query(opentsdb的查询的api)简介(二)https://blog.csdn.net/jyj1100/article/details/81329290

OpenTSDB使用/ API / query进行数据查询的java实现https://blog.csdn.net/jyj1100/article/details/81347817

其他OpenTSDB系列文章见

OpenTSDB系列目录https://blog.csdn.net/jyj1100/article/details/83450282

OpenTSDB旨在在查询执行期间有效地组合多个不同的时间序列。这样做的原因是,当用户查看他们的数据时,他们通常会从较高的级别开始询问诸如“数据中心的总吞吐量是多少?”之类的问题。或“按地区划分的当前用功耗是多少?”。在查看这些高级别值之后,可能会出现一个或多个值,因此用户可以深入研究更详细的数据集,例如“我的LAX数据中心主机的吞吐量是多少?”。我们希望能够轻松回答这些高级问题,但仍然可以深入了解更多细节。 但是,如何将多个单独的时间序列合并为一个系列的数据呢?聚合函数提供了将不同时间序列数学方式将不同时间序列合并为一个的方法。过滤器用于按标签对结果进行分组,然后将聚合应用于每个组。聚合类似于SQL的GROUP BY子句,其中用户选择预定义的聚合函数以将多个记录合并为单个结果。但是在TSD中,每个时间戳和组聚合一组记录。 每个聚合器都有两个组件: 功能 - 应用的数学计算,例如对所有值求和,计算平均值或选择最高值。 插值 - 一种处理缺失值的方法,例如当时间序列A的值为T1但时间序列B没有值时。 本文档重点介绍如何在一个组中按上下文使用聚合器,即将多个时间序列合并为一个时。此外,聚合器可用于下采样时间序列(即返回较低分辨率的结果集)。有关更多信息,请参阅下采样。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值