Prometheus入门

Prometheus 作为新一代的云原生监控系统,贡献者非常火热,并且第三方集成也非常多

Prometheus的特点

Prometheus是一个开源的完整监控解决方案,形成了基于中央化的规则计算、统一分析和告警的新模型

Prometheus 优点:

  • 易于管理
  • 监控服务的内部运行状态
  • 强大的数据模型
  • 强大的查询语言 PromQL
  • 高效
  • 可扩展
  • 易于集成
  • 可视化
  • 开放性

易于管理

  • Prometheus 核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等) , 只需要本地磁盘,因此不存在级联故障的风险
  • Prometheus 基于 Pull 模型的架构方式,可以在任何地方(本地电脑,开发环境,测试环境)搭建我们的监控系统
  • 对于复杂的情况,还可以使用 Prometheus 服务发现 ( Service Discovery ) 的能力动态管理监控目标

监控服务的内部运行状态

Pometheus 支持监控服务的内部状态,基于 Prometheus 丰富的 Client 库,可以轻松的在应用程序中添加对 Prometheus 的支持,从而可以获取服务和应用内部真正的运行状态

Prometheus 概述 - 图1

强大的数据模型

所有采集的监控数据均以指标 ( metric ) 的形式保存在内置的时间序列数据库 ( TSDB )

所有的样本除了基本的指标名称以外,还包含一组用于描述该样本特征的标签

如 :

  1. http_request_status{code='200',content_path='/api/path',environment='produment'} => [value1@timestamp1,value2@timestamp2...]
  2. 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 概述 - 图2

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

PromQL介绍

Prometheus和Flink集成

Prometheus和Grafana集成