写在前面

普罗米修斯建立于2012年, 由SoundCloud公司开发,是一套开源的数据监控解决方案,包含 时间序列数据库 采集 预警等几块内容,可以直观方便的帮助运维,开发或者产品同学了解整个系统的运行情况,比如系统服务器的cpu,负载,某个指标的运行异常等等。

架构组件设计

Prometheus Server

核心组件。Prometheus Server 的功能包括 监控数据的获取, 存储, 以及查询。

  • Server可以通过静态配置或者Service Discovery的动态方式管理监控目标,并且从监控目标获取数据。

  • Server 本身是一个时序数据库,将采集获取到的数据按照时间序列的方式存储在本地磁盘中。

  • Server提供自定义的PromQL语言,实现查询和分析 (Server 内置了Express Browser UI, 可以在该可视化页面内直接使用PromQL)

另外,Server具有联邦集群能力,可以从其他Server 实例获取数据。

Exporters

Exporter 是一个概念,只要实现了可以向Server提供数据的功能,都可以称作一个Exporter。具体表现为 Prometheus Server 通过HTTP服务访问Exporter暴漏的Endpoint端点,实现数据采集获取。

大体有两种类型:

- 直接采集型:内置了对P-Server的支持,比如K8s,Etcd 等
- 间接采集型:通过Prometheus提供的Client Library编写自定义的数据采集程序,如: Mysql Exporter 等
AlertManager

告警管理组件。

P 支持基于PromQL 创建规则,触发报警的后续流程就是由该组件负责的。可以与邮件等通知方式集成。

PushGateway

由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。 当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据

特点

优点
  • 易管理性,核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储
  • 业务数据相关性,监控服务的运行状态,从而让用户可以获取服务和应用内部真正的运行状态
  • 高效,单一Prometheus可以处理数以百万的监控指标;每秒处理数十万的数据点
  • 易于伸缩,通过使用功能分区(sharing)+联邦集群(federation)可以对Prometheus进行扩展,形成一个逻辑集群;Prometheus提供多种语言的客户端SDK
  • 良好的可视化,自带有Prometheus UI,还提供了一个独立的基于Ruby On Rails的Dashboard解决方案Promdash
缺点
  • 对于Prometheus的使用者来说,所有的公制端点都必须是可达的,这意味着一个更加复杂的安全网络配置
  • 在大型部署中,扩展成为一个问题
  • Prometheus的主要设计目标之一是操作简单性。这样,Prometheus就限制了监控系统的可能失效模式数量,遵循着一原则,Prometheus目前只局限于单个点,因为集群带来了额外的操作复杂性,使用单个节点不那么复杂,但是对可以由Prometheus监控的度量指标适量有着严格的限制
  • 这个名字很想让人吐槽下,搜索相关关键词 总是会喜欢 那个电影。。。