Grafana动态视图在转转推送系统中的应用

news2024/9/27 5:59:49

1 背景

转转的推送系统为自研产物,实现过程简述为:对外提供一个接入层,以多次MQ转发形式进行多系统交互,内部包括:推送内容过滤、免打扰策略、厂商通道分发等逻辑,最终发起http请求至厂商通道,推送至设备,如图1所示。一条Push经过的逻辑节点众多,业务侧同学经常反馈Push收不到。每次收到反馈,都需要对链路中的每个集群进行排查,费时费力,亟需一种快速定位问题的方式,解放人力。

图1 转转推送系统-推送流程

2 idea的诞生

在调用链路层面,一次接口调用中,traceId贯穿整个调用链路,该能力由Radar(自研能力,负责埋点的生成等)+ Zipkin实现。当Push发送失败时,一定会在某个逻辑节点终止,如果我们可以将正向逻辑节点、异常逻辑节点以可视化的方式呈现出来,以traceId作为查询问题的线索,则可以在图中快速定位问题原因。

在数据采集方向上,对数据上报有严格的耗时、低性能开销要求。Prometheus监控体系的QPS在千万级别,耗时为纳秒级,内存占用和资源消耗都相对较小,主要取决于标签的数量,标签越多,内存占用越多。若采用traceId作为查询条件(对应Prometheus中的一个标签),可以通过抽样、限制收集的环境,即:只在测试、沙箱环境收集,降低对内存等资源的消耗。

以这两个层面为出发点,Grafana动态视图与我们诉求不谋而合。

3 什么是动态视图

动态视图,即:Flowcharting,是Grafana的一个插件。该插件借助在线图形库draw.io绘制、展示复杂图表。draw.io支持的图表包括:技术架构方案(Legacy、Cloud、Azure、AWS、GCP、Kubernetes、Terraform)、UML方案、工作流等。

可以用这个插件动态填充数据、自定义数据与图表的交互,它可以/支持:

  • 监视状态和性能

  • 与图表交互

  • 根据数据或状态更改显示的对象

  • 向对象添加链接

  • 充分利用变量修改形状、颜色、链接、下载路径等

  • 支持正则表达式进行匹配和替换

附官方动态视图样例,如图2所示。

图2 官方Grafana动态视图样例

4 构建看板

4.1 绘制视图

我们将一条Push经过的每个逻辑节点绘画出来,如图3所示。上方的绿色底色节点为正向节点,每个正向节点正下方对应一些异常节点,即:图中的土黄色节点。多个正向节点之间用箭头串联起来。此外,所有节点都定义了一个状态码,用来唯一标识该节点。节点状态码释义放在了最右侧的灰色底色节点中,点击该节点可以进入状态码说明在线文档。

图3 转转推送系统-链路流程图

4.2 上报数据

在公共jar包中定义一个Counter,该Counter中包含了两个标签:nodeName、traceId。其中,traceId对应视图中每个节点的名称。

private static final Counter NODE_COUNTER = Counter.build().name("push_link_graph_node_monitor").help("push链路节点监控").labelNames("nodeName", "traceId").disableAutoCreateGraph(true).register();

此外,在jar包中提供上报方法,供各服务上报数据使用。

public static void reportNodeInfoStrWithTraceId(String nodeName, String traceId) {
    try {
        if (StringUtils.isBlank(traceId)) {
            traceId = com.bj58.zhuanzhuan.radar.util.RadarUtils.getTraceId();
        }

        NODE_COUNTER.labels(nodeName, traceId).inc();
    } catch (Exception e) {
        // DO NOTHING
    }
    return;
}

最后,在业务代码中上报埋点数据,如图4所示。

图4 上报埋点数据

4.3 创建Grafana看板

新建一个Grafana看板如图5所示。

图5 创建Grafana看板

点击《设置》按钮,完善基础信息、设置变量,如图6所示。

图6 设置按钮图示

