1.1.1 Prometheus 概述
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由
SoundCloud 公司开发的。现在最常见的 Docker、Mesos、Kubernetes 容器管理系统中,通常会搭配
Prometheus 进行监控。
Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只
要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。这样做非常适合虚拟化
环境比如 VM 或者 Docker 。
输出被监控组件信息的 HTTP 接口被叫做 exporter。目前互联网公司常用的组件大部分都有
exporter 可以直接使用,比如 Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、
内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。
1.12 Prometheus的特点
多维度数据模型。
灵活的查询语言。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种多样的图表和界面展示,比如Grafana等。
官网地址:https://prometheus.io/
1.1.3 Prometheus 架构图解
普罗米修斯(Prometheus)及其一些生态系统组件的整体架构:
1.14 Prometheus 各组件运行流程如下:
-
Prometheus Server:Prometheus Sever 是 Prometheus 组件中的核心部分,负责实现对监
控数据的获取,存储及查询。Prometheus Server 可以通过静态配置管理监控目标,也可以配合使用
Service Discovery(服务发现)的方式动态管理监控目标,并从这些监控目标中获取数据。其次
Prometheus Sever 需要对采集到的数据进行存储,Prometheus Server 本身就是一个实时数据库,将
采集到的监控数据按照时间序列的方式存储在本地磁盘当中。Prometheus Server 对外提供了自定义的
PromQL,实现对数据的查询以及分析。另外 Prometheus Server 的集群能力可以使其从其他的
Prometheus Server 实例中获取数据。 -
Exporters:Exporter将监控数据采集的端点通过 HTTP 服务的形式暴露给Prometheus Server,
Prometheus Server 通过访问该 Exporter 提供的 Endpoint 端点,即可以获取到需要采集的监控数据。
可以将 Exporter 分为 2 类:
(1)、直接采集:这一类 Exporter 直接内置了对 Prometheus 监控的支持,比如 cAdvisor,
Kubernetes,Etcd,Gokit 等,都直接内置了用于向 Prometheus 暴露监控数据的端点。
(2)、间接采集:原有监控目标并不直接支持 Prometheus,因此需要通过 Prometheus 提供的 Client
Library 编写该监控目标的监控采集程序。例如:Mys