Prometheus 简介
翻译 原文链接
什么是Prometheus
Prometheus是一个开源的监控和报警系统。从2012年初,很多公司和组织开始使用Prometheus,同时这个项目有了很多活跃的开发者和用户社区。现在prometheus是一个独立于任何公司的开源项目,于2016年加入了Cloud Native Computing Foundation,是kubernetes之后的第二个主要项目。
特性
- 多维度的数据模型(通过指标名称和标签键值对标识)
- 灵活的查询语言
- 单机工作模式,不依赖于分布式存储
- 通过pull模式(HTTP)收集监控数据
- 通过使用中间件可以支持push监控数据到prometheus
- 通过服务发现或者静态配置发现目标(监控数据源)
- 支持多模式的画图和仪表盘
组件
Prometheus生态系统包含很多组件(大多是都是可选择的)
- Prometheus server(抓取、存储时间序列数据)
- client libraries(帮助应用支持prometheus数据采集)
- a push gateway(支持短生命周期的jobs,接收push的监控数据)(prometheus原生支持pull工作模式,为了兼容push工作模式)
- exporters(用于支持开源服务的监控数据采集,比如:HAProxy、StatsD、Graphite等)(也就是agent)
- alertmanager(处理警报)
- 其它的支持工具
架构
下面这张图展示了prometheus的建构和prometheus系统可能需要到的组件:
architecture.png
Prometheus直接抓取exporters或者支持prometheus的jobs的监控数据,通过PushGateway间接抓取push工作模式的短期任务的监控数据。prometheus本地存储所有的采样数据,运行相应的规则来聚合数据、根据以存在的数据产生新的时间序列数据或者产生警报。Grafana或者其它可视化工具可以调用API可视化收集到的数据。
Prometheus使用的场景
Prometheus工作于任何记录纯数字的时间序列数据。它适用于以机器为中信的监控,也适用于高动态的、面向服务体系架构的监控。在微服务中,prometheus支持多维度的数据收集和展示是很有用处的。
Prometheus是专门为可靠性而设计的,当处理有问题的系统或服务时,为你提供诊断数据,使你能够快速的诊断问题。每个prometheus服务是单机的,不依赖于网络存储或者其它的远端服务。因此,你可以依赖prometheus,当你基础设施的其它部分坏掉的时候;同时部署、使用prometheus很简单。
Prometheus不适用的场景
Prometheus的核心在于可靠。你能够看到你的系统的统计数据,即使系统或者服务有问题(因为prometheus通过pull的方式收集数据,所以能够识别服务是否有问题)。如果你需要精准度很高的监控数据,比如按请求计费,prometheus不是一个好的选择;因为prometheus收集的数据可能不是很详细或者很完整。这种情况下,你最好选择其它的系统来收集和分析关于计费的数据;prometheus可以为你其它的监控提供服务。