prometheus 告警策略介绍 (二)
#表达式
PromQL 内置函数
absent 判断指标名称或标签是否有值
absent(v instant-vector)
有值:不返回数据
没有值:可能返回指标名称,值返回 1
# 指标名称存在数据absent(up) ==> no data,指标名称存在,不返回数据# 指标名称和标签名称值都存在数据absent(up{job="prometheus"}) ==> no data,指标名称和标签名称值都存在,不返回数据# 指标名称和标签名称的值对应不上,即没有数据absent(up{job="不存在的值"}) ==> {job="不存在的值"} = 1,返回标签和值# 指标名称不存在absent(nonexistent{job="myjob"}) ==> {job="myjob"} = 1# 正则匹配的instance不作为返回的labels的一部分absent(nonexistent{job="myjob",instance=~".*"}) ==> {job="myjob"} = 1# sum 函数返回的时间序列不带有标签,且没有样本数据absent(sum(nonexistent{job="myjob"})) ==> {} = 1absent(up{job="alertmanager"})
absent(up{job="apiserver"} == 1)
判断是否存在,存在则返回空,不存在返回1,即产生告警
absent()
absent(v instant-vector) 如果向量有元素,则返回一个空向量;如果向量没有元素,则返回值为 1。
设置如下告警表达式:absent(up{job="node"} == 1)
由于up{job="node"} 不存在或值不为1,则告警表达式的值为1 产生告警
#指标
#up函数指标
对于被Prometheus监控的服务器,咱们都有一个up指标,能够晓得该服务是否在线。
up == 0 能够工作服务下线了。
up == 1 能够工作服务在线。
expr: up == 0 # 表达式, 执行后果为true: 示意须要告警
#返回1表示正常
#没有异常返回为空