Prometheus介绍和数据指标

Prometheus介绍和数据指标

1. Prometheus的原理

Prometheus特性:

  1. 提供多维的数据模型和灵活的查询方式,通过将指标关联多个tag,来监控数据进行任意维度的组合,并提供简单的PromQL查询方式,还提供HTTP查询接口,可以很方便地结合Grafana等GUI组件进行展示数据
  2. 提供本地存储和分布式存储。在不依赖外部存储地情况下,支持服务器节点地本地存储,通过Prometheus自带的时序数据库,可以完成每秒千万级的数据存储;不仅如此,在保存大量历史数据的场景中,Prometheus可以对接第三方时序数据库如OpenTSDB
  3. 定义了开放指标数据标准,以基于HTTP的Pull方式采集时序数据库,只有实现了Prometheus监控数据格式的监控数据才可以被Prometheus采集、汇总,并支持以push方式向PushGateway推送时序列数据,更加灵活地应用多种监控场景
  4. 支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。Prometheus目前支持Kubernetes、etcd、eureka、Consul等多种服务发现机制,可以减少运维人员的手动配置环节
  5. 易于维护,可以通过二进制文件直接启动,并且提供了容器化部署镜像
  6. 支持数据的分区采样和联邦部署,支持大规模集群监控

Prometheus介绍:

单个Prometheus节点由三个重要的组件组成,分别是检索组件、TSDB时序数据库、HTTP服务组件。检索组件的任务是对监控目标也就是target进行发现,并从target中获取指标,然后将这些指标数据推送到时序数据库中存储。HTTP服务组件则可以让外部通过PromQL语句并以HTTP协议传输方式访问Prometheus进行数据查询。
请添加图片描述
最左边这里是被监控的对象,上下表示接入Prometheus的不同方式。一些触发频率较短的任务,无法通过pull方式拉取的,则会以push的方式推到Pushgateway中,再由Pushgateway交给Prometheus。符合抓取格式的各种 Job以及exporter在Prometheus配置文件中配置后则会成为Prometheus targets,Prometheus 会周期性的从它们暴露的接口中拉取数据。

  1. 右上角部分是Prometheus的告警,它告警实现通常使用Alertmanager组件实现。用户在Prometheus配置好告警规则,当触发告警规则时,会通知Alertmanager进行告警处理,Alertmanager进行分组、抑制、过滤后通过邮件、webhook等方式将信息传递到用户手中。

右下角部分是监控信息展示部分,通常使用Grafana组件,Grafana有着丰富的开源模板文件,可以将各种监控信息以各种精美图表的形式展示给用户。

TSDB(Storage)通过一定规则清理和整理数据,并把得到的结果存储到新的时间序列中。这里有两种存储方式。

  • 本地存储。自带的时序数据看将数据保存在本地磁盘,但本地存储的容量有限,建议不要保存超过一个月的数据

  • 远端存储,适用于存储大量监控数据。目前Prometheus支持OpenTSDB、InfluxDB、Elasticsearch等后端存储,通过中间层的适配器实现Prometheus存储的remote write和remote reload接口,便可以接入Prometheus作为远端存储使用。

2. 深入Prometheus设计

2.1 指标

2.1.1 Prometheus的指标定义

监控指标(Metric)定义:

<metric name>{<label name>=<label value>,...}
  1. 指标名称(metric name)

    [a-zA-Z_:][a-zA-Z0-9_:]*
    
  2. 标签(label)
    标签可体现指标的维度特征,用于过滤和聚合。通过标签名(label name)和标签值(label value)这种键值对的形式,形成多种维度。例如,对于http_request_total,可以有{state=“200”,method=“post”}、{state=“200”,method=“get”}两个标签。在需要分别获取get和post返回的200请求时,可以分别使用两个指标;当需要获取所有返回200的请求的时候,通过http_request_total{state=“200”}完成聚合。

    指标的某些标签是以""开头的,这些标签表示是在Prometheus系统内部使用的。http_request_total{state=“200”}和{ _ name _=“http_request_total”,state=“200”}代表的是相同的标签

    Prometheus指标采用标签的方式能够很好地与容器结合,无论是原生Docker还是Kubernetes,都通过标签关联资源

2.1.2 Prometheus指标的分类

prometheus指标分为Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要)

Counter

  • Counter 用于累计值,例如记录请求次数、任务完成数、错误发生次数。

  • 一直增加,不会减少。

  • 重启进程后,会被重置。

例如:http_response_total{method="GET",endpoint="/api/tracks"} 10
10秒后抓取 http_response_total{method="GET",endpoint="/api/tracks"} 100

Gauge

Gauge是仪表盘,表示指标的实时变化情况

  • Gauge 常规数值,例如CPU,内存的使用率,网络I/O大小。
  • 可变大,可变小。
  • 重启进程后,会被重置。
例如: memory_usage_bytes{host="master-01"} 100 < 抓取值
  memory_usage_bytes{host="master-01"} 30
  memory_usage_bytes{host="master-01"} 50
  memory_usage_bytes{host="master-01"} 80 < 抓取值

Histogram

Histogram反应某个区间内的样本个数,通过{le=“上边界”}指定这个范围内的样本数

Histogram 可以理解为柱状图的意思,常用于跟踪事件发生(通常是请求持续时间或响应大小)的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供 count 和 sum 全部值的功能。

prometheus_local_storage_series_chunks_persisted(每个本地存储序列保存的chunk数量)

prometheus_local_storage_series_chunks_persisted{le="1.6384e+06"} 260
prometheus_local_storage_series_chunks_persisted{le="6.5536e+06"} 780

小于1.6384e+06个chunk的序列有260个,小于6.5536e+06个chunk的序列有780个

Summary

Summary同Histogram十分相似,常用于跟踪事件(通常是要求持续时间和响应大小)发生的规模,例如:请求耗时、响应大小。

Summary是采样点分位图统计,可以得到数据的分布情况。例如,要在班级里统计

Prometheus_tsdb_wal_fsync_duration_seconds(记录Prometheus Server中WAL写入磁盘的同步时间)quantile(分位数)

Prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.5"} 0.012352463
Prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.9"} 0.014458005

可得出有50%的同步时间低于0.012352463s,可得出有90%的同步时间低于0.014458005s

2.1.3 Prometheus数据样本

img

Prometheus采集的数据样本都是以时间序列保存的,每个样本都有三部分组成:指标、样本值、时间戳

样本值和时间戳的组合代表这个时间点采集到的监控数据。可以将一个指标的样本数据保存在一起,横轴代表时间,纵轴代表指标序列。

如图所示,每一行代表有一个指标组成的时间序列,每个点都代表一个监控数据,这些时序数据首先会保存在内存中,然后被批量刷新到磁盘。

2.2 数据采集

Prometheus采用统一的Restful API方式获取数据,具体是调用HTTP GET请求或metrics数据接口获取监控数据。

调用exporter返回的一个监控数据样本:

"# HELP"提供帮助信息

"# TYPE"代表metric类型

# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="post",code="200"}	95066363000
http_requests_total{method="post",code="400"}	66363000
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值