实用技巧:排查数据异常/数据波动问题,该如何下手?

这篇具有很好参考价值的文章主要介绍了实用技巧:排查数据异常/数据波动问题,该如何下手?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在我做开发的这些年,让我很头痛的一类问题,不是线上故障,而是数据异常,不知道有没有程序员跟我感同身受。

大多数的服务故障都有较为直观的异常日志,再结合产品表象,相对排查起来还有迹可循,但数据异常的原因就太多了,很多时候连报错日志都没有,排查起来简直无从下手。

在一个微服务、分布式、前后端分离等概念热火朝天的年代,虽然给身为程序员的我们带来了很大便利,但也同时带来了很多苦恼。分工更加明确,减少了很多工作量,我们大部分的时间和精力专注于自己所负责的模块即可。

本来一切都很美好,但是在排查一些数据异常类问题时却遇到了麻烦!

业务的底层逻辑错综复杂,一个接口的响应需要经过三四个微服务的协同处理这非常正常,甚至涉及七八个以上的微服务都不罕见。
不少服务是不同的人员,甚至是不同部门的人员在维护,这给排查带来很多不便,那该如何快速定位问题呢?

行业目前的现状

如果自身服务有异常日志,一眼就能确认问题还好说,但如果自身服务一切正常,那排查起来可得费老大劲了。

这种数据异常问题,往往是突然发生,打你一个措手不及。很多时候我们本来就有正常的开发排期,时间也比较紧张,突然再穿插一个数据异常排查的事情进来,这就很让我们气愤。
当被产品经理或者部门主管找上门来,总不能跟他说:我的服务没问题,哪里的问题我也不知道!

这种问题虽然让我们头疼,但是得认真对待,因为以我的经验来看,稍一疏忽说不定就落下一个业务不熟悉、定位问题能力差的名声甚至还可能替人背锅。

冷静下来分析,既然是数据异常类的问题,不少朋友可能会说,还能咋办,跑数呗!

跑数,说起来简单做起来可不简单,目前各个企业或业务团队的现状大概分为几种情况:

  • 1、已经将相关日志格式化后存储到数据平台,可以写SQL查询(困难指数:两颗星);
  • 2、日志没有格式化,而是落到了磁盘、HDFS或者其他存储引擎上,需要写专门的Java、Python或MR或Spark等的任务去解析原始日志然后再跑数,如果日志量大一点、日志格式再混乱一点,工作量可不小(困难指数:五颗星);
  • 3、可能连必要的日志都忘了打印(困难指数:非人力所能及,跑路吧!);

说到这,有些小伙伴觉得:那明白了,知道怎么办了,把日志格式化都写到数据中台里,有问题就写SQL查!!!

我想说的是:too young,too simple!

使用数据中台排查此类问题的弊端

使用数据中台写SQL查询格式化后的日志,困难指数是两颗星,但问题是,这有个前提:得先把日志格式化后写到中台里!关键问题是这步操作并不简单。

企业自建或购买的第三方数据中台大多是OLAP类的数仓/数据湖的解决方案,当然有些企业比较有钱,喜欢用ES来搞。

日志是非结构化的数据,是比较混乱的一种数据结构。一般来说企业的日志数据有两种:一是前端(App/H5/PC)上报的埋点日志,二是后端业务系统自己输出的日志。前端上报的埋点日志还较好一点,起码有用户信息、设备信息、埋点类型等固定参数,此外再加上不同埋点类型对应的自定义参数。

如果数据异常问题只涉及前端埋点日志,企业也已经搭建好较为完善的埋点日志存储和查询平台、并且每种埋点类型的日志都已将关键字段提取后格式化存储了,那这种情况比较理想基本只要写SQL就行了,写SQL看数虽然不够清晰直观,但还是可以凑合用的。不过如果企业的数据中台搭建不够完善或者埋点定义比较混乱的话,那就得写代码处理了。

但前端埋点只涉及用户行为侧数据,而很多业务逻辑处理细节的日志数据就不包含了,这时候就需要基于后端日志来实现。大家都知道通过后端日志排查一些异常信息、链路追踪等问题相对容易,
但是后端日志没有任何规范可言,后端日志类型远远超过前端日志,而且会随时添加、随时删除、随时变更格式。如果想基于后端日志进行统计分析绝对是一段让人痛苦不堪、叫苦连天的经历,如果想把混乱的后端日志写入数据平台再进行统计分析难度超乎寻常的大。

再者来说,从我过往的经验和教训来看,很多时候一份数据并不可靠,关键数据是需要交叉验证的!

