Prometheus是开源的监控告警的解决方案,最早由SoundCloud公司所开发和开源,从2012年产生至今已经7年,在技术不断变化的时代这已经是一个很长的时间了,在过去的7年里,Prometheus也得到了越来越多用户的使用和推崇,并且在2016年加入CNCF后,成为继Kubernetes之后最早从中毕业的项目。
-
Prometheus的开发语言以Go为主,也可以看到Prometheus在过去的7年里得到了超过2.7万个Star。
-
同样在CNCF的landcape的同一领域的还有Grafana、Sensu、graphite、Zabbix等。
Prometheus的概要信息如下表所示:
项目 说明 官网 https://prometheus.io/ 开源/闭源 开源 源码管理地址 https://github.com/prometheus/prometheus License类别 Apache License 2.0 开发语言 Go、JavaScript 当前稳定版本 2.14.0 (2019/11/11) 主要特性- 多维度数据模型:可使用指标名称和键/值对结合进行数据的管理。
- 提供灵活的查询语言PromQL,利用PromQL能更好地为数据先可视化显示或者告警功能提供更好的数据。
- 不依赖于分布式存储,单个服务节点的数据是自主的,可独立使用。
- 时序列数据库可基于HTTP协议使用PULL模式拉取数据。
- 提供中间网关的方式,也支持向中间网关以PUSH模式推送数据,而Prometheus再从中间网关拉取数据。
- 可以通过服务发现或者静态配置的方式发现目标对象。
- 支持多种方式的图表和仪表盘展示,比如对Grafana的支持。
整体架构如下图所示
可以看到,Prometheus的构成非常清晰,主要由如下几个部分构成:
- Pushgateway: 支持时序列数据使用PUSH模式推送的中间网关
- Prometheus Server:提供PromQL查询语言能力、负责数据的采集和存储等主要功能
- Alertmanager:是一个独立的组件,提供灵活的报警方式,比如Email、webhook等。
- Web UI:Prometheus本身提供一个非常简单的Web UI界面,这也是其代码中由小比例的JavaScript和TypeScript的原因。当然也可以结合Grafana进行监控数据的可视化展示。
非常适合纯数字类型的时序列数据,无论是以机器为中心的监控场景,还是高度动态变化的面向服务架构下的监控场景,Prometheus都是非常适合的。在微服务的世界中,Prometheus对多维度数据收集和查询的支持能力,是其长袖善舞之处。 Prometheus被设计用来支撑可靠性,当系统出现问题时能够快速判断故障原因,因此,每个Prometheus服务器都是独立的,不会依赖于网络存储或者其他远程的服务。当你其他的基础设施出现问题的时候,它还是独立可用的,而且不需要昂贵的基础设施的支撑才能够使用。
不适合的场景Prometheus看重的是可靠性而不是精确性,使用Prometheus,无论什么样的故障境况下,用户总是能够看到可以看到的统计信息,这部分信息往往来源于独立运行的没有发生故障的那些Prometheus服务器所提供。但是如果使用者需要100%的精确,比如实时的交易系统的每次请求的完整性与精确性的场景下,Prometheus可能就无法很好与完整地收集到所有的数据,这种系统或者场景之下,可以选取其他技术用于保证这些数据的完整性与精确性,而Prometheus则可以用来进行监控。
参考内容https://github.com/prometheus/prometheus https://prometheus.io/docs/introduction/overview/