🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 1、Prometheus 特点 * 多维数据模型:由度量名称和键值对标识的时间序列数据。 * PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询。 * 不依赖分布式存储,单个服务器节点可直接工作。 * 基于HTTP的pull方式采集时间序列数据。 * 推送时间序列数据通过PushGateway组件支持。 * 通过服务发现或静态配置发现目标。 * 多种图形模式及仪表盘支持(grafana)。 ## 2、Prometheus 工作原理 通过HTTP周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口并符合Prometheus定义的数据格式,就可以接入Prometheus监控;Prometheus Server负责定时在目标上抓取metrics(指标)数据,每个抓取目标都需要暴露一个HTTP服务接口用于Prometheus定时抓取。这种调用被监控对象获取监控数据的方式被称为Pull(拉);Pull方式体现了Prometheus独特的设计哲学与大多数采用Push(推)方式的监控不同。 **优点** * ``` 强大的多维度数据模型 ``` * ``` 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。 ``` * ``` 易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。 ``` * ``` 高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。 ``` * ``` 使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。 ``` * ``` 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端 ``` * ``` 可以通过服务发现或者静态配置去获取监控的 targets。 ``` * ``` 有多种可视化图形界面。 ``` * ``` 易于伸缩。 ``` ## 3、组件 Prometheus 生态圈中包含了多个组件,其中许多组件是可选的: * ``` Prometheus Server: 用于收集和存储时间序列数据。 ``` * ``` Client Library:客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。 ``` * ``` Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。 ``` * ``` Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus。 ``` * ``` Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。 ``` ## 4、架构 ![](https://img.kancloud.cn/9d/09/9d09d9eba2724faac31358b08f31aaea_856x564.png) ## 5、prometheus运行流程 prometheus根据配置定时去拉取各个节点的数据,默认使用的拉取方式是pull,也可以使用pushgateway提供的push方式获取各个监控节点的数据。将获取到的数据存入TSDB(一款时序型数据库)。此时prometheus已经获取到了监控数据,可以使用内置的PromQL进行查询。它的报警功能使用Alertmanager提供(Alertmanager是prometheus的告警管理和发送报警的一个组件)。prometheus原生的图标功能过于简单,可将prometheus数据接入grafana,由grafana进行统一管理。