删库跑路后的现场还原

简介: 遭遇删库跑路怎么办?可观测性是研发质量和产品的试金石,是企业城墙的基石,这里拿删库跑路举一个栗子,说明可观测性的重要程度,用好可观测性,能更了解系统,扩宽业务。


网络异常,图片无法展示
|

数据库是公司重要资产,在此类重要资产平台上,尤其是重要操作,应该保持敬畏心。

数据库被删了?可怎么证明是某某某删了数据库?或者根本都不知道谁删除了数据库,又没抓现行,该怎么办?

正文

第一步 证据先行,有录屏有真相

删库动作的录制回放

录制回放让团队能清楚了解和学习用户路径和行为,其中对于关键页面诸如删除等高价值的动作,可以开启录制回放功能,比如下图,就是某一用户某一行为的屏幕录制情况。

网络异常,图片无法展示
|

删库成功的页面截图

针对录制回放的内容,可以看到用户点击删除按钮这一高风险行为。

网络异常,图片无法展示
|

第二步 录屏背后是详细的用户访问数据

rum中查看用户会话

在用户使用产品的那一刻,用户体验就开始了。用户体验数据洞见很多,加购物车、下单、视频播放等高价值按钮背后的性能等相关数据和业务息息相关:比如下图展示了成功删除数据库的提示弹窗。

网络异常,图片无法展示
|

发现用户登录并浏览数据库平台的详细信息

每一次用户会话中,记录着用户的来源、访问时长,以及用户行为,这里面就包含对页面的加载(切换)和按钮点击。下图便是一个用户登录数据库管理平台后,0-20分钟以内的用户旅程

网络异常,图片无法展示
|

发现用户点击删除库的按钮的详细信息

链接或者按钮背后隐藏着逻辑和用户动机,充分利用能转化良好化学反应。反之,在用户旅程中,也能看到用户点击删除数据库的按钮的行为,如下图所示:

网络异常,图片无法展示
|

点击按钮成功触发删除数据库的接口请求

为了明白请求或行为在系统中的'前世今生',链路追踪已经成了必备,在下图中,用户行为触发的请求的完整上下文就被“追踪”到了:

网络异常,图片无法展示
|

后台处理接口请求

在产品使用流畅度中,丝滑不一定是卖点,但“慢”肯定是用户卡点,通过全链路链路追踪综合分析,可以得到请求耗时占比,进一步定位卡在哪里(前端、后端、网络),详情见下图:

网络异常,图片无法展示
|

第三步 成功删库的链路详情

前后端加上数据库形成可视化闭环,构成的业务链路,能够高效定位业务情况,下图能完整看出一次删库的效率:

网络异常,图片无法展示
|

第四步 自动关联删库日志

全链路追踪能锦上添花的要数自动关联日志的功能了,下图能清晰看到链路所产生的日志:

网络异常,图片无法展示
|

以上我们便通过用户删库的录屏用户行为链路信息、操作日志等,还原了删库现场。当然,其中涉及了很多技术内容,下面整理了其中一些常见问题

相关技术点的FAQ :

1. 如何针对关键步骤开启录制回放功能

删除按钮 为例 ,用户点击删除按钮后 可以开启 录制回放功能

function deleteDB(){
        showConfirm(deleteDB).then((yes,no)=>{
            if(yes)=>[             datafluxRum.startSessionReplayRecording();]
        })
    }
复制代码

2. 录制回放是否涉及密码等用户私密信息

出于数据安全考虑,任何情况下,以下元素都会被屏蔽:

  • password、email 和 tel 类型的输入
  • 具有 autocomplete 属性的元素,例如信用卡号、到期日期和安全代码

3 . 如何将 用户行为后端 进行关联

前后端关联通过http请求头的traceID进行关联,开启rumapm简单设置即可实现关联。 在rum中仅仅需要在启动时注明后端地址。以本文的后台管理系统为例,需要在启动rum时开启allowTracingOrigin这个字段,配置见下图

网络异常,图片无法展示
|

可以参照如下代码

