暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Grafana通过PromQL查询进行数据对接

IT那活儿 2025-07-17
361

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!

一

Grafana简介

Grafana 是一个开源的分析和监控平台,广泛用于可视化数据。它支持多种数据源,如 Prometheus、Graphite、InfluxDB 和 Elasticsearch,允许用户创建动态的仪表板和图表,以便更好地理解和分析数据。
1.1 Grafana 的主要特点
  • 多种数据源支持
    Grafana 可以连接多个不同类型的数据源,方便用户整合和可视化不同来源的数据。
  • 自定义仪表板
    用户可以根据需要创建和定制仪表板,选择不同的图表类型(如折线图、柱状图、饼图等)。
  • 实时监控
    支持实时数据更新,适合监控系统状态、应用性能等。
  • 警报功能
    用户可以设置阈值警报,当数据达到特定条件时,Grafana 会发送通知。
  • 灵活的查询语言
    提供强大的查询功能,支持多种查询语言,允许用户深入分析数据。
  • 社区和插件
    拥有活跃的社区和丰富的插件生态,可以扩展功能和数据源。
1.2 Grafana的应用场景
  • 基础设施监控
    监控服务器、网络和其他基础设施的健康状态。
  • 应用性能监控
    分析应用程序的性能,识别瓶颈。
  • 业务指标可视化
    可视化业务相关的数据,帮助决策。
1.3 Grafana图表配置
二

Prometheus简介

Prometheus 是一个开源的监控和报警系统,专为记录和查询时间序列数据而设计。它被广泛用于监控微服务架构、云原生应用和基础设施的性能。Prometheus 的简单性和强大功能,使其成为现代监控解决方案中的重要组成部分,尤其是在容器化和微服务架构的环境中。
2.1 Prometheus 的主要特点
  • 时间序列数据库
    Prometheus 使用一种高效的时间序列数据存储格式,可以存储带有时间戳的数据点,适合实时监控。
  • 强大的查询语言
    提供 PromQL(Prometheus Query Language),一种功能强大的查询语言,用户可以用来灵活地查询和分析时间序列数据。
  • 多种数据抓取方式
    支持通过 HTTP 拉取(pull)监控数据,也可以通过推送(push)网关来接收数据,适应不同的应用场景。
  • 自动发现
    支持服务发现功能,可以自动识别和监控集群中的服务,无需手动配置。
  • 警报功能
    内置报警管理,用户可以根据特定条件设置报警规则,并通过各种通知渠道(如 email、Slack、PagerDuty)发送警报。
  • 高效的存储
    设计为高效存储和压缩时间序列数据,支持数据的长期存储。
2.2 应用场景
  • 基础设施监控
    监控服务器、容器和云环境的性能。
  • 应用性能监控
    跟踪微服务的指标,识别性能瓶颈。
  • 业务指标
    监控业务关键指标(KPI),帮助企业进行决策。
三

PromQL

PromQL(Prometheus Query Language)是 Prometheus 提供的一种强大查询语言,用于选择和聚合时间序列数据。它允许用户灵活地查询存储在 Prometheus 中的监控数据,以便进行可视化和报警。
3.1 PromQL 的基本构成
  • 选择器
    用于选择时间序列,基本格式是 metric_name{label_name="label_value"}。
    例如:http_requests_total{status="200"} 选择状态码为 200 的 HTTP 请求总数。
  • 操作符
    PromQL 提供了多种操作符,如算术运算(+, -, *, )、比较运算(==, !=, <, >)等。
  • 聚合函数
    可以对时间序列进行聚合操作,如 sum, avg, min, max, count 等。
    例如:sum(rate(http_requests_total[5m])) 计算过去 5 分钟内 HTTP 请求的平均速率。
  • 时间范围
    使用时间区间选择特定时间段的数据,例如 http_requests_total[1h] 表示过去 1 小时的数据。
  • 偏移量
    可以使用 offset 关键字来查看过去某个时间点的数据,例如 http_requests_total[1h] offset 1h 查看一小时前的数据。
3.2 常用指标示例
1)abs(instant-vector)  
说明:求瞬时向量绝对值。
指标:node_cooling_device_cur_state{type="intel_powerclamp"}
2)absent(v instant-vector)  
说明:传入一个瞬时非空向量则返回空向量,否则返回不带名称值为1的指标,用来监控空数据的情况。
指标:node_cpu_guest_seconds_total
3)ceil(v instant-vector) 
说明:四舍五入取整。
指标:node_cpu_seconds_total{cpu="0",mode="nice"}
4)floor(v instant-vector) 
说明:函数与 ceil() 函数相反,舍弃小数部分取整。
5)clamp_max(v instant-vector, max scalar)  
说明:瞬时向量值如果大于max 则值修改为max,否则值不变(用于将向量规范到一个不大于max的区间内)。
6)delta(v range-vector) 
说明:是一个区间向量,返回一个瞬时向量。它计算一个区间向量 v 的第一个元素和最后一个元素之间的差值。
指标:go_gc_duration_seconds{instance="bigdata-02",job="bigdata-02",quantile="0"}
7)rate(v range-vector) 
说明:函数用于计算区间向量平均增长率,采用区间向量第一个值和最后值进行计算。
8)sort(v instant-vector) 
说明:函数对向量按元素的值进行升序排序。 sort_desc() 降序排序。
指标:prometheus_http_requests_total
9)sqrt(v instant-vector) 
说明:函数计算向量 v 中所有元素的平方根。
10)avg_over_time(range-vector)
说明:区间向量内每个度量指标的平均值。
指标:node_cpu_seconds_total{cpu="0",mode="idle"}
11)min_over_time(range-vector) 
说明:区间向量内每个度量指标的最小值。
12)max_over_time(range-vector)
说明:区间向量内每个度量指标的最大值。
13)sum_over_time(range-vector) 
说明:区间向量内每个度量指标的求和。
14)count_over_time(range-vector) 
说明:区间向量内每个度量指标的样本数据个数。
在两个小时内该指标有480个指标数据。
四

Grafana案例图


END


本文作者:王 扬(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论