prometheus 基本概念
在prometheus graph页面上查询数据
node_cpu_seconds_total{mode="user"}
sample 数据点

sample 数据点
type sample struct {
t int64
v float64
}
sample代表一个数据点
size:16byte: 包含 1个8byte int64时间戳和1个8byte float64 value
Label 标签
type Label struct {
Name, Value string
}
一对label 比如 `cpu="0"` `mode: "user"`
Labels 标签组
type Labels []Label
- 就是metric 一个指标的所有tag values
prometheus四种查询类型
即时向量 Instant vector : 一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间戳
# 在prometheus页面上就是table查询 ,对应查询接口 /api/v1/query
vector 向量
type Vector []Sample
1. - ector 向量,是samples的别名,但是所有sample具有相同timestamp ,常用作instance_query的结果
2.范围向量 Range vector : 一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间戳
> 在prometheus页面上就是graph查询 ,对应查询接口 /api/v1/query
> Matrix 矩阵
type Matrix []Series
Matrix是series的切片,一般的range_query返回的结果
1. 标量 `Scalar` 一个简单的数字浮点值
2. String 一个简单的字符串值;目前未使用
四种标签匹配模式
1. `=` 等于
- 查询: cpu第一个核并且是用户态的数据 node_cpu_seconds_total{mode="user",cpu="0"}
2. `!=` 不等于
- 查询: 非lo网卡的接收字节数 node_network_receive_bytes_total{device!="lo"}
3. `=~` 正则匹配
- 查询: 挂载点以/run开头的文件系统剩余字节数 node_filesystem_avail_bytes{mountpoint=~"^/run.*"}
4. `!~` 正则非匹配
- 查询: 块设备名字不包含vda的读字节数 node_disk_read_bytes_total{device!~".*vda.*"}
四种数据类型
- gauge 当前值
node_memory_MemFree_bytes
- counter 计数器是代表一个累积指标单调递增计数器,其价值只能在重新启动增加或归零。例如,您可以使用计数器来表示已服务请求,已完成任务或错误的数量。
http_request_total
- histogram 直方图样本观测(通常之类的东西请求持续时间或响应大小)和计数它们配置的桶中。它还提供所有观察值的总和
# http所有接口 总的95分位值
# sum/count 可以算平均值
prometheus_http_request_duration_seconds_sum/ prometheus_http_request_duration_seconds_count
# histogram_quantile(0.95, sum(rate(prometheus_http_request_duration_seconds_bucket[5m])) by (le,handler))
histogram_quantile(0.95, sum(rate(prometheus_http_request_duration_seconds_bucket[1m])) by (le))
# range_query接口的95分位值
histogram_quantile(0.95, sum(rate(prometheus_http_request_duration_seconds_bucket{handler="/api/v1/query_range"}[5m])) by (le))
summary 摘要会采样观察值(通常是请求持续时间和响应大小之类的东西)。尽管它还提供了观测值的总数和所有观测值的总和,但它可以计算滑动时间窗口内的可配置分位数。
# gc耗时
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.000135743
go_gc_duration_seconds{quantile="0.25"} 0.000872805
go_gc_duration_seconds{quantile="0.5"} 0.000965516
go_gc_duration_seconds{quantile="0.75"} 0.001055636
go_gc_duration_seconds{quantile="1"} 0.006464756
# summary 平均值
go_gc_duration_seconds_sum /go_gc_duration_seconds_count
-
范围向量选择器 Range Vector Selectors
- 范围矢量的工作方式与即时矢量一样,不同之处在于它们从当前即时中选择了一定范围的样本。语法上,将持续时间附加在[]向量选择器末尾的方括号()中,以指定应为每个结果范围向量元素提取多远的时间值。
- 只能作用在counter上
时间范围
ms -毫秒
s -秒
m - 分钟
h - 小时
d -天-假设一天总是24小时
w -周-假设一周始终为7天
y -年-假设一年始终为365天
直接查询报错 node_network_receive_bytes_total{device!="lo"}[1m]
Error executing query: invalid expression type "range vector" for range query, must be Scalar or instant Vector
> 需要叠加一个非聚合函数 如 rate irate delta idelta sum 等
- 计算网卡入流量
rate(node_network_receive_bytes_total{device!="lo"}[1m])
> > 时间范围 ,不能低于采集间隔
- - 采集30秒 ,查询10秒则无数据
- - rate(node_network_receive_bytes_total{device!="lo"}[10s])