目录
Prometheus
概述
Prometheus是由Go语言开发的,一款开源的监控、报警、时间序列数据库的组合。
2016年,Prometheus被纳入了CNCF云原生基金会(Cloud Native Computing Foundation),成为仅次于Kubernetes的第二大开源项目。
时间序列数据
概念
时间序列数据(TimeSeries Data):按照时间顺序记录系统、设备状态编号的数据,称为时序数据。
时序数据的应用场景有很多,比如:
-
实时运维监控数据
-
传统证券行业实时交易数据
-
某一个地区的各车辆的行驶轨迹数据
-
无人驾驶车辆运行中要记录的经度、维度、速度、方向、旁边物体的距离等
特点
-
性能好
关系型数据库对于大规模数据的处理性能较差,NoSQL可以比较好的处理大规模数据,但仍比不上时间序列数据库。
-
存储成本低
高效的压缩算法,节省存储空间,有效降低IO
Prometheus的特点
- 多维度数据模型
- 灵活的查询语言(PromQL:Prometheus Query Language)
- 不依赖分布式存储,单个服务器节点是自主的
- 以HTTP的方式,通过pull模型拉取时间序列数据
- 还可以通过中间网关支持push模型
- 通过服务发现或者静态配置,来发现目标服务对象
- 支持多种多样的图表和界面展示
Prometheus原理及架构图
原理
Prometheus的基本原理是通过 HTTP 周期性抓取被监控组件的状态,任意组件只要提供对应的 HTTP 接口并且符合Prometheus定义的数据格式,就可以接入Prometheus监控。
Prometheus的实现架构并不复杂,原理其实就是收集数据、处理数据、可视化展示,再进行数据分析以及报警处理。但其珍贵之处在于提供了一整套可行的解决方案,并且形成了一整个生态,能够极大地降低我们的研发成本。
架构图(来自Prometheus官网)
相关组件介绍
Prometheus Server 负责定期在目标上抓取 metric(指标)数据,每个抓取目标都需要暴露一个 HTTP 服务接口用于 Prometheus 定时抓取。这种调用被监控对象获取监控数据的方式被称为 Pull(拉)。Pull 方式体现了 Prometheus 独特的设计哲学,这与大多数采用了 Push(推)方式的监控系统不同。
Pull 方式是优势是能够字段进行上游监控和水平监控,配置更少,更容易扩展,更灵活,更容易实