文章目录

  • 一、Prometheus介绍:
  • 1. 什么是Prometheus
  • 2. Prometheus的特点:
  • 3. 架构图:
  • 4. 基本原理:
  • 5. 服务过程:
  • 6. 时序数据库:
  • 6.1 什么是时序数据库:
  • 6.3 概念:
  • 7.三大套件
  • 二、安装:
  • 1. 安装Prometheus Server:
  • 三、使用:
  • 1.数据模型:
  • 1.1 Counter: 计数器
  • 1.2 Gauge: 测量器
  • 1.3 Histogram: 直方图
  • 1.4 Summary: 概要
  • 2. HTTP查询:
  • 2.1 及时查询:
  • 2.2 范围查询:
  • 2.3 其他:
  • 2. 其他:
  • 三、 可视化:
  • 1. 什么是Grafana:
  • 2. 安装:


一、Prometheus介绍:

1. 什么是Prometheus

  • 是一套使用Go语言开发的开源监控报警系统和时序列数据库(TSDB);
  • 官网地址:https://prometheus.io/

2. Prometheus的特点:

  • 多维度数据模型;
  • 灵活的查询语言;
  • 不依赖分布式存储, 单个服务器节点是自主的;
  • 通过基于HTTP的pull方式采集时序数据;
  • 可以通过中间网关进行时序列数据推送;
  • 通过服务发现或者静态配置来发现目标服务对象;
  • 支持多种多样的图表和界面展示, 比如Grafana等;

3. 架构图:

prometheus pod数量 prometheus入门_可视化


prometheus pod数量 prometheus入门_docker_02

4. 基本原理:

Prometheus的基本原理是通过HTTP周期性抓取被监控组件的状态, 任意组件只要提供对应的HTTP接口就可以接入监控. 不需要任何SDK或者其他的集成过程. 这样做非常适合做虚拟化环境监控系统, 比如VM、Docker、Kubernetes等. 输出被监控组件信息的HTTP接口被叫做exporter. 目前互联网公司常用的组件大部分都有exporter可以直接使用, 比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)

5. 服务过程:

  • Prometheus Daemon负责定时去目标上抓取metrics(指标)数据, 每个抓取目标需要暴露一个http服务的接口给它定时抓取. Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标. Prometheus采用pull的方式进行监控, 即服务器可以直接通过目标pull数据或者间接地通过中间网关来Push数据;
  • Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中;
  • Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
  • PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据;
  • Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式;

6. 时序数据库:

6.1 什么是时序数据库:

时序数据是基于时间的一系列的数据。揭示其趋势性、规律性、异常性;

  • 北上广三地某年气温变化图

6.3 概念:

  • metric: 度量, 相当于关系型数据库中的table;
  • data point: 数据点, 相当于关系型数据库中的row;
  • timestamp: 时间戳, 代表数据点产生的时间;
  • field: 度量下的不同字段. 比如位置这个度量具有经度和纬度两个field.一般情况下存放的是会随着时间戳的变化而变化的数据.
  • tag: 标签, 或者附加信息. 一般存放的是并不随着时间戳变化的属性信息.timestamp加上所有的tags可以认为是table的primary key;

度量为Wind;
每一个数据点都具有一个timestamp;
两个field: direction和speed;
两个tag:sensor、city;
它的第一行和第三行,存放的都是sensor号码为95D8-7913的设备,属性城市是上海;
随着时间的变化,风向和风速都发生了改变,风向从23.4变成23.2;而风速从3.4变成了3.3

7.三大套件

  • Server: 主要负责数据采集和存储,提供PromQL查询语言的支持;
  • Push Gateway: 支持临时性Job主动推送指标的中间网关;
  • Alertmanager: 警告管理器, 用来进行报警;(不讲)

二、安装:

prometheus pod数量 prometheus入门_Prometheus_03

1. 安装Prometheus Server:

基本Prometheus基本配置另存为名为的文件prometheus.yml

global:
  scrape_interval:     15s # 默认抓取间隔, 15秒向目标抓取一次数据

# 配置报警
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# 配置记录规则
rule_files:
  # - "rules.yml"

# 这里表示抓取对象的配置
scrape_configs:
  - job_name: 'prometheus' # 这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个`job=<job_name>`的标签
    scrape_interval: 5s # 重写了全局抓取间隔时间,由15秒重写成5秒
    static_configs:
      - targets: ['localhost:9090'] # 监控自身

具体配置参数: https://prometheus.io/docs/prometheus/latest/configuration/configuration/ 示例配置: https://github.com/prometheus/prometheus/blob/release-2.22/config/testdata/conf.good.yml 在docker中运行:

docker run --name=prometheus -d -p 9090:9090 \
-v /Users/chengfei/Documents/学习/prometheus/server/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /Users/chengfei/Documents/学习/prometheus/server/rules.yml:/etc/prometheus/rules.yml \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle
启动时加上--web.enable-lifecycle启用远程热加载配置文件
调用指令是curl -X POST http://localhost:9090/-/reload

访问:http://127.0.0.1:9090/

prometheus pod数量 prometheus入门_prometheus pod数量_04

访问http://127.0.0.1:9090/metrics

prometheus pod数量 prometheus入门_Prometheus_05

三、使用:

1.数据模型:

  • Counter: 计数器
  • Gauge: 测量器
  • Histogram: 直方图
  • Summary: 概要

1.1 Counter: 计数器

