日志服务的时序数据类型遵循Prometheus的定义规范,在时序库中所有的数据都按照时序类型存储。时序数据由时序标识和数据点组成,相同时序标识的数据组成时间线。

时序标识

每条时间线都有一个唯一的时序标识,由Metric name和Labels组成。

Metric name是一个字符串类型的标识符,用于标识指标类型。Metric name需遵循正则表达式[a-zA-Z_:][a-zA-Z0-9_:]* 。例如http_request_total表示接收到的HTTP请求的总数。

Labels由一组组键值对组成,各组键值对之间使用竖线(|)分割,用于标识指标的相关属性。Key需遵循正则表达式 [a-zA-Z_][a-zA-Z0-9_]* ,Value不能包含竖线( | ),其它不做限制。例如methodPOSTURL/api/v1/get

数据点

数据点代表时间线在具体某个时间点的值,每个数据点由时间戳和值组成。其中时间戳精度为纳秒,值的类型为double。

编码方式

时序数据的写入协议和日志写入协议一致,使用Protobuf的数据编码方式。时序标识和数据点都在content字段中,具体表示方式如下所示。
字段说明示例
__name__Metric名称。nginx_ingress_controller_response_size
__labels__Label信息,格式为{key}#$#{value}|{key}#$#{value}|{key}#$#{value}
说明
  • Label的Key需按照字母顺序进行排序。
  • 建议不要写入Value为空字符串的Label。例如Label信息为app#$#|controller_class#$#nginx,则不建议将Key为app的Label写入时序库,可能造成PromQL聚合计算报错。
app#$#ingress-nginx|controller_class#$#nginx|controller_namespace#$#kube-system|controller_pod#$#nginx-ingress-controller-589877c6b7-hw9cj
__time_nano__时间戳,单位为纳秒。1585727297293000000
__value__值。36.0