Prometheus

导读:参考Kubernetes实战》了解K8sPrometheus的应用。

基于Prometheus的线上应用监控

Prometheus是一套开源的监控、报警、时间序列数据库的组合,它的灵感来自谷歌的BorgmonPrometheus最初由前谷歌SRE Matt T. Proud开发,并转为一个研究项目;在Proud加入SoundCloud之后,他与另一位工程师Julius Volz合作开发了Prometheus。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus

Prometheus的优势在于其易于安装使用,外部依赖较少;并且直接按照分布式、微服务架构模式进行设计,支持服务自动化发现与代码集成。Prometheus能够自定义多维度的数据模型,内置强大的查询语句,搭配其丰富的社区扩展,能够轻松实现数据可视化。而随着容器、云计算、云原生的发展,目前Prometheus已经广泛用于Kubernetes集群的监控系统中。20157月,隶属于Linux基金会的 云原生计算基金会(CNCF,Cloud Native Computing Foundation)应运而生。第一个加入CNCF的项目是GoogleKubernetes,而Prometheus是第二个加入的(2016

Prometheus 生态系统

上图左侧是各种符合Prometheus数据格式的exporter,除此之外为了支持推动数据类型的Agent,可以通过Pushgateway组件,将Push转化为PullPrometheus甚至可以从其它的Prometheus获取数据,组建联邦集群。

背景特性

关键功能

  • 多维度数据模型:多维度数据模型和强大的查询语言这两个特性,正是时序数据库所要求的,所以Prometheus不仅仅是一个监控系统,同时也是一个时序数据库。

  • 方便的部署和维护:纵观比较流行的时序数据库,他们要么组件太多,要么外部依赖繁重,比如:DruidHistorical、MiddleManager、Broker、Coordinator、Overlord、Router一堆的组件,而且还依赖于ZooKeeper、Deep storage(HDFSS3,Metadata store(PostgreSQLMySQL,部署和维护起来成本非常高。而Prometheus采用去中心化架构,可以独立部署,不依赖于外部的分布式存储,你可以在几分钟的时间里就可以搭建出一套监控系统。

  • 灵活的数据采集:要采集目标的监控数据,首先需要在目标处安装数据采集组件,这被称之为Exporter,它会在目标处收集监控数据,并暴露出一个HTTP接口供Prometheus查询,Prometheus通过Pull的方式来采集数据,这和传统的Push模式不同。不过Prometheus也提供了一种方式来支持Push模式,你可以将你的数据推送到Push GatewayPrometheus通过Pull的方式从Push Gateway获取数据。目前的Exporter已经可以采集绝大多数的第三方数据,比如Docker、HAProxy、StatsD、JMX等等。

  • 强大的查询语言

除了这四大特性,随着Prometheus的不断发展,开始支持越来越多的高级特性,比如:服务发现,更丰富的图表展示,使用外部存储,强大的告警规则和多样的通知方式。

优劣对比

InfluxDB

InfluxDB相比,在场景方面,InfluxDB面向的是通用时序平台,包括日志监控等场景。而Prometheus更侧重于指标方案。PTSDB适合数值型的时序数据。不适合日志型时序数据和用于计费的指标统计。两个系统之间有非常多的相似之处,包括采集,存储,报警,展示等等:

类目 InfluxDB Prometheus
生态组合 telegraf+Influxdb+Kapacitor+Chronograf exporter+prometheus server+AlertManager+Grafana
采集端 采集工具telegraf则主打推的方式 主推拉的模式,同时通过push gateway支持推的模式
存储 基本思想上相通,关键点上有差异包括:时间线的索引,乱序的处理等等
数据模型 多值模型 单值模型
集群模式 只保留了基于relay的高可用,集群模式作为商业版本的特性发布 提供了一种很有特色的cluster模式,通过多层次的proxy来聚合多个prometheus节点实现扩展

OpenTSDB

OpenTSDB的数据模型与Prometheus几乎相同,查询语言上PromQL更简洁,OpenTSDB功能更丰富。OpenTSDB依赖的是Hadoop生态,Prometheus成长于Kubernetes生态。

Links