计数器是代表一个累积指标单调递增计数器, 其价值只能在重新启动增加或归零.不要使用计数器来显示可以减小的值

prometheus pod数量 prometheus入门_可视化_06


prometheus pod数量 prometheus入门_docker_07

1.2 Gauge: 测量器

测量器是表示单个数值, 可以任意地上升和下降的度量.

测量器通常用于测量值,例如温度或当前内存使用量; 还用于可能上升和下降的“计数”,例如并发请求数;

prometheus pod数量 prometheus入门_Prometheus_08


prometheus pod数量 prometheus入门_prometheus pod数量_09

1.3 Histogram: 直方图

histogram,直方图对观察结果进行采样(通常是请求持续时间或响应大小等), 并将其计入可配置存储桶中.它还提供所有观察值的总和.

prometheus pod数量 prometheus入门_可视化_10


基本度量标准名称为<basename>的直方图在scrape期间显示多个时间序列:

  • 对每个采样点进行统计(并不是一段时间的统计)打到各个桶(bucket)中:<basename>_bucket{le="<upper inclusive bound>"};
  • 所有观测值的总和:<basename>_sum;
  • 已观察到的事件数:<basename>_count,和<basename>_bucket{le="+Inf"}相同;

bucketcount

sum

例子:

prometheus pod数量 prometheus入门_docker_11


如上表,设置bucket=[1,5,10],当实际采样数据如是采样点所示, Observe表示采样点落在该bucket中的数量,即落在[-,1]的样点数为2,即落在[1,5]的样点数为3,即落在[5,10]的样点数为1,write是得到的最终结果(histogram的最终结果bucket计数是向下包含的):

[basename]_bucket{le=“1”} = 2

[basename]_bucket{le=“5”} =3

[basename]_bucket{le=“10”} =6

[basename]_bucket{le="+Inf"} = 6

[basename]_count =6

[basename]_sum =18.8378745

1.4 Summary: 概要

类似histogram柱状图, summary是采样点分位图统计(通常是请求持续时间和响应大小等)。虽然它还提供观察的总数和所有观测值的总和, 但它在滑动时间窗口上计算可配置的分位数.

prometheus pod数量 prometheus入门_docker_12


基本度量标准名称<basename>的summary在scrape期间公开了多个时间序列:

  • 流φ-quantiles (0 ≤ φ ≤ 1), 显示为<basename>{quantiles="[φ]"};
  • <basename>_sum, 是指所有观察值的总和;
  • <basename>_count, 是指已观察到的事件计数值;

quantilessumcount

2. HTTP查询:

2.1 及时查询:

  • 查询方法:
GET /api/v1/query
POST /api/v1/query
  • 参数:

参数语法

说明

query=

Prometheus表达式查询字符串

time=<rfc3339 | unix_timestamp>

[可选的] 评估时间戳记.如果省略该参数, 则使用当前服务器时间

timeout=

[可选的] 评估超时默认为-query.timeout,并以该标志的值为上限

注意:
使用POST方法和Content-Type: application/x-www-form-urlencoded标头直接在请求正文中对这些参数进行URL编码.在指定可能违反服务器端URL字符限制的大型查询时很有用;

  • 响应:
{
  status: "success",
  data: {
    "resultType": "matrix" | "vector" | "scalar" | "string",
    // “矩阵”|“向量”|“标量”|“字符串”
    "result": <value>
  }
}

浏览器请求演示

2.2 范围查询:

  • 查询方法:
GET /api/v1/query_range
POST /api/v1/query_range
  • 参数:

参数语法

说明

query=

Prometheus表达式查询字符串

start=<rfc3339 | unix_timestamp>

开始时间戳

end=<rfc3339 | unix_timestamp>

结束时间戳记

step=<duration | float>

以duration格式或浮点秒数查询分辨率步长

timeout=

[可选的] 评估超时.默认为-query.timeout,并以该标志的值为上限

  • 响应:
    查询结果的data部分:
{
  "resultType": "matrix",
  "result": <value>
}

2.3 其他:

其他更具体的使用方法参考:
https://prometheus.io/docs/prometheus/latest/querying/api/

2. 其他:

  • 存储配置:
  • 多服务联合:允许Prometheus服务器从另一台Prometheus服务器抓取选定的时间序列;
  • 管理API:
  • 健康检查: GET /-/healthy
  • 准备检查: GET /-/ready
  • 重装:
  • PUT /-/reload
  • POST /-/reload
  • 默认是禁用的,可以通过--web.enable-lifecycle启用;
  • 正常关闭:
  • PUT /-/quit
  • POST /-/quit
  • 默认是禁用的,可以通过--web.enable-lifecycle启用;

三、 可视化:

  • 浏览器;
  • GRAFANA;
  • 控制台模板;

1. 什么是Grafana:

官网: https://grafana.com/ 下载地址:https://grafana.com/grafana/download

  • Grafana是用于可视化大型测量数据的开源程序, 它提供了强大和优雅的方式去创建、共享、浏览数据.
  • Dashboard中显示了你不同metric数据源中的数据.
  • Grafana最常用于因特网基础设施和应用分析, 但在其他领域也有用到, 比如: 工业传感器、家庭自动化、过程控制等等.
  • Grafana支持热插拔控制面板和可扩展的数据源,目前已经支持Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus等。

2. 安装:

docker run -d -p 3000:3000 --name grafana grafana/grafana

默认登录账户和密码都是admin

prometheus pod数量 prometheus入门_可视化_13