什么是Prometheus?

Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明该项目的治理结构,Prometheus在2016年加入了Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。

特点

普罗米修斯的主要特点是:

  • 一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
  • PromQL,可以利用各个维度灵活的查询语言
  • 不依赖分布式存储;每个服务节点管理自己的数据
  • 支持通过HTTP的pull模型进行拉取时序数据
  • 支持通过一个网关来push时序数据
  • 通过服务发现或静态配置发现指标
  • 支持多种类型的图形和仪表盘

    组件

    Prometheus生态系统由多个组件组成,其中许多是可选的:

  • prometheus server 是必须的,它用来收集、存储时序数据

  • client libraries 用于检测应用程序代码
  • push gateway 支持生命周期较短的job,同时也支持push模型
  • exporter 针对各个服务的数据收集器
  • alertmanager 处理报警的组件
  • 支持各种工具

大多数Prometheus组件都是用Go编写的,这使得它们很容易的利用二进制文件去构建和部署

架构

这张图展示了prometheus的架构和一些组件的生态系统:
architecture.png
prometheus可以从长期运行的job中或通过中间件push gateway从瞬时job中收集数据。它将所有收集的数据存储在本地,同时通过rules处理这些数据,聚合、生成新的时序数据或者生成报警。可以通过grafana或者其它api clients去查看这些数据。

什么时候适合用prometheus

Prometheus可以很好地记录任何纯数字时间序列。它既适用于以机器为中心的监视,也适用于高度动态的面向服务的体系结构的监视。在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势。
Prometheus是非常可靠的,你可以在出现故障时利用它快速定位问题。每个Prometheus server都是独立的,不依赖于网络存储或其它远程服务。当其它基础设施服务出现故障时,你仍可以使用它,并且你不需要为了prometheus去设置大量的基础服务。

什么时候不适合用prometheus

  1. Prometheus是非常重视可靠性的。即使在故障的情况下,你也始终可以查看从系统收集到的数据。如果你需要对数据有100%的准确性,则Prometheus并不是一个好的选择,因为它所收集的数据可能不够的详细和完整。在这种情况下,最好使用其它的监控系统来收集、分析数据去为了计费,而使用Prometheus进行其余的监控。