运维开发网

与Google监控系统相似 它却走向开源

运维开发网 https://www.qedev.com 2021-01-08 08:20 出处:51CTO 作者:mb5ff5933087b38
据悉,Prometheus在其即将到来的2.0版本中将迎来一个大转变。CNCF(Cloud Native Computing Foundation)内部讨论认为,作为支持像Kubernetes规模产品的监控系统,Prometheus初始1.X版本的数据存储层设计会带来瓶颈。因为在这种环境下,会有很多监控对象——上百的容器启动和关闭——生成大量的数据。而新版本的开源原生云监控系统将会完全重写数据存储

据悉,Prometheus在其即将到来的2.0版本中将迎来一个大转变。

CNCF(Cloud Native Computing Foundation)内部讨论认为,作为支持像Kubernetes规模产品的监控系统,Prometheus初始1.X版本的数据存储层设计会带来瓶颈。因为在这种环境下,会有很多监控对象——上百的容器启动和关闭——生成大量的数据。而新版本的开源原生云监控系统将会完全重写数据存储层,以满足Kubernetes所驱动的未来需求,当前Prometheus 2.0早期alpha预览版本已经可用。

1

    

Prometheus是什么?

Prometheus起始是由Matt T. Proud 和Julius Volz开发,SoundCloud公司提供主要赞助。同时它也认可来自Docker和Boxever的工程师的贡献。随着越来越多公司和组织接受采用Prometheus,社区活跃度不断上升,Prometheus逐渐发展成开源项目。

Google SRE的书中提到,其BorgMon监控系统实现与Prometheus相似。在时下最为火爆的容器编排项目Kubernetes中,通常会搭配Prometheus进行监控。

2

    

Prometheus优势和特性

优势:

  • 非常少的外部依赖,安装使用超简单

  • 已经有非常多的系统集成 例如:docker HAProxy Nginx JMX等等

  • 服务自动化发现

  • 直接集成到代码

  • 设计思想是按照分布式、微服务架构来实现的

特性:

  1. 自定义多维度的数据模型

  2. 非常高效的存储 平均一个采样数据占 ~3.5 bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。

  3. 强大的查询语句

  4. 轻松实现数据可视化

       ……

3

    

Prometheus系统架构

与Google监控系统相似 它却走向开源

它的服务过程是这样的 Prometheus daemon 负责定时去目标上抓取 metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。

Prometheus支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。

Alertmanager 是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

Prometheus支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。

PushGateway这个组件是支持Client主动推送 metrics 到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

如果有使用过statsd的用户,则会觉得这十分相似,只是statsd是直接发送给服务器端,而Prometheus主要还是靠进程主动去抓取。

4

    

Prometheus数据模型

Prometheus 从根本上所有的存储都是按时间序列去实现的,相同的 metrics(指标名称) 和 label(一个或多个标签) 组成一条时间序列,不同的label表示不同的时间序列。为了支持一些查询,有时还会临时产生一些时间序列存储。

metrics name & label 指标名称和标签

每条时间序列是由唯一的指标名称和一组标签(key=value)的形式组成。

指标名称一般是给监测对像起一名字,例如 http_requests_total 这样,它有一些命名规则,可以包字母数字_之类的。

通常是以应用名称开头_监测对像_数值类型_单位这样。

例如:

1.push_total

2.userlogin_mysql_duration_seconds

3.app_memory_usage_bytes

标签 就是对一条时间序列不同维度的识别了,例如 一个http请求用的是POST还是GET,它的endpoint是什么,这时候就要用标签去标记了。

最终形成的标识便是这样了:

http_requests_total{method="POST",endpoint="/api/tracks"}

记住,针对http_requests_total这个metrics name 无论是增加标签还是删除标签都会形成一条新的时间序列。

查询语句就可以跟据上面标签的组合来查询聚合结果了。

如果以传统数据库的理解来看这条语句,则可以考虑 http_requests_total是表名,标签是字段,而timestamp是主键,还有一个float64字段是值了。(Prometheus里面所有值都是按float64存储)

5

    

Prometheus四种数据类型

Counter

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

  • 一直增加,不会减少。

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

例如:

http_response_total{method="GET",endpoint="/api/tracks"} 100

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

Gauge

  • Gauge 常规数值,例如 温度变化、内存使用变化。

  • 可变大,可变小。

  • 重启进程后,会被重置

例如: 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 可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供 count 和 sum 全部值的功能。

例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值。

与Google监控系统相似 它却走向开源

Summary

Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。例如:count=7次,sum=7次的值求值。

它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号