Prometheus(译:普罗米修斯)用领先的开源监控解决方案为你的指标和警报提供动力(赋能)。
1. 概述
1.1. Prometheus是什么?
Prometheus是一个开源的系统监控和警报工具包。自2012年启动以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。Prometheus于2016年加入云原生计算基金会,成为继Kubernetes之后的第二个托管项目。
1.1.1. Prometheus的主要特性:
一个多维数据模型,包含由指标名称和键/值对(Tag)标识的时间序列数据
PromQL是一种灵活的查询语音,用于查询并利用这些维度数据
不依赖分布式存储,单个服务器节点是自治的
时间序列收集是通过HTTP上的pull模型进行的(支持Pull)
推送时间序列是通过一个中间网关来支持的(也支持Push)
目标是通过服务发现或静态配置发现的
多种模式的图形和仪表盘支持
总结一下,就是多维数据模型、PromQL查询语言、节点自治、HTTP主动拉取或者网关主动推送的方式获取时间序列数据、自动发现目标、多种仪表盘支持
1.1.2. 组件:
Prometheus server,它负责抓取和存储时间序列数据,是最主要的组件
client libraries,用于检测应用程序代码的客户端库
push gateway,用于支持短期的jobs
exporters,用于支持HAProxy等第三方
alertmanager,用于处理告警
各种支持工具
大多数Prometheus组件都是用Go编写的,这使得它们易于作为静态二进制文件构建和部署
1.1.3. 架构:
这张图展示了架构及其生态系统的一些组成部分:
Prometheus从工具化的作业中获取指标,要么直接获取,要么通过中介推送网关获取短期作业。它在本地存储所有抓取的样本,并对这些数据应用规则将这些数据进行聚合,并记录新的时间序列,或者生成警报。可以用Grafana或其他API来可视化收集的数据。
1.2. 什么时候用它合适
Prometheus可以很好地记录任何纯数字时间序列。它既适合以机器为中心的监视,也适合高度动态的面向服务的体系结构的监视。在微服务的世界中,它对多维数据收集和查询的支持是一个特别的优势。
Prometheus是为可靠性而设计的,在你的服务宕机的时候,你可以快速诊断问题。每台Prometheus服务器都是独立的,不依赖于网络存储或其他远程服务。
1.3. 什么时候用它不合适
Prometheus的值的可靠性。你总是可以查看有关系统的统计信息,即使在出现故障的情况下也是如此。如果你需要100%的准确性,例如按请求计费,Prometheus不是一个好的选择,因为收集的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析用于计费的数据,并使用Prometheus来完成剩下的监视工作。
1.4. Prometheus VS InfluxDB
InfluxDB是一个开源的时间序列数据库,具有扩展和集群的商业选项。InfluxDB项目是在Prometheus开发开始将近一年后发布的,所以当时无法考虑将其作为替代方案。尽管如此,Prometheus和fluxdb之间仍然存在显著的差异。二者有许多相似之处。两者都有标签(在InfluxDB中称为tags)来有效地支持多维度度量。它们基本上使用相同的数据压缩算法。两者都具有广泛的集成,包括彼此之间的集成。两者都有挂钩,允许进一步扩展它们,例如在统计工具中分析数据或执行自动化操作。
下列情况,用InfluxDB更好:
如果你正在进行事件日志记录
商业选项为InfluxDB提供集群,这对于长期数据存储也更好
最终实现副本之间数据的一致性
下列情况,用Prometheus更好:
如果你主要做的是度量
如果你需要更强大的查询语言、警报和通知功能
更高的可用性和正常运行时间,用于绘图和报警
InfluxDB由一家遵循开放核心模型的商业公司维护,提供高级特性,如闭源集群、托管和支持。
Prometheus是一个完全开源和独立的项目,由许多公司和个人维护,其中一些还提供商业服务和支持。
2. 基本概念2.1. 数据模型