«

Prometheus 实战系列:前世今生

本系列将围绕 Prometheus 及其生态,介绍 Prometheus 监控体系,偏重应用和实战,帮忙大家快速建立对 Prometheus 的认识,提高实战水平。

在正式实战 Prometheus 之前,我们先来了解下 Prometheus 的前世今生。

一、Prometheus 简介

Prometheus 作为CNCF的第二名成员(第一名是 Kubernetes ),可以说是监控领域的后起之秀。

不得不说,Prometheus 和 Kubernetes 渊源颇深,正如 Kubernetes 是从 Google 的 Borg 系统演变而来,Prometheus 同样受到 Google 的 Borgmon 监控系统的启发,可以看出,它们师出同门。其实 Prometheus 的创始人也是 Google 工程师,之后在 SoundCloud 开发了 Promethes 并开源发布,当前已经成为了 Kubernetes 容器监控的官方标配。

我们可以从以下这张图回顾 Prometheus 的简史:

从图中可以看到 Prometheus 几个关键节点: 1. 2012年创建,而且从创建之初就是开源了(从 Prometheus 项目的 git 提交也能看到:git log --reverse)
2. 2015年1月,发布早期版本
3. 2016年5月,正式加入CNCF,继 Kubernetes 之后做上第二把交椅
4. 2016年6月,正式发布1.0版本,同年8月举办 PromCon 大会,后面也是每年同期举办
5. 2017年,发布了基于全新存储的 2.0 版本,性能得到大幅提升

我们还可以在 Github 上看到 Prometheus 的开源现状,数据非常可观: 1. Stars: 24300 +
2. Contributors: 330 +
3. Release: 130 +
4. Commits(master): 5700 +

除去官方开源项目外,Prometheus 还包含了众多的第三方集成 Exporter,这里的众多预计有 500 +,从官方 wiki 的端口分配上,可见一斑: https://github.com/prometheus/prometheus/wiki/Default-port-allocations

二、监控简介

提到 Prometheus ,就不得不聊聊监控,这里参考《深入浅出Prometheus》一书,让我们先简要回顾下监控相关知识。

我们说的监控特指 IT 领域监控。对 IT 监控来说,主要是针对的是数据中心内的硬件和软件进行的监控和告警。

无论基础架构如何调整,都离不开监控系统的支撑。监控系统除了能提供实时监控和告警,还能以数据为支撑来辅助决策,在数据中心充当“天眼”的角色。

可以从不同的维度来看,对监控系统做个简要分类:

每种监控都涉及不同的监控指标,并使用了不同的数据采集方式。要做到全栈监控,还需要不断加强开发能力并积累运维经验。另外,对监控指标也不要一味求多求全,没有必要采集所有监控指标,因为这样不仅增加了采集的复杂度,还增加数据传输及存储的压力。

总的来说,监控需要根据自身的业务场景,采集关联的核心指标,做到有的放矢。

同时,在选择监控系统时也需要保持谨慎,当前有不少开源监控项目就能帮助企业迅速搭建监控系统,好的开源监控项目社区活跃度高、落地案例较多、容易扩展,比如本系列的重点 Prometheus。

三、Prometheus 为什么能脱颖而出

从 Prometheus 的简史图我们看到,从它发布 1.0 至今,也只不过 3 年时间,而老牌的监控系统,比如 Zabbix, Nagios 差不多有 20 年的历史。那它是如何从老牌监控系统中脱颖而出的呢?

Prometheus 不仅是一个开源监控系统,更是一个完整的监控解决方案,其对传统监控的监控和告警模型进行了颠覆,形成了基于中心化的规则计算、统一分析和告警规则的新模式。其优点众多,不完备列举如下:

  1. Go 语言开发: 本身只有一个独立的二进制文件,易于配置、部署和维护,支持多操作系统,支持容器化部署
  2. 自带时序数据库,不依赖第三方存储,默认只需本地磁盘,可以完成每秒千万级的数据存储。同时还支持对接第三方时序数据库如 OpenTSDB,可以用来保持大量的历史数据。
  3. 多维度的数据模型:每条数据指标由指标名称和一组标签唯一标识,按照时间先后顺序存储。不同的Label可以将监控数据进行多维度的组合。
  4. 强大的查询语言 PromQL:内置一个强大的数据查询语言 PromeQL,可以对监控数据进行多维度查询、聚合,结合 HTTP 接口,可以很方便的应用于数据可视化(如Grafana)以及告警当中
  5. 易于集成:非常方便在应用程序中进行集成,目前提供了多种语言的客户端 SDK,包括:Go、Java、Python、Node.js、Ruby等。同时 Prometheus 还支持与其他监控系统进行集成,社区还提供了大量 Exporter 来支持监控数据采集。
  6. 高效:对于当以的 Prometheus Server而言,它可以处理数以百万的监控指标,每秒处理数十万的数据点。
  7. 可扩展:Prometheus 不仅单服务高效,还支持多服务联邦部署,可支持数据的分区采样,用于大规模集群监控。
  8. 可视化:Prometheus 自带 UI(Dashboard),可以用来做基本的可视化展示和PromQL语句验证,同时还被强大的 Grafana 原生支持,基于 Grafana 可以创建精美的可视化看板和图表。

同时也要注意,Prometheus 并不是万能的,Prometheus 团队一直围绕其最重要的事来做:即提供一个高性能和可靠的方式来收集监控指标。所以会避免做一些能被其他工具做好的事情,比如: 1. 没有丰富的界面(可以使用 Grafana 来实现)
2. 没有直接提供 HTTPS 接口(可以使用 HaProxy、Nginx的反向代理来实现)
3. 没有直接提供认证/授权(可以使用 OAuth,LDAP 来实现)

但这些不妨碍它成为监控领域的后起之秀,借助强大的开源社区和监控生态,Prometheus 已经成为监控领域最锋利的一把“瑞士军刀”,后续我们就来介绍如何用好这把“瑞士军刀”。

参考资料:

  1. 《深入浅出Prometheus:原理、应用、源码与拓展详解》
  2. 《Prometheus: Up & Running》
  3. 《Prometheus 操作指南》
分享