Prometheus介绍
Prometheus 简介
Prometheus
起初是 SoundCloud
创建的一个开源系统监控报警工具。自其 2012 年开创以来,众多公司、组织都采用了 Prometheus
,该项目也有一个非常活跃的开发者和用户社区。Prometheus
于 2016 年加入了 CNCF
,成为了继 Kubernetes
之后的第二个托管项目。
Prometheus 原理介绍
目前Prometheus
支持OpenTsdb
、InfluxDB
、Elasticsearch
等后端存储,通过适配器实现Prometheus
存储的remote write
和remote read
接口,便可以接入Prometheus
作为远程存储使用
Prometheu
由Go
语言编写而成,采用Pull
方式获取监控信息,并提供了多维度的数据模型和灵活的查询接口。Prometheus
不仅可以通过静态文件配置监控对象,还支持自动发现机制,能通过Kubernetes
、onsl
、DNS
等多种方式动态获取监控对象。在数据采集方面,借助Go
语音的高并发特性,单机Prometheus
可以采取数百个节点的监控数据;在数据存储方面,随着本地时序数据库的不断优化,单机Prometheus
每秒可以采集一千万个指标,如果需要存储大量的历史监控数据,则还支持远程存储。
Prometheus 特性(Features)
Prometheus 的主要特性
- 通过指标名(metric name)和 KV 结构,使用时序数据(time series data)表达的多维度数据模型
- PromQL,一种灵活的查询语言,能够更好的利用维度
- 对分布式存储没有依赖;单服务器节点即可自治
- 通过使用基于 HTTP 的拉模式 (pull model) 进行时序数据采集
- 通过中间网关 ( gateway) 以支持推送时序数据
- 通过服务发现或静态配置,发现监控目标(targets)
- 支持多图和仪表盘模式
Prometheus 组件(Components)
- Prometheus 生态由多组件构成,其中大部分都是可选配置:
- 主要的 Promethues server:抓取和存储时序数据
- 客户端 libraries:装置在应用端以采样(instrumenting)应用程序代码
- push gateway:能够支持短时任务
- 特别的 exporters 给各类服务,比如 HAProxy、StatsD、Graphite 等。
- alertmanager:用来处理报警
- 各式支持工具
Prometheus 架构(Architecture)
Prometheus
采样数据有两种方式,一种是直接采样仪表化任务(instrumenting job),另一种通过中介 push gateway 来采样短时任务。Prometheus
在本地存储所有采样的样本,同时基于这些数据,执行规则(rules)用以从已存数据上聚合、记录新的时序数据,或用以发送报警。Grafana
或其他的 API consumers
可以可视化这些收集的数据。
Prometheus
的基本原理是通过HTTP
周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口并符合Prometheus
定义的数据格式,就可以介入Prometheus
监控
针对 Prometheus、Zabbix监控系统的对比
Zabbix | Prometheus | |
---|---|---|
优点 | 1、支持多平台的企业级分布式开源监控软件; 2、安装部署简单,多种数据采集插件灵活集成 3、功能强大,可实现复杂多条件告警 4、自带画图功能,得到的数据可以绘成图形 5、提供多种API接口,支持调用脚本 6、出现问题时可自动远程执行命令(需对agent设置执行权限) |
1、后端用golang开发,前端是Grafana,JSON编辑即可解决。定制化难度较低 2、监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。 3、各个组件都有较成熟高可用方案,没有单点故障 4、适合对云环境进行监控,对OpenStack,Kubernetes 有很好的集成。 5、支持报警的收敛 |
缺点 | 1、项目批量修改不方便 2、但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发,难度较大; 3、系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁 4、数据报表需要特殊二次开发定义; |
1、安装相对复杂,监控、告警和界面都分属于不同的组件。 2、界面相对较弱,很多配置需要修改配置文件。 |
对比项 | Prometheus | zabbix | Prometheus优势 | zabbix优势 |
---|---|---|---|---|
管理 | 二进制文件启动 | LNMP+编译 | 轻量级server,便于迁移和维护 | – |
配置 | 配置文件 | 图形化 更好的支持自动化配置 | 学习成本低 | - |
client | 丰富的client库 | zabbix_agent自定义脚本 | 为各种中间件、应用提供专业的exporter,监控项更全面 | 支持自定义监控项,对监控设计者的格局要求较高 |
数据存储方式 | Prometheus TSDB | MySQL | 监控数据以时间为维度统计情况较多,时序数据库更适用于监控数据的存储,按时间索引性能更高 | MySQL较常用,学习成本低 |
数据处理 | PromQL | MySQL | PromQL计算函数丰富,统计维度广 | 同上 |
二次开发 | 丰富的sdk | api | 提供了Go、Java/Scala、Python、Ruby等sdk,二次开发更便捷 | api适配较为常用,学习成本低 |
对云环境的支持 | 原生支持容器监控 | 更适合物理机监控 | 自动发现容器,更好的适配k8s | – |
告警方式 | 可按照标签分组,收敛 | 在次数上收敛 | 告警收敛方式更多样化 | – |
监控项值 | 支持数字 | 支持数字字符串 | – | 可做日志监控 |