Prometheus入门
Prometheus 作为新一代的云原生监控系统,贡献者非常火热,并且第三方集成也非常多
Prometheus的特点
Prometheus是一个开源的完整监控解决方案,形成了基于中央化的规则计算、统一分析和告警的新模型
Prometheus 优点:
- 易于管理
- 监控服务的内部运行状态
- 强大的数据模型
- 强大的查询语言 PromQL
- 高效
- 可扩展
- 易于集成
- 可视化
- 开放性
易于管理
- Prometheus 核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等) , 只需要本地磁盘,因此不存在级联故障的风险
- Prometheus 基于 Pull 模型的架构方式,可以在任何地方(本地电脑,开发环境,测试环境)搭建我们的监控系统
- 对于复杂的情况,还可以使用 Prometheus 服务发现 ( Service Discovery ) 的能力动态管理监控目标
监控服务的内部运行状态
Pometheus 支持监控服务的内部状态,基于 Prometheus 丰富的 Client 库,可以轻松的在应用程序中添加对 Prometheus 的支持,从而可以获取服务和应用内部真正的运行状态

强大的数据模型
所有采集的监控数据均以指标 ( metric ) 的形式保存在内置的时间序列数据库 ( TSDB )
所有的样本除了基本的指标名称以外,还包含一组用于描述该样本特征的标签
如 :
http_request_status{code='200',content_path='/api/path',environment='produment'} => [value1@timestamp1,value2@timestamp2...]http_request_status{code='200',content_path='/api/path2',environment='produment'} => [value1@timestamp1,value2@timestamp2...]
每一条时间序列由指标名称 ( Metrics Name ) 和 一组标签 ( Labels ) 唯一标识。每条时间序列按照时间的先后顺序存储一系列的样本值
http_request_status:指标名称 ( Metrics Name ){code='200',content_path='/api/path',environment='produment'}: 维度的标签,基于这些 Labels 可以方便地对监控数据进行聚合,过滤,裁剪[value1@timestamp1,value2@timestamp2...]:按照时间的先后顺序存储的样本值
强大的查询语言PromQL
Prometheus 内置了一个强大的数据查询语言 PromQL 。 通过 PromQL 可以实现对监控数据的查询、聚合。同时 PromQL 也被应用于数据可视化(如 : Grafana ) 以及告警当中
高效
大量的监控任务会有大量的数据产生。而 Prometheus 可以高效地处理这些数据
一个 Prometheus Server :
- 数以百万的监控指标
- 每秒处理数十万的数据点
可扩展
可以在每个数据中心、每个团队运行独立的 Prometheus Sevrer
Prometheus 对于联邦集群的支持,可以让多个 Prometheus 实例产生一个逻辑集群,当单实例 Prometheus Server 处理的任务量过大时,通过使用功能分区 ( sharding ) + 联邦集群 ( federation ) 可以对其进行扩展
易于集成
使用 Prometheus 可以快速搭建监控服务,并且可以非常方便地在应用程序中进行集成 , 支持:Java , JMX , Python , Go , Ruby , .Net , Node.js 客户端SDK
同时Prometheus 还支持与其他的监控系统进行集成:Graphite, Statsd, Collected, Scollector, muini, Nagios
Prometheus 社区还提供了大量第三方实现的监控数据采集支持:JMX,CloudWatch,EC2,MySQL,PostgresSQL,Haskell,Bash,SNMP,Consul,Haproxy,Mesos,Bind,CouchDB,Django,Memcached,RabbitMQ,Redis,RethinkDB,Rsyslog
可视化
- Prometheus Server 中自带的 Prometheus UI,可以方便地直接对数据进行查询,并且支持直接以图形化的形式展示数据。同时Prometheus 还提供了一个独立的基于 Ruby On Rails 的 Dashboard 解决方案 Promdash
- 最新的 Grafana 可视化工具也已经提供了完整的 Prometheus 支持,基于 Grafana 可以创建更加精美的监控图标
- 基于 Prometheus 提供的 API 还可以实现自己的监控可视化 UI
开放性
Prometheus的架构

Prometheus 生态圈组件
- Prometheus Server ( 主服务器 ) :负责收集和存储时间序列数据
- client libraies ( 应用程序代码插桩 ) :将监控指标嵌入到被监控应用程序中
- Pushgateway ( 推送网关 ) :为支持 short-lived 作业提供一个推送网关
- exporter:专门对应用开发的数据摄取组件,如:HAProxy、StatsD、Graphit
- Alertmanager:专门用于处理 alert 的组件
架构
Prometheus 设计为一个维度存储模型,可以理解为一个OLAP系统
存储计算层
- Prometheus Server,包含了存储引擎和计算引擎
- Retrieval 组件 : 取数组件,会主动从 Pushgateway 或 Exporter 拉取指标数据
- Service discovery : 动态发现要监控的目标
- TSDB : 数据核心存储与查询
- HTTP server : 对外提供HTTP服务
采集层
采集层分为两类 :
- 短作业 ( 生命周期较短 ) :直接通过API,在退出时间指标推送给 Pushgateway
- 长作业 ( 生命周期较长 ) :Retrieval 组件直接从 Job 或 Exporter 拉取数据
应用层
应用层分为两种 :
- AlertManager
- 数据可视化
- AlertManager : 对接 Pagerduty,一套付费的监控报警系统。可实现短信报警、5分钟无人ack打电话通知、仍然无人ack,通知值班人员Manager
- 数据可视化 : Prometheus build-in WebUI , Grafana
