Grafana系列-统一展示-12-RED Method Dashboard

乔玄
• 阅读 473

系列文章

概述

目前关于监控指标, 主流的有 3 个方法(Method):

  • RED : Rate(访问速率), Errors(错误), Duration(响应时长) - 由 @tom_wilkie 引入
  • USE : Utilization(利用率), Saturation(饱和度), and Errors(错误) - 由 @brendangregg 引入
  • Four Golden Signals:Latency (响应延迟, 和 Duration 类似), Traffic (对你的系统有多大的需求, 和 Rate 类似), Errors, Saturation. 基本上就是 RED + Saturation.

建议同时使用 RED 和 USE Method, 其中:

  • RED Method 关心你的用户以及他们有多快乐
  • 而 USE Method 则是关心你的机器以及它们有多快乐

典型 RED Method 监控指标

如果是通过 Prometheus 监控实现, 那么典型的指标示例如下:

Rate:

sum(rate(request_duration_seconds_count{job="…"}[1m]))

Errors:

sum(rate(request_duration_seconds_count{job="…", status_code!~"2.."}[1m]))

Duration:

histogram_quantile(0.99, sum(rate(request_duration_seconds_bucket{job="…"}[1m])) by (le))

在这里, Duration 推荐使用 50th/90th/99th percentile, 这些会更精确地反映用户真正关心的问题, 同时可以结合 Average Duration 来作为参考.

典型的仪表板示例如下:

Grafana系列-统一展示-12-RED Method Dashboard

实战 - 基于 ES Access Log 的 RED Method Dashboard

这也是无奈之举, 开发并未基于 Prometheus Client 实现 Requests 的相关指标. 而是只记录了 Access 日志, 并将日志吐到 ES 中, 那么我们只能 workaround, 通过 ES 统计日志和关键词、Terms 以实现类似的效果。实现都是可以实现的,但是在实际使用中,也确实发现基于 ES 的监控,性能会差很多。

具体效果如下:

Grafana系列-统一展示-12-RED Method Dashboard

Rate(只能实现每分钟请求数):

以 2xx 举例, Query:

request_path.keyword:(-"/actuator/health" -"/metrics" -"*info*" -"*Eureka*") AND status_code:[200 TO 299]

如上, 排除微服务中场景的监控检查和监控类 url.

下方的 Metric:

Grafana系列-统一展示-12-RED Method Dashboard

Grafana系列-统一展示-12-RED Method Dashboard

Errors:

就是 5xx:

request_path.keyword:(-"/actuator/health" -"/metrics" -"*info*" -"*Eureka*") AND status_code:[500 TO 599]

Duration:

Query 不在区分 status code:

origin_path.keyword:(-"/actuator/health" -"/metrics" -"*info*" -"*Eureka*")

Percentiles 配置如下:

Grafana系列-统一展示-12-RED Method Dashboard

  • Metric: Percentiles
  • Terms 选择 latency (在我这边的实战中, latency 记录的是 Duration)
  • Values 选择 50,99 即计算 50th, 99th percentiles

Average 配置如下:

Grafana系列-统一展示-12-RED Method Dashboard

  • Metric: Average
  • Terms 选择 latency

最终的效果就是如下:

Grafana系列-统一展示-12-RED Method Dashboard

RED Method 的使用

为了更方便基于 RED Method 的使用, 可以进行下钻排查, 还基于 Grafana Dashboard Links 做了个简单的关联, 方便跳转.

📝Notes:

关于 Grafana Dashboard Links, 应该会在后续文章中详细介绍. 😜😜😜

我们来基于上图, 做一下实战分析.

在过去 7 天里, 发现最大并发 Error 数有 8 个, 最慢 p99 duration 有 6.29s(高于阈值 5s). 我们希望找到对应的 Error 和慢的请求的具体日志.

分析 Errors

对于 Errors, 点击 Rate & Errors Panel 的 5xx legend, 会显示如下:

Grafana系列-统一展示-12-RED Method Dashboard

在该 panel 中框选, 缩小时间段, 如下:

Grafana系列-统一展示-12-RED Method Dashboard

发现发生时间为: 2023-05-11 15:58 左右, 点击右上角的 Dashboard Link, 会跳转到 ElasticSearch 快速搜索仪表板 (跳转时会带上同样的时间范围).

因为是分析错误日志, 所以可以 status_code varible 中, 选择: 500 TO 599, 直接找到相关日志, 如下:

Grafana系列-统一展示-12-RED Method Dashboard

并可以进一步通过 Logs to Trace 定位.

分析慢请求:

同分析错误请求类似套路:

  1. Durations panel 中缩小时间范围, 发现大概时间是: 2023-05-09 14:52 左右
  2. 通过 Dashboard Links 跳转到ElasticSearch 快速搜索仪表板
  3. 添加 ad hoc filter: latency>5000, 找到具体日志:

    Grafana系列-统一展示-12-RED Method Dashboard

🎉🎉🎉

总结

本文介绍了 3 种常用的监控方法:

  • USE Method(面向机器)
  • RED Method(面向用户)
  • Google SRE Four Golden Signals(RED + Saturation)

并重点基于 RED Method 介绍:

  • 基于 Prometheus + Grafana 的指标获取和展示
  • 基于 ElasticSearch + Grafana 的指标获取和展示

以及实际基于 RED Method 分析用例.

希望对各位读者有所帮助.😄😄😄

参考文档

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这