文章目录
- 系统架构设计
- 领域知识-TSDB
- 领域知识-Sample
- 领域知识-Metric
- 领域知识-exporter
- 领域知识-ClientLib
- 总结
系统架构设计
module name | desc |
Prometheus server | 内含tsdb存储数据,同时定时拉取exporter的数据 |
push gateway | 推送网关,exporter一般会被Prometheus拉取数据,如果采用push模型,则可以先将数据push到Push Gateway |
Service Discovery | 除去在yml中静态配置exporter信息,还可以通过服务发现模块动态加载exporter信息 |
Grafana | 监控面板组件 |
alertmanager | 告警组件 |
领域知识-TSDB
Prometheus会将所有采集到的样本数据以时间序列(time-series)的方式保存在内存数据库中,并且定时保存到硬盘上。
time-series是按照时间戳和值的序列顺序存放的,我们称之为向量(vector). 每条time-series通过指标名称(metrics name)和一组标签集(labelset)命名。
如下所示,可以将time-series理解为一个以时间为Y轴的数字矩阵:
^
│ . . . . . . . . . . . . . . . . . . . node_cpu{cpu="cpu0",mode="idle"}
│ . . . . . . . . . . . . . . . . . . . node_cpu{cpu="cpu0",mode="system"}
│ . . . . . . . . . . . . . . . . . . node_load1{}
│ . . . . . . . . . . . . . . . . . .
v
<------------------ 时间 ---------------->
领域知识-Sample
在time-series中的每一个点称为一个样本(sample),样本由以下三部分组成:
name | desc |
指标(metric) | metric name和描述当前样本特征的labelsets |
时间戳(timestamp) | 一个精确到毫秒的时间戳; |
样本值(value) | 一个float64的浮点型数据表示当前样本的值 |
领域知识-Metric
- Metric 含有一个name,比如node_cpu
- Metric含有一组标签键值对,比如node_cpu{cpu=“cpu0”,mode=“idle”} cpu和mode称为label标签,cpu0和idle称为label_value标签值
- 常见的metric有如下分类
name | desc |
Counter | 计数器,递增量 |
Gauge | 仪表盘,状态量 |
Histogram | 直方图,服务端计算 |
Summary | 摘要图,客户端计算,PromeQL性能更好 |
领域知识-exporter
- 当与ClientLib对齐时,表示Prometheus官方提供的一些黑盒监控采集工具,如node_exporter等等,参见其他exporter
- 当于ClientLib时,例如java的simple-client,exporter表示http端点等指标暴露端点,collector表示监控采集相关容器
领域知识-ClientLib
- 对于java特指以下相关lib
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.16.0</version>
</dependency>
总结
- spring actuator通过配置WebEndPoint暴露采集端点
- 其内部调用CollectorRegister采集所有的metricCollector上报的Metric,并将数据转成Sample格式
- 往后我们会讲到 micrometer结合simpleclient实现不同对象的监控,采集,从而形成spring到Prometheus到micrometer在java领域的闭环