基础信息的填写如图7所示,基础信息包括:看板名称、看板标签(可用来标记看板所属的部门信息)、看板数据的时间查询条件等。

图7 完善看板基础信息

设置变量如图8所示,该变量用作后续的数据源召回条件。变量的类型支持:即时手动输入、实时数据源、常量等等。这里将traceId设置为:即时手动输入类型。

图8 设置变量

4.4 将图导入Grafana

在已绘制好的流程界面中,选中《其它》tab,勾选其中的《编辑绘图》选项,如图9所示。然后复制XML内容到剪贴板中,如图10所示。最后将复制好的内容粘贴在FlowCharting看板内,如图11所示。

图9 编辑绘图

图10 复制XML内容

图11 粘贴XML内容

4.5 完善PromQL数据

这一步骤是书写查询语句,以获取视图中动态查询到的数据。在《Query》tab中填写PromQL、数据的图例维度,如图12所示。图例维度用作后续数据与图表的交互条件。

图12 完善PromQL与图例

对当前的推送场景来说,PromQL按照traceId聚合,图例使用nodeName。附,PromQL如下:

increase(push_link_graph_node_monitor{traceId="${traceId}"}[$__rate_interval])

如果对PromQL不了解,可以查阅参考资料中的第4点。

填写好的PromQL可以通过2种方式验证结果,如图13所示。

  • QL验证方式一:打开页面右上角的《Table view》开关,可以观测到下方有查询数据展示出来。
  • QL验证方式二:点击页面中部靠下的《Query Inspector》按钮,出现查询结果半层,半层中可以看到查询结果,如图14所示。当出错时,会给出提示信息,按提示排查即可。

图13 QL验证方式

图14 Query Inspector半层

4.6 定义Mapping

这一步骤是定义数据与图表的交互。Mapping包括:

  • Color/Tooltip Mappings:将数据关联drwa.io XML元素,动态修改图的颜色、提示。如:订单数小于100单将图变红。
  • Label/Text Mappings:将计算的数据展示到图上。
  • Link Mappings:将图配置跳转链接,点击即可跳转。
  • Event/Animation Mappings:用于将图的数据绑定事件,如:订单数小于100单,图的边框闪烁。

每个场景的使用方式可以参考官方网站,详见《参考资料》第3点,或点击每个页面元素右侧的问号查看帮助信息、样例,如图15所示。

图15 页面元素右侧的帮助信息

在推送场景中,我们使用Event/Animation Mappings,当数据满足一定条件时,图中的元素闪烁展示。首先我们配置数据的聚合方式与触发阈值,配置样例如图16所示。

图16 配置数据的聚合方式与触发阈值

其中lvl字段0值代表nodeName为21000的第一个不为空的数据大于等于0。后面会用到这个lvl值触发图形交互。

接下来,我们配置图形闪烁的条件,如图17所示。点击红色框中的《链接》按钮,然后在左侧选中要关联的页面图形元素,对应本图中的左侧蓝色框内容。选中之后,该元素的唯一标识会出现自动填充在右侧蓝色框中。之后,在黄色框里选择lvl的值,即我们刚刚设置的lvl为0这个值,代表当满足该条件时,元素会出现动效。最后在绿色框中设置动效效果为闪烁。

图17 图的数据绑定事件示例

以此类推,给页面上每个元素设置数据交互效果。

5 成果与收效

5.1 成果

通过draw.io绘制出含有Push链路中每个逻辑节点的视图,然后在Grafana上构建数据交互规则,将推送系统链路以可视化的方式呈现出来。

当我们拿到一个traceId后,输入到搜索框中,Grafana自动获取到数据,触发数据交互,高亮每一个逻辑节点,如图18所示,非常直观。

图18 推送系统动态视图演示

当异常节点高亮时,业务侧同学可以根据状态码查看说明文档,找出对应的解决方案,如图19所示,该图表明是苹果APNs通道返回了状态码为400,且原因为BadDeviceToken。

图19 推送系统动态视图-链路异常case

我们可以在图中灰色节点的在线文档链接中找到解决方案,如图20所示。

