
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自定义监控
一、PushGateway 介绍在 Prometheus 的体系结构中,需要依赖 PushGateway 来对一些生命周期较短的任务或者无法被 Prometheus 直接拉取到指标的对象进行...
运维技术 Prometheus教程(6)AlertManager告警部署与配置




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

运维技术 Prometheus教程(5)常用exporter的安装与使用配置
一、exporter介绍Prometheus exporter的作用是通过HTTP协议开放符合规范的指标数据给Prometheus抓取。在Prometheus官网提供了大量现成的exporter,基本...

运维技术 Prometheus教程(3)PromQL用法详解
一、PromQL 基本介绍PromQL 全称 Prometheus Query Language,它是 Prometheus 专用查询语言。通过PromQL可以灵活的对每个指标实现条件查询、...
运维技术 Prometheus教程(2)安装部署Grafana并对接Prometheus

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