Prometheus云原生监控:运维与开发实战
上QQ阅读APP看书,第一时间看更新

4.1.2 时间序列

和MySQL关系型数据库不同的是,时间序列数据库主要按照一定的时间间隔产生一个个数据点,而这些数据点按照时间戳和值的生成顺序存放,这就得到了我们上文提到的向量(vector)。以时间轴为横坐标、序列为纵坐标,这些数据点连接起来就会形成一个图4-1所示的矩阵。

图4-1 以时间轴为横坐标、序列为纵坐标的时间序列矩阵

每条时间序列(Time Series)是通过指标名称(Metrics name)和一组标签集(Label set)来命名的。如果time相同,但是指标名称或者标签集不同,那么时间序列也不同。如图4-1所示,在某一时刻t0,request_total{path="/status",method="GET"}和request_total{path="/",method="GET"}就是两个不同的数据点,errors_total{path="/status",method="POST"}和errors_total{path="/health",method="GET"}也是两个不同的数据点,也就是说在这个时刻可能至少产生了4条数据。当然,图4-1所示时间点有一些也是没有数量的,如果这个时刻没有记录数据,矩阵上就没有时间序列填充了。

图4-1所示矩阵中的每一个点都可称为一个样本(Sample),样本主要由3方面构成。

·指标(Metrics):包括指标名称(Metrics name)和一组标签集(Label set)名称,如request_total{path="/status",method="GET"}。

·时间戳(TimeStamp):这个值默认精确到毫秒。

·样本值(Value):这个值默认使用Float64浮点类型。

Prometheus会定期为所有系列收集新数据点。从Prometheus基于时间序列的基本特性来看,由于图4-1所示的矩阵的左侧通常为过去的数据,这些数据一般是只读(不会变更)的,故当前的数据才会在时间轴的右端垂直性写入。

思考拓展

同一个时间点可以产生很多指标,比如与中间件Redis、MySQL、Kafka、MongoDB、HikariCP等相关的指标,以及响应、I/O等系统性指标。如果使用了Prometheus监控系统,那么在前一天下午4点发生系统故障的情况下,基于上述矩阵的监控方式,技术人员就可以直接观察到前一天下午4点前后各个中间件及系统的监控指标项的数据及其趋势变化,从而更加容易定位并解决问题。这就是时序数据库的好处。目前开源领域的中间件很多都将指标作为基础功能,比如数据库连接池HikariCP(Spring Boot 2.x默认的数据库连接池)和Druid。