首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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 时间序列符号

代码语言:javascript
复制
<time series name>{<label name>=<label value>, ...}

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

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

代码语言:javascript
复制
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 监控实战》。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/0lPwcbTxSsvCTuzqKNNl
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券