首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >运维必看!让监控数据“看得见”——Grafana + Prometheus可视化实操

运维必看!让监控数据“看得见”——Grafana + Prometheus可视化实操

作者头像
Python运维开发
发布于 2025-09-29 14:16:47
发布于 2025-09-29 14:16:47
2.2K0
举报
文章被收录于专栏:Python运维开发Python运维开发

前提已经搭建好promehtes和granfana,实践过程:grafana接入prometheus数据源和一些简单的prometheus语法

  • 操作系统:CentOS 7
  • 部署环境:测试环境
  • IP 地址:192.168.1.139 局域网测试地址

本文档为个人学习笔记,所有配置、命令、指标名称均为测试用途


1. 登录granfana 添加数据源

从主页将鼠标放到小 ⚙️ 上,点击「数据源」


2. 添加数据源

点击 Add data source 进入数据源配置页面


3. 选择数据源类型 - Prometheus

在数据源列表中选择:Prometheus


4. 配置

  • URL:输入 Prometheus 服务地址,http://192.168.1.139:8001

5. 创建仪表盘

功能

说明

Dashboard

直接创建一个新的空白仪表盘

Folder

类似创建目录,可以区分项目和业务类型创建

Imports

支持从模板或 JSON 文件导入已有仪表盘


import 通过 ID 导入

  1. 在 Import via grafana.com 输入框中填写仪表盘的 ID
  1. 仪表盘 ID 建议从grafana官方渠道获取
  2. 找到所需模板,复制 ID 填入输入框中
  3. 点击 Load系统将自动加载模板并提示选择数据源

6、创建一个自定义的仪表盘

获取指标名称也就是查询语法,可以从prometheus界面获取如图

将语法填写到granfana仪表盘的Metrics browser 输入框里,正常会展示指标数据

7 、指标数据语法的使用

1)计算指标数据在过去1分钟内的平均每秒错误率

如上图用了两种方法计算“过去1分钟内的平均每秒错误率”,便于对比分析。 两种方法都能实现,适用场景不同,根据实际需求选择。

指标说明:
  • 这个是后端自定义的埋点, 指标名称是自定义的:counter_Htest_exception_total,代表请求异常总数(Counter 类型)
  • counter_Htest_total:代表请求总数(Counter 类型)

方法一:使用 rate()rate(counter_Htest_exception_total[1m]) / rate(counter_Htest_total[1m])

方法二:使用 offset 手动差值
代码语言:javascript
复制
(counter_Htest_exception_total - counter_Htest_exception_total offset 1m) / (counter_Htest_total - counter_Htest_total offset 1m)

2)下面对应测试的告警规则

只有当服务有真实流量且错误率显著偏高时,才发出告警, 里面用到了rate和运算符还有and

代码语言:javascript
复制
rate(counter_Htest_total[5m]) * 60 > 5 
and 
rate(counter_Htest_exception_total[5m])/rate(counter_Htest_total[5m]) > 0.2

验证告警规则格式是否正确可以用promtool 如:

代码语言:javascript
复制
将告警规则添加到zidingyi.rules
[root@test rules]# ../promtool check rules zidingyi.rules
Checking zidingyi.rules
SUCCESS: 12 rules found

语法解析:

代码语言:javascript
复制
过去 5 分钟平均每分钟请求数 > 5

一开始只用了错误率作为告警条件,结果发现测试环境下经常误报——有时候就一两个请求失败,错误率就飙到100%,但上去看日志、手动测接口都是正常的。后来加上了“请求总量达到一定阈值”的前置条件,避免了低流量下的无效告警。这个做法仅供参考,具体阈值和逻辑还需要根据实际业务特征来调整

3)数据聚合

sum 是 PromQL 的聚合操作符

代码语言:javascript
复制
sum(rate(counter_Htest_total[1m])) by (job)

按 job 分组,统计每个服务的总 QPS job是收集指标的一个标签


4)round用法

代码语言:javascript
复制
round(counter_Htest_exception_total/counter_Htest_total*100)

两张图展示round的效果(加round的是整数,不加则是带小数的)

5)获取某段时间范围内的数据

代码语言:javascript
复制
指标名称{job="test“}[5m]

6)使用正则表达式匹配标签(模糊匹配)

代码语言:javascript
复制
指标名称{job=~"test$"}

📌 说明:

  • =~ 表示正则匹配
  • 匹配 job 标签以 test结尾的实例 注:正则匹配需确保标签存在(否则返回空)

7)总结

代码语言:javascript
复制
metric_name(指标名称)

8)、 语法调试建议

添加自定义模版时,先在prometheus上调试语法,调试好了复制到granfana,这样调试更加方便一些

1、查询规则比较复杂时(如聚合、标签过滤,计算等),可分步调试如:

metric_name-->metric_name{label="value"}-->sum(metric_name{label="value"})

2、使用promtool检查告警规则语法(promtool check rules zidingyi.rules),确保规则格式正确

欢迎留言分享你的运维小技巧!

⚠️ 注:内容为个人经验总结与技术分享,仅供参考!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 1. 登录granfana 添加数据源
  • 2. 添加数据源
  • 3. 选择数据源类型 - Prometheus
  • 4. 配置
  • 5. 创建仪表盘
    • import 通过 ID 导入
  • 6、创建一个自定义的仪表盘
    • 获取指标名称也就是查询语法,可以从prometheus界面获取如图
    • 将语法填写到granfana仪表盘的Metrics browser 输入框里,正常会展示指标数据
    • 7 、指标数据语法的使用
    • 1)计算指标数据在过去1分钟内的平均每秒错误率
    • 如上图用了两种方法计算“过去1分钟内的平均每秒错误率”,便于对比分析。 两种方法都能实现,适用场景不同,根据实际需求选择。
      • 指标说明:
      • 方法一:使用 rate()rate(counter_Htest_exception_total[1m]) / rate(counter_Htest_total[1m])
      • 方法二:使用 offset 手动差值
  • 2)下面对应测试的告警规则
  • 3)数据聚合
  • sum 是 PromQL 的聚合操作符
  • 4)round用法
  • 两张图展示round的效果(加round的是整数,不加则是带小数的)
    • 6)使用正则表达式匹配标签(模糊匹配)
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档