PromeSQL整理与实战(一)

/ cncf / 没有评论 / 100浏览

前面的话

所有的PromQL表达式都必须至少包含一个指标名称(例如http_request_total),或者一个不会匹配到空字符串的标签过滤器(例如{code="200"})。

示例数据

需要在metrics写好 “失败总数” and “成功总数”

# TYPE alarm_client_action_f gauge
alarm_client_action_f{Cluster="Prod1",ItemName="CMP",NodeName="CMP_NODE_27",} 0.0
alarm_client_action_f{Cluster="Prod1",ItemName="CTRMM_933736",NodeName="CTRMM_NODE_164",} 0.0
alarm_client_action_f{Cluster="Prod1",ItemName="CMP",NodeName="CMP_NODE_23",} 0.0
alarm_client_action_f{Cluster="Prod1",ItemName="CTRM",NodeName="CTRM_NODE_131",} 0.0

# TYPE alarm_client_action_s gauge
alarm_client_action_s{Cluster="Prod1",ItemName="CMP",NodeName="CMP_NODE_27",} 6.0
alarm_client_action_s{Cluster="Prod1",ItemName="CTRMM_933736",NodeName="CTRMM_NODE_164",} 6.0
alarm_client_action_s{Cluster="Prod1",ItemName="CMP",NodeName="CMP_NODE_23",} 6.0
alarm_client_action_s{Cluster="Prod1",ItemName="CTRM",NodeName="CTRM_NODE_131",} 6.0
alarm_client_action_s{Cluster="Prod1",ItemName="CTRMM",NodeName="CTRMM_NODE_127",} 6.0

基本操作

指标下的所有数据

metrics

alarm_client_action_f
alarm_client_action_f{}

时间位移

metric

alarm_client_action_f{}[5m] # 区间向量表达式,选择以当前时间为基准,5分钟内的数据
alarm_client_action_f{}[1d] # 区间向量表达式,选择以当前时间为基准,1天内的数据

而如果我们想查询,5分钟前的瞬时样本数据,或昨天一天的区间内的样本数据呢? 这个时候我们就可以使用位移操作,位移操作的关键字为offset

metric

http_request_total{} offset 5m
http_request_total{}[1d] offset 1d

计算

求和

metrics

sum(tomcat_threads_current_threads) # 所有指标的和

平均值

metrics

avg(process_files_open_files{})

失败率

匹配特定的value

metrics

alarm_client_action_f{ItemName="HMSG"} / ( alarm_client_action_f{ItemName="HMSG"} + alarm_client_action_s{ItemName="HMSG"})

匹配lavel下面所有的value

metrics

alarm_client_action_f / ( alarm_client_action_f + alarm_client_action_s)

显示符合要求的value

metrics

alarm_client_action_f{ItemName="HMSG"} / ( alarm_client_action_f{ItemName="HMSG"} + alarm_client_action_s{ItemName="HMSG"}) < 0.07

布尔值

如果值等于0.0,则返回1(true),否则返回0(false)

metrics

alarm_client_action_f == bool 0.0

按要求匹配

完全(精准)匹配

metrics

alarm_client_action_f{NodeName="CTRMM_NODE_127"}

metrics

alarm_client_action_f{NodeName!="CTRMM_NODE_127"}

不完全(不精准)匹配

metrics

alarm_client_action_f{ItemName=~"CMP|CPRM"}

多个value,多个label匹配

metrics

alarm_client_action_f{ItemName=~"CMP|CPRM",Cluster="Prod1"}

趋势图

增长率

metrics

rate(tomcat_global_sent_bytes_total[24h]) #24h趋势增长率

排序显示

metrics

topk(10, http_requests_total)

未来一段时间走势图

metrics

predict_linear(tomcat_global_sent_bytes_total{}[72h], 4 * 3600) #未来3天走势图 ,后面的4 * 3600 固定变量

另类的写法

{__name__=~"http_request_total"} # 合法
{__name__=~"node_disk_bytes_read|node_disk_bytes_written"} # 合法

不合法的

{job=~".*"} # 不合法