图20 推送系统APNs异常状态码释义

5.2 收效

在动态视图出现之前,人均排查时间为0.25小时以上,询问频率为每天N次。有了动态视图,业务侧同学基本能够根据动态视图定位到异常原因,实现自助解决问题,没有再询问过(排除服务异常的case,需要人工再次介入),极大降低了人力成本的投入。

6 推广

只要你的服务或者业务,可以用流程图绘制,都可以通过本文的方式构建出一张动态视图,以可视化方式展现逻辑,帮助你快速定位正向、异常逻辑节点,减少排查问题过程中的人力投入。

欢迎大家在评论区留言,也可添加微信号:zpc_1994,进一步交流。

7 致谢

感谢架构部伙伴建新(王建新)同学、赵浩同学的答疑解惑,帮助我们深入了解数据采集、动态视图构建相关的原理,为最终的技术选型提供了有力的理论支撑。

8 参考资料

[1] 孟维道.转转Push系统设计及架构演进,2023

[2] 苑冲.Prometheus+Grafana:转转如何打造开箱即用的一体化监控系统?,https://mp.weixin.qq.com/s/uSgAAsIqFcKf9jPNKH7sOw

[3] flowcharting-repository,https://algenty.github.io/flowcharting-repository/

[4] 初识PromQL,https://www.topgoer.cn/docs/prometheus/prometheus-1ccta9bf6ibdq


关于作者

张鹏程,来自转转集团-研发中心-平台基础体验后端团队,负责转转App后端开发工作。

转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。
关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android Studio】新new UI老UI的切换

Android studio新版UI 风格和老版本风格切换: File-> Settings-> Appearance-> New UI-> Enable NewUI选项

人工智能大模型如何引领智能时代的革命?

人工智能大模型如何引领智能时代的革命? 人机交互革命:大模型如何提升我们与机器沟通的自然性和智能化程度?计算范式革命:大模型如何影响现有的计算模式,并推动新一代计算技术的演进?认知协作革命&#xff…

海南云亿商务咨询有限公司洞察抖音电商新趋势

在当今这个数字化浪潮汹涌的时代,抖音电商以其独特的魅力,正逐步成为企业转型升级、品牌破圈的重要阵地。而在这片充满机遇与挑战的蓝海中,海南云亿商务咨询有限公司犹如一颗璀璨的新星,凭借其专业的服务能力和敏锐的市场洞察&…

SQL手工注入

目录 1.判断是否存在sql注入点 1.1我们在地址栏中输入?id1 1.2我们在地址栏中输入?id-- 2.联合查询 2.1首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。 2.2爆出显示位,就是看看表格里面哪一列是在页面显示…

[ACM MM 2024] AesExpert 面向图像审美知觉的多模态基础模型