我列举两个小例子,你就明白了:

1、服务A调用服务B的接口,数据监控应该加在服务A侧还是服务B侧?
或者服务A与服务B通过消息中间件通信,A将数据写入消息服务,B从消息中间件中读取数据,统计监控应该加在服务A侧还是服务B侧?
准确来说,如果业务比较重要的话,应该两端都加,否则即使对方拿出错误的统计数据来质疑你的时候,你可能都难以辩解!

2、App端有个重要的表单提交功能,如果要统计用户表单提交量,应该用前端埋点的上报量还是后端接口的请求量还是DB的写入量?
有些朋友可能会觉得:这还用说吗,业务数据肯定是以DB写入为准啊。没错,不过如果从服务监控和排查问题的角度来看,如果业务较为重要,三个阶段的数据监控应该都加,也就是表单埋点上报阶段、后端接口被请求时以及后端将表单数据写入DB时!

完善的服务监控体系,在于数据指标之间的互相印证!

说到这里,数据中台的弊端就已经较为明显,我们可以总结一下大概有几点:

  • 数据中台接入困难;
  • 为了应对查询,数据中台内部需要维护庞大量级的日志数据(前端日志 + 后端日志),给企业带来很大的服务器费用和维护费用;
  • 使用数据中台需要随时应对日志的格式、参数变化可能会导致数据中台内字段的变化;
  • 日志的结构和参数发生变化后,数据中台内部往往会同时存在相同日志类型,但格式不同的多种数据,这很可能导致统计分析的错误;
  • 数据中台很难实现对指定日志类型快速的上下线;
  • 使用数据数据中台查询统计数据,需要写大量的SQL,很浪费时间而且数据展示不够直观;

数据中台臃肿笨拙,即便是一线大厂拥有充足的资金和人力也没有可能使用数据中台建立起较为全面的服务监控体系。

所以,不管是写程序还是用数据中台排查此类问题并不能算是一个十分高明的方案,或者说仅仅只是一个还凑合的方案!

我所推荐的方案

现在的产品逻辑、业务逻辑越来越复杂,而数据异常很多时候会涉及企业安身立命的根本,毕竟数据异常很可能会带来直接或间接的经济损失和用户流失!

那还有没有其他更便捷、更清晰、更立体、更周全的解决方案了呢?

有,当然有,这就是我接下来要郑重向大家推荐的:开源通用型流式大数据统计系统XL-LightHouse。

绝大多数朋友应该还没有听说过它,甚至连通用型流式数据统计都没有听说过,那它相比业内目前使用的方案究竟有什么优势呢?

我一直偏执的认为:解决此类问题通用型流式数据统计是唯一接近完美的解决方案!

用一句话评价它在排查数据异常类问题的使用体验,那就是:简单、简单、你未曾体验过的简单!

XL-LightHouse与众不同的特点

  • 1、轻量级

XL-LightHouse以通用型流式数据统计为切入点,虽然它是一款大数据类系统,但从使用层面上来说,其实是一个非常轻量级,几乎没有任何使用门槛的系统。你可以一键就将它部署到服务器上,至于如何使用,那就更简单了。

只要在Web页面配置相应的元数据结构、创建统计项,再调用它的API将字段数据上报上来,然后就可以在Web端查看统计结果了。

它的整个使用流程简单到几乎不用看文档就可以完成,相比OLAP那一套笨拙、复杂的接入流程,它简直像张白纸一目了然。如果你部署完成后5分钟还没有弄明白该如何使用,都会让我觉得这个项目还有极大的优化空间!

相比于OLAP类系统它不支持原始数据明细查询、不支持多维度字段随意组合的即席查询。
这与它自身定位有关,XL-LightHouse是流式大数据统计系统,它不希望被任何可有可无的功能影响了它的轻便性和它在流式统计方面彪悍的计算性能,它不希望像OLAP那类系统一样,追求功能的完善,却把自己搞的笨重不堪,用户使用起来也感觉非常不便。
XL-LightHouse竭尽所能期望为用户打造信手拈来的愉悦感和轻松驾驭的畅快感。

  • 2、功能强大

XL-Lighthouse在流式统计、数据监控等方面的功能可谓十分强大。

  • XL-LightHouse目前已涵盖了各种流式数据统计场景,包括count、sum、max、min、avg、distinct、topN/lastN等多种运算,支持多维度计算,支持分钟级、小时级、天级多个时间粒度的统计,支持自定义统计周期的配置。
  • XL-LightHouse内置丰富的转化类函数、支持表达式解析,可以满足各种复杂的条件筛选和逻辑判断。
  • XL-LightHouse提供了完善的可视化查询功能,对外提供API查询接口,此外还包括数据指标管理、权限管理、统计限流等多种功能。
  • XL-LightHouse支持时序性数据的存储和查询。

