基于Prometheus&Grafana的监控方案[1]-组件介绍
Prometheus
简单介绍
Prometheus是由Go编写的一套开源的监控&报警&时间序列数据库的组合,由SoundCloud开发,从 2012 年开始编写代码,再到 2015 年 github 上开源以来,已经吸引了 9k+ 关注,以及很多大公司的使用;2016 年 Prometheus 成为继 k8s 后,第二名 CNCF(Cloud Native Computing Foundation) 成员。作为新一代开源解决方案,很多理念与 Google SRE 运维之道不谋而合。
主要特点
- 基于HTTP的pull方式采集时序数据
- 可以通过push gateway进行时序列数据推送(pushing)
- 有简单的多种可视化图表及仪表盘支持
- 可以通过服务发现或者静态配置去获取要采集的目标服务器
- 不依赖分布式存储,单个服务器节点
- 比较容易扩展,联邦集群
- 自己定义的一套多维数据模型(时间序列由指标metric名称和键/值对组成)
- 有自己的查询语言PromQL
- 非常高效的存储 平均一个采样数据占 ~3.5 bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
架构&组件
- Prometheus Server:主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理
- Alertmanager:是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式
- PushGateway:这个组件是支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上pull数据
- Jobs/exporters:真正收集本地监控数据的组件,社区提供了大量的第三方的exporter,基本涵盖了服务端的各种监控需求
- Web UI:prometheus提供了一些简单的监控图标,实际中我们一般用Grafana进行展现
数据模型
Prometheus的数据格式是简单的文本格式,可以直接阅读。其中,#号开头的是注释,除此之外,每一行一个数据项,数据名在前,值在后。{}中是标签,一条数据可以有多个标签。由于数据采用http的pull方式拉取,因此可以自己按照数据格式实现数据的采集。
样例
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 8.1724e-05
go_gc_duration_seconds{quantile="0.25"} 0.000146067
go_gc_duration_seconds{quantile="0.5"} 0.000185996
go_gc_duration_seconds{quantile="0.75"} 0.000241331
go_gc_duration_seconds{quantile="1"} 0.003861429
go_gc_duration_seconds_sum 24.3027719
go_gc_duration_seconds_count 106632
数据类型
Prometheus定义了四种数据类型
- Gauge:常规数值,例如 温度变化、内存使用变化。可变大,可变小。重启进程后,会被重置。
- Counter:用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。
- Histogram:直方图,可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供count和sum全部值的功能。
- Summary:和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。
官网地址
https://prometheus.io/docs/introduction/overview/
网友翻译地址
https://github.com/1046102779/prometheus
Prometheus操作指南
https://github.com/yunlzheng/prometheus-book
Grafana
由于Prometheus自带的图表太简单了,一般我们用Grafana进行展现。
Grafana是用于可视化大型测量数据的开源程序,提供了强大和优雅的方式去创建、共享、浏览数据。
Grafana有热插拔控制面板和可扩展的数据源,目前已经支持Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus等等各种数据来源。
Grafana官网
上一篇: CSS 最核心的几个概念
下一篇: 记一次lombok的问题