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)的结果,它包括两部分:
结合这些元素,我们可以看到Prometheus如何将时间序列表示为符号(notation),如下所示。
代码清单2-1 时间序列符号
<time series name>{<label name>=<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 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 监控实战》。
领取专属 10元无门槛券
私享最新 技术干货