OpenTSDB 指标和时间序列说明
Posted 顧棟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenTSDB 指标和时间序列说明相关的知识,希望对你有一定的参考价值。
文章目录
Understanding Metrics and Time Series
原文地址:http://opentsdb.net/docs/build/html/user_guide/query/timeseries.html
OpenTSDB 是一个时间序列数据库。时间序列是某个特定指标随时间变化的一系列数字数据点。每个时间序列都包含一个指标和一个或多个与该指标相关的标签(我们将稍后介绍标签)。指标是您希望随时间跟踪的任何特定数据(例如,对 Apache 托管文件的点击)。
OpenTSDB 也是一个数据绘图系统。 OpenTSDB 绘制的东西与其他系统略有不同。我们将在下面更详细地讨论绘图,但现在重要的是要知道对于 OpenTSDB,任何给定绘图的基础都是度量。它采用该指标,查找您选择的时间范围内的所有时间序列,将这些时间序列聚合在一起(例如,将它们相加)并绘制结果。绘图机制非常灵活和强大,您可以做的远不止这些,但现在让我们谈谈时间序列的关键,即度量。
在 OpenTSDB 中,度量以字符串命名,例如 http.hits
。为了能够为该指标存在的所有位置存储所有不同的值,您在将数据发送到 TSD 时用一个或多个标签标记数据。 TSD 存储时间戳、值和标签。当您想要检索此数据时,TSD 会检索您提供的时间跨度内的所有值(可选地使用您提供的标签过滤器),将所有这些值按您想要的方式聚合在一起,并绘制该值随时间变化的图表。
到目前为止,我们已经介绍了很多东西。为了帮助你理解事情是如何运作的,我将从一个典型的例子开始。假设您有一堆 Web 服务器,并且您想要跟踪两件事:对 Web 服务器的点击和系统的平均负载。让我们组成度量名称来表达这一点。对于平均负载,我们称其为 proc.loadavg.1min
(因为在 Linux 上,您可以通过读取 /proc/loadavg
轻松获取此数据)。对于许多 Web 服务器,有一种方法可以向 Web 服务器询问一个计数器,该计数器表示自服务器启动以来对服务器的点击次数。这是一个方便的计数器,用于我们称为 http.hits
的指标。我选择这两个例子有两个原因。第一,我们将看到 OpenTSDB 如何轻松处理这两个计数器(随着时间的推移而增加的值,除非它们被重启/重启或溢出重置)以及它如何处理上升和下降的正常值,如平均负载。 OpenTSDB 的一大优势是您无需对计数器进行任何速率计算。它会为你做这一切。第二个原因是,我们还可以向您展示如何在同一图表上绘制具有不同尺度的两个不同指标,这是关联不同指标的好方法。
Your first datapoints
无需过多了解收集器如何将数据发送到 TSD ,您可以编写一个收集器,定期将每个服务器的这些数据点的当前值发送到 TSD。 因此 TSD 可以聚合来自多个主机的数据,您可以使用“host”标签来标记每个值。 因此,如果您有 Web 服务器 A、B、C 等,它们每个都会定期向 TSD 发送如下内容:
put http.hits 1234567890 34877 host=A
put proc.loadavg.1min 1234567890 1.35 host=A
这里“1234567890”是以秒为单位的当前纪元时间(日期+%s)。 下一个数字是此时的度量值。 这是来自主机 A 的数据,所以它被标记为 host=A
。 来自主机 B 的数据将被标记为 host=B
,依此类推。 随着时间的推移,你会得到一堆存储在 OpenTSDB 中的时间序列。
Your first plot
现在,让我们重新回顾一下我们在开始时在这里讨论的内容。 时间序列是一些特定指标(及其标签)随时间变化的一系列数据点。 对于此示例,每个主机都向 TSD 发送两个时间序列。 如果你有 3 个盒子,每个盒子发送这两个时间序列,TSD 将收集和存储 6 个时间序列。 现在你有了数据,让我们开始绘图。
要绘制 HTTP 命中率,您只需转到 UI 并输入http.hits
作为您的指标名称,然后输入时间范围。 检查“Rate”按钮,因为这个特定的指标是一个速率计数器,瞧?,你有一个随时间推移到你的 Web 服务器的 HTTP 命中率的图表。
Aggregators
UI 的默认值是通过将它们加在一起(总和)来聚合每个主机的每个时间序列。这意味着,TSD 将三个时间序列与该指标(host=A, B and C)相加,并将它们的值相加,得出在给定时间所有 Web 服务器的总点击量。请注意,您不需要完全同时发送数据点,TSD 会计算出来。因此,如果您的每个主机在某个时间点每秒提供 1000 次点击,则图表将显示 3000。如果您想显示每个 Web 服务器正在提供多少点击怎么办?两种方式。如果您只关心每个 Web 服务器所服务的平均值,只需将 Aggregator 方法从 sum 更改为 avg。您还可以尝试其他 (max, min) 以查看最大值或最小值。更多聚合函数正在开发中(百分位数等)。这是在每个时间间隔的基础上完成的,因此如果在某个时间点,您的一个网络服务器提供 50 QPS,而其他网络服务器提供 100,后来另一个网络服务器提供 50 QPS,其他网络服务器提供 100,对于这两个点 Min 将是 50。换句话说,它不会确定哪个时间序列是总最小值,而只是向您显示该主机图。查看每个 Web 服务器正在提供多少点击的另一种方法?这是我们查看标签字段的地方。
Downsampling
要减少返回的数据点数量,您可以指定下采样间隔和方法,例如 1h-avg 或 1d-sum。 这对于在给定时间段内查找最佳和最坏情况数据点也很有用(例如在使用最大值和最小值时)。 下采样对于降低绘图阶段的强度和可读性最有用,尤其是在绘制比屏幕像素更多的数据点时。
Tag Filters
在 UI 中,您会看到 TSD 填充了一个或多个“Tags”,第一个是主机。 TSD 在这里说的是,在这个时间范围内,它看到数据被标记为主机标签。 您可以过滤图形,使其只绘制一台主机的值。 如果您在主机行中填写 A,您将只绘制主机 A 随时间变化的值。 如果您想给出要绘制的主机列表,请填写由管道符号分隔的主机列表,例如 A|B。 这将为您提供两张图而不是一张图,一张用于 A,一张用于 B。最后,您还可以指定特殊字符 [*](http://opentsdb.net/docs/build/html/user_guide/query/timeseries .html#id1),这意味着为每个主机绘制一条线。
Adding More Metrics
所以,现在您有了网络点击量的图表。 这与平均负载有什么关系? 在同一图表上,单击“+”选项卡以向现有图表添加新指标。 输入 proc.loadavg.1min 作为您的指标,然后单击“Right Axis”,这样 Y 轴将单独缩放,其标签在右侧。 确保未选中“Rate”,因为平均负载不是计数器指标。 瞧?! 现在您可以看到网页点击率的变化如何影响您系统的平均负载。
Getting Fancy
想象一下,如果您的服务器实际上运行了两个 Web 服务器,例如,一个用于静态内容,另一个用于动态内容。 比再创建另一个指标,只需使用服务器实例标记 http.hits
指标。 让您的采集器发送以下内容:
put http.hits 1234567890 34877 host=A webserver=static put http.hits 1234567890 4357 host=A webserver=dynamic put proc.loadavg.1min 1234567890 1.35 host=A
为什么要这样做而不是创建另一个指标? 好吧,如果有时您关心绘制总 HTTP 命中数,而有时您关心打破静态与动态命中数,该怎么办? 有了标签,这很容易。 使用这个新标签,您会在绘制此指标时看到 UI 中出现一个网络服务器标签。 您可以将其留空,它会将两个值汇总到一个图中(根据您的聚合器设置),您可以查看总点击次数,或者您可以执行 webserver=* 以查看每个静态和动态实例的数量 共同在您的网络服务器上进行。 您甚至可以更深入地指定 webserver=* 和 host=* 以查看完整细分。
Guidelines When to Create Metrics
目前,您无法将两个指标合并为一条绘图线。 这意味着您希望指标成为最大可能的聚合点。 如果您想深入了解指标中的具体细节,请使用标签。
Tags vs. Metrics
指标应该是一个特定的东西,比如“以太网数据包”,但不能分解成一个特定的东西实例。 通常,您不想收集像 net.bytes.eth0、net.bytes.eth1 等的指标。收集 net.bytes 并使用 iface=eth0 等标记 eth0 数据点。不要费心创建单独的“in”和 “out”指标,要么。 添加标签 direction=in 或 direction=out。 通过这种方式,您可以轻松查看给定框的总网络活动,而无需绘制大量指标。 这仍然使您可以灵活地向下钻取并仅显示特定界面或特定方向的活动。
Counters and Rates
如果某物是一个计数器,或者自然是一个速率,则在将其发送到 TSD 之前不要将其转换为速率。 这有两个主要原因。 首先,自己进行速率计算、重置/溢出处理等是愚蠢的,因为 TSD 可以为您完成。 您也不必担心基于稍微不准确或变化的采样间隔来正确计算每秒单位数。 其次,如果发生丢失一个或更多数据点的事情,如果您发送当前计数器值,那么您不会丢失数据,只会丢失该数据的解析。 TSD 中的黄金法则是,如果您的源数据是一个计数器(/proc 或 SNMP 中的某个计数器),请保持这种方式。 不要转换它。 如果您正在编写自己的收集器(例如,一个计算特定错误消息出现在日志尾部 -f 中的频率的收集器),请不要在每个采样间隔重置您的计数器。 让 TSD 为您完成工作。
Tags are your Friend
在小型环境之上的任何事物中,您可能都有集群或机器组做同样的事情。不过,随着时间的推移,这些都会发生变化。没关系。当您将数据发送到 TSD 以传递此集群信息时,只需使用标签即可。将诸如 cluster=webserver 之类的内容添加到从每个网络服务器发送的所有数据点,并为所有数据库添加 cluster=db 等。
现在,当您绘制 Web 服务器集群的 CPU 活动时,您会看到所有这些活动都聚合到一个图中。然后假设您添加了一个网络服务器,甚至将其从网络服务器更改为数据库。您所要做的就是确保在角色更改时发送正确的标签,现在该框的 CPU 活动被计入正确的集群。更重要的是,您所有的历史数据仍然是正确的!这就是 OpenTSDB 的真正力量。随着时间的推移,您不仅不会像基于 RRD 的系统那样丢失数据点的分辨率,而且历史数据也不会随着您的盒子移动而丢失。您也不必将一堆集群或分组意识逻辑放入您的仪表板。
Precisions on Metrics and Tags
数据点上允许的最大标签数由常量 (Const.MAX_NUM_TAGS) 定义,在撰写本文时为 8。指标名称、标签名称和标签值必须由字母数字字符组成,破折号“-” 、下划线“_”、句点“.”和正斜杠“/”,这是由包私有函数Tags.validateString强制执行的。
以上是关于OpenTSDB 指标和时间序列说明的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenTSDB 和 InfluxDB 或其他 TSDS 之间做出选择? [关闭]
markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章