28

Prometheus 监控实战(四):数据模型

 4 years ago
source link: https://www.infoq.cn/article/0lPwcbTxSsvCTuzqKNNl
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Prometheus 会收集时间序列数据,为了处理这些数据,它使用一个多维时间序列数据模型。这个时间序列数据模型结合了时间序列名称和称为标签(label)的键 / 值对,这些标签提供了维度。每个时间序列由时间序列名称和标签的组合唯一标识。

指标名称

时间序列名称通常描述收集的时间序列数据的一般性质—例如,website_visits_total 为网站访问的总数。

名称可以包含 ASCII 字符、数字、下划线和冒号。

标签

标签为 Prometheus 数据模型提供了维度。它们为特定时间序列添加上下文。例如,total_website_visits 时间序列可以使用能够识别网站名称、请求 IP 或其他特殊标识的标签。Prometheus 可以在一个时间序列、一组时间序列或者所有相关的时间序列上进行查询。

标签共有两大类:插桩标签(instrumentation label)和目标标签(target label)。插桩标签来自被监控的资源—例如,对于与 HTTP 相关的时间序列,标签可能会显示所使用的特定 HTTP 动词。这些标签在由诸如客户端或 exporter 抓取之前会被添加到时间序列中。目标标签更多地与架构相关—它们可能会识别时间序列所在的数据中心。目标标签由 Prometheus 在抓取期间和之后添加。

时间序列由名称和标签标识(尽管从技术上讲,名称本身也是名为 __name__ 的标签)。如果你在时间序列中添加或更改标签,那么 Prometheus 会将其视为新的时间序列。

你可以理解 label 就是键 / 值形式的标签,并且新的标签会创建新的时间序列。

标签名称可以包含 ASCII 字符、数字和下划线。

带有 __ 前缀的标签名称保留给 Prometheus 内部使用。

采样数据

时间序列的真实值是采样(sample)的结果,它包括两部分:

  • 一个 float64 类型的数值

  • 一个毫秒精度的时间戳

符号表示

结合这些元素,我们可以看到 Prometheus 如何将时间序列表示为符号(notation),如下所示。

代码清单 2-1时间序列符号

复制代码

<timeseriesname>{<labelname>=<label value>, ...}

例如,带有标签的 total_website_visits 时间序列可能如下所示。

代码清单 2-2时间序列示例

复制代码

total_website_visits{site="MegaApp",location="NJ",instance="webserver",job="web"}

首先是时间序列名称,后面跟着一组键 / 值对标签。通常所有时间序列都有一个 instance 标签(标识源主机或应用程序)以及一个 job 标签(包含抓取特定时间序列的作业名称)。

这与 OpenTSDB 使用的符号大致相同,受到了 Borgmon 的影响。

保留时间

Prometheus 专为短期监控和警报需求而设计。默认情况下,它在其数据库中保留 15 天的时间序列数据。如果要保留更长时间的数据,则建议将所需数据发送到远程的第三方平台。

安全模型

Prometheus 可以通过多种方式进行配置和部署,关于安全有以下两个假设:

  • 不受信任的用户将能够访问 Prometheus 服务器的 HTTP API,从而访问数据库中的所有数据。

  • 只有受信任的用户才能访问 Prometheus 命令行、配置文件、规则文件和运行时配置。

从 Prometheus 2.0 开始,默认情况下某些 HTTP API 的管理功能被禁用。

因此,Prometheus 及其组件不提供任何服务器端的身份验证、授权或加密。如果你在一个更加安全的环境中工作,则需要自己实施安全控制—例如,通过反向代理访问 Prometheus 服务器或者正向代理 exporter。由于不同版本的配置会潜在地发生较大变化,因此本书没有记录如何执行这些操作。

作者介绍:

詹姆斯·特恩布尔(James Turnbull)是一位作家和工程师。他最近出版的书包括《The Packer Book》《The Terraform Book》和《The Art of Monitoring》,以及关于开源容器虚拟化技术的《The Docker Book》,还有关于开源日志工具的《The Logstash Book》。詹姆斯还撰写了两本关于 Puppet 的书:《Pro Puppet》和《Pulling Strings with Puppet》。同时他还是另外三本书的作者:《Pro Linux System Administration》《Pro Nagios 2.0》和《Hardening Linux》。

他目前是 Empatico 公司的首席技术官,并且曾担任过 Kickstarter 公司的首席技术官、Docker 公司服务和支持副总裁、Venmo 公司工程副总裁以及 Puppet 公司技术运营副总裁。他喜欢品尝美食、喝酒、读书、摄影和养猫。

本文节选自《Prometheus 监控实战》,更多内容请点击 此处 查看。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK