前言
Prometheus是一套开源的系统监控报警框架。如今越来越多的公司开始广泛使用Prometheus来提供近实时的、基于动态云环境和容器微服务、服务以及应用程序的内省监控。同时也用于监控传统架构的资源。
Prometheus作为新一代的云原生监控系统,拥有易于管理、查询功能强大、便于可视化、存储高效以及操作简单等特点。
在Prometheus之前市面已经出现了很多的监控系统,如Zabbix、Open-Falcon等。下表通过多维度展现了各自监控系统的优缺点
开发语言 | 成熟度 | 高性能 | 扩展性 | 社区活跃度 | 容器支持 | 企业使用情况 | 部署维护成本 | |
---|---|---|---|---|---|---|---|---|
Zabbix | C+PHP | 高 | 低 | 高 | 中 | 低 | 高 | 中 |
Open-Falcon | go+python | 中 | 高 | 中 | 中 | 中 | 中 | 高 |
Prometheus | go | 中 | 高 | 高 | 高 | 高 | 高 | 低 |
关于Prometheus
Prometheus是一个开源系统监控和警报工具包,最初是在SoundCloud构建的。自2012年成立以来,许多公司和组织都广泛运用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,Prometheus在2016年加入了云计算基金会,成为继Kubernetes之后的第二个托管项目。
01-特点
Prometheus有以下几个主要特点:
- 强大的查询功能:Prometheus灵活的查询语言PromQL能够对收集的时间序列数据进行切片和分片,以便生成特定的图、表和警报。
- 高效的存储:Prometheus以一种高效的自定义格式将时序数据存储在内存和本地磁盘上。不依赖分布式存储;单服务器节点是自治的。
- 便于可视化:Prometheus有多种可视化数据的模式:内置表达式浏览器、Grafana集成和控制台模板语言。
- 操作简单:每台服务器都是独立的,只依赖于本地存储。所有二进制文件都是静态链接的,易于部署。
- 警报精确:告警是根据Prometheus灵活的PromQL定义并传递到Alertmanager。再由Alertmanager负责管理、整合和分发各种警报到不同地目的地。
- 大量的集成:现有的Exporters允许将第三方数据连接到Promehteus。示例:系统统计信息,以及Docker、HAProxy、StatsD和JMX metrics。
02-组件
Prometheus生态系统包含多个组件,其中许多是可选的:
- 抓取并存储时间序列数据的Prometheus主服务器
- 用于检测应用程序代码客户端库
- 支持短期工作的pushgateway
- 诸如HAProxy,StatsD,Graphite等服务器的专用Exporters
- 用于处理警报的Alertmanager
- 各种支持工具
大多数Prometheus组件都是用Go编写的,因此易于构建和部署为静态二进制文件。
03-架构
下图说明了Prometheus的架构及其生态系统组件:
Prometheus 直接或通过pushgateway抓取metrics。将数据存储在本地,并对这些数据运行规则,以便从现有数据聚合和记录新时间序列,或者生成警报。Grafana或其他API consumers可以用来将抓取的数据可视化。
适用场景
Prometheus非常适合记录任何纯数字时间序列。它既适用于machine-centric监控,也适用于高度动态的service-oriented的架构监控。在微服务的领域,其对多维数据抓取和查询的支持是一种特别的优势。
Prometheus是您在中断期间也能正常使用并快速诊断问题的系统,是十分值得信赖的伙伴。每个Prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您仍可以依靠它来进行监控,并且无需设置广泛的基础结构也可使用它,在故障的情况下,仍可以查看系统可用的统计信息。如果您需要100%精确的统计数据的话,Prometheus可能不能完全满足您的需求,如果是这种情况,您可以运用其他系统来抓取和分析这部分需要精确的数据,然后将Prometheus用于余下的监控环节。