普罗米修斯
普罗米修斯(Prometheus)
概述
Prometheus是一套开源的监控、报警、时间序列数据库的组合,起始是由SoundCloud公司开发的。从2016年加入CNCF,2016年6月正式发布1.0版本,2017年底发布了基于全新存储层的2.0版本,能更好地与容器平台、云平台配合,到2018年8月毕业,现在已经成为Kubernetes的官方监控方案,社区活跃,第三方集成非常丰富。
特点
Prometheus是一个开源的完整监控解决方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于*化的规则计算、统一分析和告警的新模型。 相比于传统监控系统Prometheus具有以下优点:
-
易于管理:只有一个单独的二进制文件,不存在任何的第三方依赖,采用Pull的方式拉取数据。
-
强大的数据模型:具有时间序列数据(由指标名称和键/值对标识)的多维数据模型。
-
强大的查询语言PromQL:内置了一个强大的数据查询语言PromQL,可以实现多种查询、聚合。
-
易扩展:支持sharding和联邦集群,实现多数据中心。
-
易集成:支持多种语言的SDK进行应用程序数据埋点,社区有丰富插件。
-
可视化:自带Prometheus UI,可以进行查询与展示,Grafana也完整支持Prometheus。
-
开放性:使用sdk采集的数据可以被其他监控系统使用,不一定非要用Prometheus。
-
不依赖分布式存储;单个服务器节点是自主的。
-
通过中间网关支持推送时间序列。
-
通过服务发现或静态配置发现目标。
组件内容
-
Prometheus Server 负责从 Exporter 拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)
- Retrieval: 采样模块
- TSDB: 存储模块默认本地存储为tsdb
- HTTP Server: 提供http接口查询和面板,默认端口为9090
-
Exporters/Jobs 负责收集目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。支持数据库、硬件、消息中间件、存储系统、http服务器、jmx等。只要符合接口格式,就可以被采集。
-
PushGateway ,主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
-
客户端sdk 官方提供的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开发的类库,支持nodejs、php、erlang等
-
Alertmanager 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
大致的工作流程:
- Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
- Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
- Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
- 在图形界面中,可视化采集数据。
数据的可视化
Prometheus自带了一个web服务,包括一个默认的dashboard,可以使用表达式查询并进行图表可视化,默认服务的地址为:http://prometheus_ip:9090
自带的web展示一般只用于表达式快速输入或者临时调试,因为默认服务没有鉴权,且图表表达能力有限,因此不会作为线上可视化方案,正式的监控数据可视化一般使用Grafana来配套。
prometheus可视化方案:
- 自带web服务:在验证指标时是非常好用的,grafana虽然是作为可视化展示,但一般是先确认表达式,才去配置到grafana面板
- grafana可视化https://grafana.com/docs/grafana/latest/
- Console templates : (https://prometheus.io/docs/visualization/consoles/)官方给的一种选择,使用go templete来实现,使用难度较大,不太推荐
- promviz:(https://github.com/nghialv/promviz)开源项目,不算是监控图,可以做集群实时流量的可视化。
Prometheus存储机制
Prometheus提供了本地存储,即tsdb时序数据库,本地存储给Prometheus带来了简单高效的使用体验,prometheus2.0以后压缩数据能力也得到了很大的提升。可以在单节点的情况下满足大部分用户的监控需求。
但本地存储也限制了Prometheus的可扩展性,带来了数据持久化等一系列的问题。为了解决单节点存储的限制,prometheus没有自己实现集群存储,而是提供了远程读写的接口,让用户自己选择合适的时序数据库来实现prometheus的扩展性。
Prometheus 1.x版本的TSDB(V2存储引擎)基于LevelDB,并且使用了和Facebook Gorilla一样的压缩算法,能够将16个字节的数据点压缩到平均1.37个字节。
Prometheus 2.x版本引入了全新的V3存储引擎,提供了更高的写入和查询性能
prometheus 的局限
- prometheus是基于metric的监控,不适用于日志(logs)、事件(event)、调用链(tracing)
- 普罗米修斯重视可靠性。即使在故障条件下,用户始终可以查看有关系统的可用统计信息。但如果用户要求100%的准确性(例如每个请求计费),那么Prometheus不是一个好的选择,因为它收集的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析计费数据,而Prometheus则用于监视其余部分。
本文地址:https://blog.csdn.net/weixin_40255090/article/details/108203096