Prometheus教程(4)指标类型与常用函数

Prometheus教程(4)指标类型与常用函数

一、Prometheus 指标类型介绍

Prometheus 提供了四种指标类型,这些类型定义了指标值的语义和处理方式,不同的指标类型也有不同的聚合函数搭配使用

1、Gauges

仪表盘型,该指标类型的值会随时变化且没有规律,通常适用于硬盘容量、CPU内存使用率等

2、Counters

计数器类型,其数据在正常状态下应该是从0开始永远递增或者是不变,单纯的Counter总数并没有直接作用,通常要借助rate、irate、topk、increase等函数来获取一个变化状态,比如监控某个指标在某个时期的增长率(增长率计算公式为 (新值 - 旧值) / 旧值 × 100%),也可以理解为在对Counter类型的数据做任何操作之前,需要先套rate()或者increase()函数

3、Histograms

直方图类型,适合统计某指标在某区间内的分布,用于响应时间、处理时间等场景

4、Summary

用于统计数据的分布情况,避免长尾问题,比如说统计一天的日志,大部分用户响应时间都是正常的,只有少量用户异常,如果取平均值的话,少量用户的异常情况就会被掩盖,而Histograms可以分别统计出全部用户的响应时间,比如0-1秒的用户有多少、1-2秒的用户有多少

二、Prometheus 常用函数

· predict_linear()

对曲线变化速率进行计算,可以起到一定的预测作用。比如当前1个小时的磁盘可用率急剧下降,这种异常写入的情况很可能导致磁盘在未来不久就被写满,这时可以使用该函数,用当前1小时的数据去预测未来几个小时的状态,实现提前告警

#根据最近1小时的数据计算未来4小时的磁盘使用情况,负数就会报警
predict_linear( node_filesystem_free_bytes{mountpoint="/"}[1h],4*3600 ) < 0

· rate() 

计算一定时间范围内最新值和最初值的差别来计算平均增长速率,适合用于变化较为平缓的指标,如请求总量、错误总数等

# 计算过去5分钟的HTTP请求平均速率
rate(http_requests_total[5m])

· irate()

比rate灵敏度更高,通过最后两个样本来计算变化率,避免了平均值的长尾问题,适合监控高频变化的指标,如 CPU 使用率

# 计算CPU使用率的瞬时变化
irate(node_cpu_seconds_total{mode="idle"}[5m])

# 监控请求的瞬时速率
irate(http_requests_total[5m])

· increase()

获取区间向量中的第一个和最后一个样本并返回其增量

# 过去1小时内的总请求数
increase(http_requests_total[1h])

# 按服务统计过去5分钟的错误数
increase(http_errors_total{job="api"}[5m])

三、Prometheus 函数使用示例

· 计算服务器 CPU 使用率

(1-avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)) * 100
# 语句解析
# 1、node_cpu_seconds_total{mode="idle"}    通过 mode="idle" 过滤出CPU空闲时间
# 2、irate(node_cpu_seconds_total{mode="idle"}[1m])  使用 irate 计算出1分钟内CPU空闲状态率,如果有多个CPU会逐一显示
# 3、avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) 将所有 CPU 分组聚合,然后显示平均空闲率,结果为小数形式
# 4、(1-avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)) * 100   减去空闲率,算出使用率,然后将结果转换为百分比


· CPU饱和度计算

node_load5 / count(node_cpu_seconds_total{mode="idle"}) by (instance, job)
# 语句解析
# node_cpu_seconds_total{mode="idle"}   记录每个 CPU 核心的空闲时间,多核CPU会有多条记录 
# count(node_cpu_seconds_total{mode="idle"}) by (instance, job) 统计CPU数,并且使用instance和job分组,因为node_load5包含这2个标签
# 最后node_load5 /的值如果大于1表示系统中出现了等待的任务,CPU 饱和


· HAProxy错误率计算

rate(haproxy_frontend_http_responses_total{code=~"4xx|5xx"}[5m])
/ignoring(code) group_left
rate(haproxy_frontend_http_requests_total[5m]) * 100


文章评论

猜你喜欢

Prometheus教程(7)使用PushGateway自定义监控

运维技术 Prometheus教程(7)使用PushGateway自定义监控

一、PushGateway 介绍在 Prometheus 的体系结构中,需要依赖 PushGateway 来对一些生命周期较短的任务或者无法被 Prometheus 直接拉取到指标的对象进行...

运维技术 Prometheus教程(6)AlertManager告警部署与配置

Prometheus教程(6)AlertManager告警部署与配置
Prometheus教程(6)AlertManager告警部署与配置
Prometheus教程(6)AlertManager告警部署与配置
Prometheus教程(6)AlertManager告警部署与配置

一、 Alertmanager 介绍AlertManager 是 Prometheus 生态中实现告警管理的关键组件。Prometheus会定期检查指标数据是否与设定好的告警规则匹...

Prometheus教程(5)常用exporter的安装与使用配置

运维技术 Prometheus教程(5)常用exporter的安装与使用配置

一、exporter介绍Prometheus exporter的作用是通过HTTP协议开放符合规范的指标数据给Prometheus抓取。在Prometheus官网提供了大量现成的exporter,基本...

Prometheus教程(3)PromQL用法详解

运维技术 Prometheus教程(3)PromQL用法详解

一、PromQL 基本介绍PromQL 全称 Prometheus Query Language,它是 Prometheus 专用查询语言。通过PromQL可以灵活的对每个指标实现条件查询、...

运维技术 Prometheus教程(2)安装部署Grafana并对接Prometheus

Prometheus教程(2)安装部署Grafana并对接Prometheus

一、Grafana介绍Grafana是一款开源的可视化平台,它能够将来自不同数据源的数据(可以集成 Prometheus、Elasticsearch、MySQL 等多种数据源)转换成丰富的图形、图表(...