AesExpert: Towards Multi-modality Foundation Model for Image Aesthetics Perception GitHub (arxiv.org) 动机 1. 要解决的问题 图像美学感知的高度抽象性:图像美学感知(IAP)的高度抽象性对当前的多模态大语言模型(MLLMs&…

Redis 7.x 系列【38】缓存预热、缓存雪崩、缓存穿透、缓存击穿

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 缓存预热2. 缓存雪崩3. 缓存穿透4. 缓存击穿 1. 缓存预热 关键词:预先加…

某MDM主数据管理系统与蓝凌OA系统集成案例

一、项目背景 某客户使用OA在集团中处于一个重要角色,集团内各流程业务数据都需要通过OA进行审批下发,同某MDM主数据之间进行数据的交互,员工、供应商、法人组织、会计科目等主数据流程,实现各业务板块系统间的业务联通&#x…

动手学深度学习V2每日笔记(使用块的网络VGG)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1Ao4y117Pd/spm_id_fromautoNext&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录,内容不会特别严…

postgregSQL配置vector插件

1.下载vector 下载vector:https://pgxn.org/dist/vector/0.5.1/ 放在:C:\Program Files\PostgreSQL\vector-0.5.1 2.安装Visual Studio 2022 下载:https://visualstudio.microsoft.com/zh-hans/downloads/ 安装Visual Studio是为了C编译环…

JL-杰理芯片-认识TA的SDK的第六天

通过修改代码无法解决的错误解决问题的方法: 从头开始一点点的配置,并运行。(配置的是标准SDK) 将无法修改的错误打印到xshell中,去看看是什么原因,就算不能理解,也要看看他运行了几次。 上电开机和按键开机1T1,2T1,一拖二

Together规则引擎 金融解决方案

目录 1.金融法规和期望正在发生变化,快速跟踪您的金融数字化变革!2.抵押贷款功能集(MFS)3.MFS 示例模型4.MFS 知识特点5.MFS特定功能 1.金融法规和期望正在发生变化,快速跟踪您的金融数字化变革! ogether规则引擎使金融机构能够简…

26.9 Django书籍管理练习

1. 搭建环境 1.1 创建数据库 Django本身不会自动创建数据库服务器或数据库实例, 这一步需要手动完成.可以使用Navicat可视化工具或者命令行创建library数据库, 编码格式为utf8_mp4.# 连接数据库 mysql -h localhost -P 3306 -u root -p123456# 创建library数据库并设置编码 c…

面试题:Java 集合类的遍历方式,如何一边遍历 一边删除?

问题一:你用过 Java 中的哪些集合类? ArrayList, LinkedList, HashMap, HashSet, TreeSet, Stack, Queue, PriorityQueue等 问题二:集合中遍历元素的方式? Collection 接口实现子类 1. List 集合 // list 集合public static …

【Linux】进程间通信(管道通信、共享内存通信)

一.什么是进程间通信 进程间通信这五个字很好理解,就是进程和进程之间通信。 那么为什么要有进程间通信呢? 1.数据传输:一个进程需要将它的数据发送给另一个进程 2.资源共享:多个进程之间共享同样的资源 3.通知事件:一…

如何制作自己的python .whl包(支持entry_points)

目录 代码目录结构如下截图所示:dir_test.py 源码如下:list/dir_list.py 源码如下:setup.py 文件源码生成.whl文件指令: 代码目录结构如下截图所示: dir_test.py 源码如下: import os import sys from pat…

RunAsDate(时间限制工具)

参考链接1 参考链接2 参考链接3 下载地址 ps:64位系统需要下载64的RunAsDate

LAMP架构详解

目录 一、Apache详解 1.1 简介 1.2 Apache功能 1.3 apache特点 1.4 三种工作模式 二、LAMP简介 2.1 LAMP平台概述 2.2 构建LAMP平台顺序 2.3 编译安装的优点 2.4 各组件的主要作用 三、wget命令 四、curl命令 五、压力测试工具 一、Apache详解 1.1 简介 Apache …

vue2,v-for中动态渲染本地的图片

一、描述 如果是正常在img标签的src上使用本地的url地址,是可以正常被渲染的,但是我们通过for的形式,动态渲染的话,就会通过网络请求的方式进行渲染,这个形式反而渲染不出来。 二、效果 这个效果,毋庸置…

LVS负载均衡集群部署之—NAT模式的介绍及搭建步骤

一、环境准备 1.准备三台rhel9服务器 服务器名称 主机名 ip地址备注LVS调度服务器lvs.timinglee.org eth0:172.25.254.100(外网) eth1:192.168.0.100(内网) 关闭selinux和防火墙webserver2网站服务器webserver1.timinglee.orgeth0:192.168.…

为什么高校开设微专业,建议搭建动作捕捉与数字人开发实训室?

随着近年来虚拟现实技术产业与元宇宙产业不断发展,动作捕捉技术成为元宇宙、VR/AR、影视动画、游戏、艺术创作、虚拟偶像等行业相关不可或缺的技术之一。各大院校为了探索新的教学模式,纷纷积极开设“微专业”,相比传统的虚拟仿真实训室来说&…