Prometheus
我们首先简单介绍下prometheus。
Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有一个非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,可以独立于任何公司进行维护。为了强调这一点,并澄清项目的治理结构,Prometheus于2016年加入CNCF,作为继Kubernetes之后的第二个托管项目。(内容来自https://prometheus.io/docs/introduction/overview/)
Prometheus能够实时跟踪数百万个监控指标,并附带提供了一套强大的查询语言,用户可以通过它从这些指标里提取有用信息。Prometheus简单可靠的运维模型是其主打卖点之一。
组件
Prometheus提供多个功能组件(可选):
- Prometheus服务器:用于存储时间序列数据
- 用于检测应用程序代码的客户端库
- push gateway:用于支持短期工作的推送网关
- 针对HAProxy,StatsD,Graphite等服务的专用出口商
- 一个alertmanager处理警报
- 各种支持工具
架构图
(图片来源https://prometheus.io/docs/introduction/overview/)
事实上,如果你仅仅需要用它来做监控的话,只需要部署Prometheus服务器和以及对应监控组件的exporter(采集组件数据,我们称之为exporter,可理解为采集器)即可。我们就是这样做的。
Prometheus相比于其他传统的监控运维更加方便,可靠。同时提供了对Kubernetes,Docker的良好支持,当然,prometheus还有很多其他好处,比如与Grafana结合提供强大的图形展示,以及灵活的查询语句等,在此不再详细展开。
随着不断的使用,在一定的规模下。我们发现prometheus存在一些缺点。单台的prometheus存在单点故障的风险,随着监控规模的扩大,prometheus产生的数据量会非常大,性能和存储都会面临问题。
毋庸置疑,我们需要一套高可用的Prometheus集群。
Prometheus官方提供了联邦,和远程读写(Remote read 和Remote write)来尝试解决这些问题,不过这又会带来繁琐的配置,网络延迟,以及使用联邦时依然需要考虑单点,高可用的问题,对我们使用会造成很大的成本和维护问题。
好了,该Thanos出场了,Thanos便是为了解决这些问题而存在的。在需要大规模部署Prometheus时提供了一种解决方案。
thanos的github地址:https://github.com/improbable-eng/thanos