参考来源:12-6-linux性能优化实战
prometheus官方版本链接:https://prometheus.io/download/
一个完整的监控系统通常由数据采集、数据存储、数据查询和处理、告警以及可
视化展示等多个模块组成。所以,要从头搭建一个监控系统,其实也是一个很大的系统工
程。
Prometheus 的基本架构
先看数据采集模块。最左边的 Prometheus targets 就是数据采集的对象,而 Retrieval 则
负责采集这些数据。从图中你也可以看到,Prometheus 同时支持 Push 和 Pull 两种数据
采集模式。
Pull 模式,由服务器端的采集模块来触发采集。只要采集目标提供了 HTTP 接口,就可
以自由接入(这也是最常用的采集模式)。
Push 模式,则是由各个采集目标主动向 Push Gateway(用于防止数据丢失)推送指
标,再由服务器端从 Gateway 中拉取过去(这是移动应用中最常用的采集模式)。
由于需要监控的对象通常都是动态变化的,Prometheus 还提供了服务发现的机制,可以
自动根据预配置的规则,动态发现需要监控的对象。这在 Kubernetes 等容器平台中非常
有效。
第二个是数据存储模块。为了保持监控数据的持久化,图中的 TSDB(Time series
database)模块,负责将采集到的数据持久化到 SSD 等磁盘设备中。TSDB 是专门为时间
序列数据设计的一种数据库,特点是以时间为索引、数据量大并且以追加的方式写入。
第三个是数据查询和处理模块。刚才提到的 TSDB,在存储数据的同时,其实还提供了数据
查询和基本的数据处理功能,而这也就是 PromQL 语言。PromQL 提供了简洁的查询、过
滤功能,并且支持基本的数据处理方法,是告警系统和可视化展示的基础。
第四个是告警模块。右上角的 AlertManager 提供了告警的功能,包括基于 PromQL 语言
的触发条件、告警规则的配置管理以及告警的发送等。不过,虽然告警是必要的,但过于频
繁的告警显然也不可取。所以,AlertManager 还支持通过分组、抑制或者静默等多种方式
来聚合同类告警,并减少告警数量。
最后一个是可视化展示模块。Prometheus 的 web UI 提供了简单的可视化界面,用于执行
PromQL 查询语句,但结果的展示比较单调。不过,一旦配合 Grafana,就可以构建非常
强大的图形界面了。
exporter的来源
01社区提供的
https://prometheus.io/docs/instrumenting/exporters/
列举一些社区中常用的Exporter:
02用户自定义的
除了直接使用社区提供的Exporter程序以外,用户还可以基于Prometheus提供的clientLibrary创建自已的Exporter程序,自前Promthues社区官方提供了对以下编程语言的支持:Go、Java/Scala、Python、Ruby。同时还有第三方实现的如:Bash、C++、CommonLisp、Erlang、Haskeel、Lua、Node.js、PHP、Rust等。
Exporter分为两类(分类依据:运行方式)
01直接采集型
这类Exporter直接内置了相应的应用程序,用于向Prometheus直接提供Target数据支持。这样设计的好处是,可以更好地监控各自系统的内部运行状态,同时也适合更多自定义监控指标的项自实施。例如cAdvisor、Kubernetes等,它们均内置了用于可Prometheus提供监控数据的端点
02间接采集型
原始监控目标并不直接支持Prometheus,需要我们使用Prometheus提供的ClientLibrary编写该监控目标的监控采集程序,用户可以该程序独立运行,去获取指定的各类监控数据值。例如,由于Linux操作系统自身并不能直接支持Prometheus,用户无法从操作系统层上直接提供对Prometheus的支持,因此单独安装Nodeexporter,还有数据库或网站HTTP应用类等Exporter。
Exporter并没有四种类型,但可以从不同运行方式上分为以下两种:
- 独立使用:例如Node Exporter,由于操作系统并不直接支持Prometheus,用户需要通过独立运行一个程序的方式,通过操作系统提供的相关接口,将系统的运行状态数据转换为可供Prometheus读取的监控数据。同样独立使用的还有MySQL Exporter、Redis Exporter等。这些Exporter程序扮演了一个中间代理人的角色。
- 集成到应用中:为了能够更好的监控系统的内部运行状态,有些开源项目如Kubernetes,ETCD等直接在代码中使用了Prometheus的Client Library,提供了对Prometheus的直接支持。
另外,从功能上来讲,Exporter可被分为硬件监控指标采集器(如dstat、collectd)和软件信息采集器(如node_exporter、mysqld_exporter)