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 时间序列符号
例如,带有标签的 total_website_visits 时间序列可能如下所示。
代码清单 2-2 时间序列示例
首先是时间序列名称,后面跟着一组键/值对标签。通常所有时间序列都有一个 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 监控实战》,更多内容请点击此处查看。
相关阅读:
Prometheus 监控实战(三):Prometheus 架构
评论