元数据字段可以根据需要随意指定,一份元数据下有多少统计项可以随意指定,统计任务上线或下线可以随意指定,
它的架构设计更加贴合流式统计的运算特点,并对每一种运算单元都进行了很多层面的性能优化,支持超大数据量和超高并发,在它的功能范围内你几乎可以随心所欲的添加和管理你所需要的统计指标。

如何使用XL-LightHouse排查数据异常类问题?

归根到底是一句话:在任何你有需要的地方加上流式统计。

比如:

  • 可以用它统计一个if/else的分支,每分钟各被执行多少次;
  • 可以用它统计一个订单接口,每5分钟有多少人下单和下单总金额;
  • 微服务A同时调用微服务B、C、D,可以用它统计每天每个微服务各个接口调用量、异常量和耗时情况,甚至每种错误码的返回次数;
  • 可以用它统计,前端上报的数据中某个参数为空的请求占比;
  • 可以用它统计一个Feed推荐接口,每小时召回帖子的数量、每种召回模型、ABTest策略、不同的地区、不同的内容分类召回帖子的数量;
    — 可以用它监控一个KV存储服务,每天数据写入量和每天数据查询量,甚至每个key前缀的写入量和查询量;
    — 可以用它监控APP的启动耗时,弹窗广告的弹出次数;
  • 可以用它统计APP内某个广告的下发量、点击量、点击UV和点击率;
  • 可以用它监控一个新闻资讯类APP的内容池每小时各个渠道的新增帖子量;
  • 可以用它统计一个社交类APP每天聊天消息、聊天表情、红包的发送量;
  • 可以用它统计每天销售额top100的商户列表;
  • 可以用它统计任意细粒度、任意维度的数据;
  • ......

总之,在它的功能范围之内,你可以根据自己的实际需求随心所欲的创建统计指标!

  • 示例1:依赖服务接口调用量监控

假设场景:微服务A中要调用其他的服务,我们需要监控各依赖服务的接口调用量、异常量和耗时情况数据。
(有些朋友可能会觉得公司的RPC服务针对各接口的互相调用情况监控数据都已经具备了,为啥还要再监控,我这里只是举个例子,其实本质不一样,公司RPC服务所提供的数据都是定死的一些监控指标,而用XL-LightHouse具有非常强大的灵活性,可以根据自身需求定制!)
实用技巧:排查数据异常/数据波动问题,该如何下手?

  • 示例2:各终端订单量数据监控

假设场景:交易服务需要监控不同来源下单量的数据。
实用技巧:排查数据异常/数据波动问题,该如何下手?

  • 模拟数据接入
public class Testing {

    static {
        try{
            //配置RPC服务地址
            LightHouse.init("10.206.6.39:4061,10.206.6.21:4061");
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }

    @Test
    public void testStat() throws Exception {
        long t = System.currentTimeMillis();
        for(int i = 0;i<10000;i++){
            //修改统计组参数值、Token和秘钥
            Map<String,Object> map = new HashMap<>();
            map.put("source", ThreadLocalRandom.current().nextInt(3));
            map.put("order_id",RandomID.id(3));
            double price = ThreadLocalRandom.current().nextDouble(1,9999);
            map.put("price",String.format("%.2f", price));
            LightHouse.stat("Gjd:trade_source_stat","g2BjBuC0g4euWcMzqQXAAlKFcIBPbexQNLovqK9z",map,t);
        }
        System.out.println("send ok!");
        Thread.sleep(30000);
    }
}
  • 查看结果

实用技巧:排查数据异常/数据波动问题,该如何下手?

担心代码侵入怎么办?

XL-LightHouse对外提供JavaSDK,如果是Java类系统可以在自己的服务中直接调用API。

有些企业的服务并不是基于Java语言开发或者本身不想在使用时有太多的代码侵入该怎么办?

很简单,只要再额外部署一套Kafka或者其他的消息组件,自身服务将相关参数数据写入到消息组件中,然后在消费消息数据时调用xl-lighthouse的sdk就可以了,这套消息服务和消费逻辑可以企业内部共用。

结束语

线上服务监控体系可以根据实际需求陆续创建,等你将监控体系建立完备,这将使你对线上服务的驾驭能力得到空前的提升,五分钟内定位数据异常问题绝非信口开河,每次线上数据异常都是展示你能力的绝佳机会,升职加薪在向你招手~

本文可以随意转载!文章来源地址https://www.toymoban.com/news/detail-848779.html

到了这里,关于实用技巧:排查数据异常/数据波动问题,该如何下手?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实用技巧:Linux上实现OpenGauss数据库远程连接,方便的跨网络数据操作

    openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性. 结合cpolar 内网穿透工具,即可实现远程访问本地openGauss,实现远程访问,下面介绍从Linux安装到远程访问的方式

    2024年02月08日
    浏览(42)
  • 手机技巧:分享10个vivo手机实用小技巧技巧,值得收藏

    目录 1. 快速切换应用 2、智能助手Jovi 3. 轻按唤醒屏幕 4. 快速启动相机 5. 分屏功能 6. 手势操作 7. 一键清理 8.忘记密码 9.玩游戏耗电快 10.手机丢失后该怎么办 向右或向左滑动底部的虚拟按键即可。 vivo手机自带智能助手Jovi,可以根据用户的使用习惯,提供个性化的建议和推

    2024年02月02日
    浏览(50)
  • chrome-实用技巧

    重发请求,这有一种简单到发指的方式 选中 Network 点击 Fetch/XHR 选择要重新发送的请求 右键选择 Replay XHR  但是经过实际使用调研,发现它只适用于axios或类似方式使用xhr api,则XHR仍在重放,但是,如果使用新的api fetch,则需要使用其他方法,如下:  此方式还可以直接修改

    2024年02月05日
    浏览(38)
  • Greenplum实用技巧

    gp_segment_id是表中的隐藏列,用来标记该行属于哪个segment节点。因此可以基于该隐藏列进行分组查询,获取每个segment的记录数,从而判断表数据的分布是否均匀或有倾斜。 gp_segment_configuration是一张系统表,它维护包括master、standby在内的所有节点信息。是DBA了解集群最直观的

    2024年02月11日
    浏览(41)
  • Pandas实用技巧

    首先我们需要先提前下载好 示例数据集 : drinksbycountry.csv : http://bit.ly/drinksbycountry imdbratings.csv : http://bit.ly/imdbratings chiporders.csv : http://bit.ly/chiporders smallstockers.csv : http://bit.ly/smallstocks kaggletrain.csv : http://bit.ly/kaggletrain uforeports.csv : http://bit.ly/uforeports 有时你需要知道正在使用的

    2024年02月10日
    浏览(47)
  • AI绘画高效实用技巧

    如何调整整体占画面比例的问题 首先看看主要镜头类型: 广角镜头 (10mm至35mm) 拍全身 标准镜头 (35mm至85mm) 半身照 特写镜头 (85mm至300mm) 抓细节 以全画幅135为例: 20mm以下的称之为超广角镜头 21mm~40mm焦距称之为广角镜头 41mm~60mm焦距称之为标准镜头 61mm~100mm焦距称之为中焦镜头

    2024年02月11日
    浏览(46)
  • Gitlab CICD实用技巧汇总

    1、stage参数 stages:   - build   - test   - deploy 相同stage的作业会并行执行,有一个失败,则认为这个stage失败。 不同stage的作业会按序执行,前面stage有失败,后续stage不会继续执行。 可以使用needs参数改变不同stage之间的依赖关系。 2、cache参数 cache 是一种用于存储和重用构建产

    2024年02月06日
    浏览(53)
  • 实用调试技巧【上篇】

    🔴 本文章是在 Visual Studio 2022(VS2022)编译环境下进行操作讲解 Bug一词的原意是臭虫或虫子。第一代计算机是由许多庞大的真空管组成,并利用大量的电力来使真空管发光。引得一只小虫子Bug钻进了一支真空管内,导致整个计算机无法工作。研究人员费了半天时间,总算发现

    2023年04月09日
    浏览(68)
  • Navicat16实用小技巧

    数据库管理工具是一种用于管理数据库的软件工具,它可以帮助用户创建、修改、维护和查询数据库。数据库管理工具可以为用户提供可视化界面,使得管理数据库变得更加容易。最为一款数据库管理工具,需要具备一下功能: 数据库创建和配置:数据库管理工具可以帮助用

    2024年02月04日
    浏览(36)
  • VS实用调试技巧

    Bug一词的原意是虫子,而在电脑系统或程序中隐藏着的一些未被发现的 缺陷或问题 ,人们也叫它\\\"bug\\\"。这是为什么呢?这就要追溯到一个程序员与飞蛾的故事了。 Bug的创始人格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电

    2024年02月01日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包