window.DATAFLUX_RUM &&
    window.DATAFLUX_RUM.init({
        applicationId: "node_mongo_admin_express",
        datakitOrigin: "http://mongodb_admin:9529", // 协议(包括://),域名(或IP地址)[和端口号]
        env: "production",
        service:"node_mongo_admin_express",
        version: "1.0.0",
        trackInteractions: true,
        allowedTracingOrigins: ["http://mongodb_admin:1234"], // 非必填,允许注入trace采集器所需header头部的所有请求列表。可以是请求的origin,也可以是是正则
        sessionSampleRate: 100,
        sessionReplaySampleRate: 100,
        defaultPrivacyLevel:  'allow',      
      });
      window.DATAFLUX_RUM && window.DATAFLUX_RUM.startSessionReplayRecording()
复制代码

4. 如何自动将采集的日志链路信息进行关联

需要将traceID注入日志,进行切分,就可以实现链路日志的关联。本文仅用一行进行了关联,代码见下图。

网络异常,图片无法展示
|

5. 如何从后端下钻到数据库

仅需要接入追踪工具即可实现下图全链路追踪,本文后端使用node的express框架,链路追踪展示图如下:

网络异常,图片无法展示
|

其中服务调用拓扑关系如下,也就是web端访问后端(node技术栈)的,后端调用数据库(mongo

网络异常,图片无法展示
|

6. 后端支持java吗?

支持javapythongo以及.net等,接入的学习成本是有的,整体对于开发而言,接入配置问题不大。

7. 前端的技术架构或技术栈有兼容性吗?

目前不论是mpa还是spa,不论是ssr、还是csr,亦或是vuereactjQuery等,都支持,但针对不同架构,需要选择接入的场景。

8. 还支持哪些场景?

支持的场景很多,比如:

  • 线上告警的故障定位
  • 开发、测试环境的bug调试
  • 用户行为的追踪与回放
  • 性能瓶颈的查找与性能提升

9.有关请求耗时占比,能更详细的举个例子吗?

我们以后端为例,看到db_create这个接口:

网络异常,图片无法展示
|

这些数据是如何统计得出的呢?感兴趣的同学可以查看下图:

网络异常,图片无法展示
|

其中每个部分的计算原理如下:

Queueing(队列)耗时 = Duration - First Byte - Download  
First Byte(首包)耗时 = responseStart - domainLookupStart  
Download(下载)耗时 =  responseEnd - responseStart
复制代码

更深入的技术内容,我将在今后的文章继续为大家整理。

综上所述

可观测性切入点很多,聪明的团队会观测;可观测性是研发质量的试金石,是企业城墙的基石,用好可观测性,能更多的了解系统,扩宽业务。

本文由观测云高级产品技术专家刘刚和交付工程师 苏桐桐共同撰写,其中所有截图及数据,均来自模拟数据,此外也欢迎一起探讨技术和业务。

参考词汇

  • adminMongo:mongo数据库管理平台
  • rum: 真实用户体验
  • apm: 应用性能管理
  • metrics:指标
  • logs:日志
  • trace:链路
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
存储 缓存 固态存储
Intel PMEM的使用经验和指南
作为一种Persistent Memory设备,同时也是第一款可扩展的商用NVDIMM,英特尔Optane DIMM (dual In-line memory module) 设备的性能介于传统持久性存储介质和内存之间,它的出现将有助于扩展内存容量,或提供低延迟持久性存储设备。本文主要介绍,后者使用方式下的介质的性能特点和使用指南。 本文内容主要来自于“An Empirical Guide to the Behavior and Use of Scalable Persistent Memory (FAST 20)”,加上本人的一些要点提炼和批注。
9274 2
Intel PMEM的使用经验和指南
|
存储 数据库 索引
Python新手常见问题一:列表、元组、集合、字典区别是什么?
本文针对Python编程新手常遇到的问题,详细阐述了列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)这四种数据结构的核心区别。列表是一种有序且可变的数据序列,允许元素重复;元组同样有序但不可变,其内容一旦创建就不能修改;集合是无序、不重复的元素集,强调唯一性,主要用于数学意义上的集合操作;而字典则是键值对的映射容器,其中键必须唯一,而值可以任意,它提供了一种通过键查找对应值的有效方式。通过对这些基本概念和特性的对比讲解,旨在帮助初学者更好地理解并运用这些数据类型来解决实际编程问题。
4190 1
Vue3级联选择(Cascader)
这是一个可定制的级联选择器组件,支持多级下拉选项。主要属性包括:数据源、文本字段、值字段、后代字段、占位符文本、选择行为、间距、宽度、高度、禁用状态、清除功能、搜索功能及过滤函数等。组件可根据需求灵活配置,并支持动态更新与事件回调。在线预览和详细示例可见[这里](https://themusecatcher.github.io/vue-amazing-ui/guide/components/cascader.html)。
1171 2
Vue3级联选择(Cascader)
|
人工智能 Java 程序员
一文彻底搞清楚电路中的焊接技术
最早的电路连接依赖导线、螺丝和螺母,如1920年代收音机内部构造所示。这种技术虽简单,但存在可靠性低、设备体积大、难以自动化等缺点。随着锡焊技术的出现,电子元件连接变得更加稳固,点对点构造随之普及。然而,这种方式仍面临维护难、标准化不足的问题。最终,电路板的引入使电路布局更加整洁,大大提高了可维护性和生产效率。 > 动手实践,买个电烙铁试试吧!
288 0
|
弹性计算 负载均衡 安全
企业业务上云经典架构方案整体介绍
本次课程由阿里云产品经理晋侨分享,主题为企业业务上云经典架构。内容涵盖用户业务架构现状及挑战、阿里云业务托管经典架构设计、方案涉及的产品选型配置,以及业务初期如何低门槛使用。课程详细介绍了企业业务上云的全流程,帮助用户实现高可用、稳定、可扩展的云架构。
590 0
|
数据可视化
如何使用四分位距方法来识别数据中的异常值?
如何使用四分位距方法来识别数据中的异常值?
|
存储 安全 异构计算
阿里云服务器2核4G、4核8G、8核16G配置最新收费标准及活动价格参考
2核4G、4核8G、8核16G配置的云服务器处理器与内存比为1:2,阿里云个人和普通企业用户在购买云服务器时通常比较喜欢选择2核4G、8核16G、4核8G等配置,这些配置既能满足各种图文类中小型网站和应用又能满足企业网站应用、批量计算、中小型数据库系统等场景,2核4G配置适合新手入门或初创企业,4核8G与8核16G兼具成本与性能优势,适合通用场景,本文介绍这些配置的最新购买价格,包含原价收费标准和最新活动价格。
1343 0
阿里云服务器2核4G、4核8G、8核16G配置最新收费标准及活动价格参考
|
数据采集 算法 数据可视化
阿里云百炼开发者评测
阿里云百炼是一站式大模型开发平台,具有以下特点: 知识检索应用:搭建智能问答助手需经历数据准备、知识库建立、应用创建与配置、测试与优化四步,存在数据质量、索引构建、问答效果调优等困难,建议加强数据预处理、优化索引构建机制并加强产品支持和社区建设。 模型训练:通过数据准备、调优等操作提升模型问答效果,控制台操作指引清晰,但可增加更多行业模板并优化模型训练界面。 流程管理功能:通过自定义业务流程对接智能体应用满足场景需求,使用效果较好,但存在部分参数设置不明确的问题,建议预制系统模板方便用户学习。整体上,百炼功能全面,但在细节和用户体验方面有待改进。
751 1
|
人工智能 测试技术 API
[译][AI OpenAI-doc] 速率限制
速率限制是我们的API对用户或客户在指定时间段内访问我们服务的次数施加的限制。速率限制是API的一种常见做法,有助于防止对API的滥用或误用,并确保每个人都能公平地访问API。本文介绍了速率限制的原因、工作方式以及如何处理速率限制错误。
|
Java 监控
用java代码实现三菱PLC与上位机的连接
"初学者入门Java编程,开始探索代码世界。学习基础语法、类、对象及异常处理,逐步构建程序思维。#Java学习之路"
887 1