普罗米修斯(Prometheus) - xinwu-yang/cube-java GitHub Wiki

普罗米修斯简介

Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

prometheus特点

1.多维度数据模型

  1. 灵活的查询语言(PromQL):可以对采集的metrics指标进行加法,乘法,连接等操作;
  2. 可以直接在本地部署,不依赖其他分布式存储;
  3. 通过基于HTTP的pull方式采集时序数据;
  4. 可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;
  5. 可通过服务发现或者静态配置来发现目标服务对象(targets)。
  6. 有多种可视化图像界面,如Grafana等。
  7. 高效的存储,每个采样数据占3.5 bytes左右,300万的时间序列,30s间隔,保留60天,消耗磁盘大概200G。
  8. 做高可用,可以对数据做异地备份,联邦集群,部署多套prometheus,pushgateway上报数据;

####2. 什么是样本

在时间序列中的每一个点称为一个样本(sample),样本由以下三部分

  • 指标(metric):指标名称和描述当前样本特征的 labelsets;
  • 时间戳(timestamp):一个精确到毫秒的时间戳;
  • 样本值(value): 一个 folat64 的浮点型数据表示当前样本的值。

Prometheus组件介绍

  1. Prometheus Server: 用于收集和存储时间序列数据。
  2. Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。
  3. Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端,所有向promtheus server提供监控数据的程序都可以被称为exporter
  4. Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。
  5. Grafana:监控仪表盘,可视化监控数据
  6. pushgateway: 各个目标主机可上报数据到pushgateway,然后prometheus server统一从pushgateway拉取数据。

从上图可发现,Prometheus整个生态圈组成主要包括prometheus server,Exporter,pushgateway,alertmanager,grafana,Web ui界面,Prometheus server由三个部分组成,Retrieval,Storage,PromQL

  • Retrieval负责在活跃的target主机上抓取监控指标数据
  • Storage存储主要是把采集到的数据存储到磁盘中
  • PromQL是Prometheus提供的查询语言模块。

Prometheus的四种数据类型

Counter是计数器类型:

  • Counter 用于累计值,例如记录请求次数、任务完成数、错误发生次数。
  • 一直增加,不会减少。
  • 重启进程后,会被重置。

Gauge是测量器类型:

  • Gauge是常规数值,例如温度变化、内存使用变化。
  • 可变大,可变小。
  • 重启进程后,会被重置

Histogram类型

histogram是柱状图,在Prometheus系统的查询语言中,有三种作用:

  • 在一段时间范围内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中. 后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图。
  • 对每个采样点值累计和(sum)
  • 对采样点的次数累计和(count)

Summary

与 Histogram 类型类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。它也有三种作用:

  • 对于每个采样点进行统计,并形成分位图。(如:正态分布一样,统计低于60分不及格的同学比例,统计低于80分的同学比例,统计低于95分的同学比例)
  • 统计班上所有同学的总成绩(sum)
  • 统计班上同学的考试总人数(count)

prometheus搭建(docker方式)

1.准备配置文件prometheus.yml

global:
  scrape_interval:     60s
  evaluation_interval: 60s
scrape_configs:
# 可随意指定
  - job_name: 'spring'
    # 采集的路径
    metrics_path: '/cube/manage/prometheus'
    # 采集服务的地址,设置成Springboot应用所在服务器的具体地址
    static_configs:
      - targets: ['25.30.15.204:8080']

2.运行容器

docker run  -d  -p 9090:9090  -v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus