【监控】大型系统高可用监控体系建设

news/2025/1/19 17:45:08/文章来源:https://www.cnblogs.com/o-O-oO/p/18677767

监控体系是稳定性建设的必备措施,它可以分为多个子系统:异常的智能监控系统、调用链路跟踪系统、端到端的链路染色系统、业务数据轨迹重现系统、业务数据对账系统等。

一个有效的监控体系可以帮助快速识别和响应问题,从而最小化服务中断的风险。

一、异常的智能监控系统

利用监控获取的基础数据,动态计算出实时异常指标范围。智能监控系统将系统内多个异常指标做关联、系统之间做关联、异常和系统变更事件做关联;用户可以给异常值反馈和打标,提供完整的异常特征如机房、事件段、历史上是否出现过以及异常堆栈等,如下图所示。

这个智能监控系统可以将数据很好地关联在一起,可以快速发现整个调用链路上的异常点。

二、调用链路跟踪系统

调用链路跟踪系统可以记录一次调用所涉及的所有系统和数据库,以及每个调用节点的 OPS、RT 等,如下图所示。

它的实现原理比较简单:每个请求中带有一个trace 信息,把 trace 一直携带到该请求的所有调用链路上,打印到日志中,并通过日志中的trace 关联信息形成一个调用栈。

链路跟踪系统还可以实现链路染色功能,可以根据用户ID或者商品 ID,记录用户端的所有操作,并上传(request、response),和服务端的整个调用链路做关联。

如下图所示,服务端把染色标记推送给 App,App将染色标记关联到某个用户然后 App 会记录下这个用户的所有操作记录日志(包括向服务端发送的请求 ),调用服务端的请求也会带上特定的标识,在服务端通过链路追踪系统,把这个请求的所有依赖都记录下来,同时 App 也会将端上用户的操作记录上传到服务端,这样染色系统就同时有了 App 用户的操作日志和服务端的链路调用日志,就可以知道被染色的用户的整个操作是否有异常了,便于排查疑难问题。

三、业务数据轨迹重现系统

所谓业务数据轨迹重现就是可以追踪数据的所有变更记录,了解是谁在哪台机器上调了哪个接口、在哪个时间点从某个数据变更成另一个数据的完整记录。它的逻辑结构如下图所示。

数据轨迹系统主要是记录写操作的操作日志,它是如何实现的呢?答案是依赖中间件。我们在中间件里可以添加一些钩子,把钩子封装在 Client 中,通过配置系统推送一些规则,要控制哪些请求需要记录日志,如在给更新商品信息这个接口需要记录下请求接口的参数信息,那么 RPC 中间件就会打印这些请求的日志,然后通过上面介绍的链路追踪系统把这次请求加上标记,一直追踪到数据库上,所经过的每个系统都会记录此数据的变更记录,在数据库上是数据的最终变化。这里需要另外一个中间件,它需要解析数据库的 binglog、感知数据的 update 以及 delete 的操作,并记录下变更之前和之后的数据,最终这些变更记录都会写到 HBase 里,便于查询和检索。例如可以按照商品维度去查询一段时间内对商品都做过哪些修改操作,这些操作都有详细的操作记录,如果发生错误也可以追溯原因。

按照这个思路,可以实现商品的快照功能。假如你购买的商品包含卖家的承诺在你下单后,卖家删除了该承诺,这会使订单关联一个商品的变更记录,通过它可以知道卖家在什么时间点修改了商品的描述信息。

四、数据对账系统

数据对账系统在很多场景下都很有用,例如在跨机房数据复制的场景下,可以分别采样一定时间内、两边数据库的数据进行比较,了解是否有超出预期的延迟、是否有丢失数据等问题;在需要跨系统状态同步的场景下也可以对账比较,例如确认打款和退款后,主订单打款金额和退款金额之和要等于总金额。
数据对账系统的原理如下图所示。首先需要对接各个数据源,采集实时数据( 数据采集一般是通过接受业务的异步消息以及监听数据库的变更消息等方式获取的)通过数据转换把原始数据转化成需要的数据格式以适配写好的规则,并匹配执行。执行规则一般就是对数据进行校验,如果发现校验结果错误就会触发报警或者转到数据订正系统去订正。

此系统有两个最关键的部分:一是数据的采集部分。这部分最好与业务系统解耦而且要便于扩展--便于实时增加新的数据采集源头;二是要能够比较方便地完成规则的编写和下发。规则一般用动态语言编写,用热加载的方式执行。如果需要比较的数据量较大或者较复杂,在执行规则部分还可以引入流式计算来完成。

五、以下是构建高效高可用监控体系的详细步骤

1. 确定监控目标与指标

定义关键性能指标(KPIs):如响应时间、吞吐量、错误率等。

设定服务水平目标(SLOs):明确可接受的服务水平,例如99.9%的可用性。

2. 架构设计与组件选择

分布式架构:采用分布式监控架构,以保证监控系统的高可用性和扩展性。

选择监控工具:

Prometheus:适用于收集和聚合时序数据,支持多种数据源。

Grafana:提供强大的可视化功能,可以创建自定义仪表盘。

Zabbix:集成度高,适合中小型企业,拥有广泛的插件支持。

Elastic Stack (ELK):包括Elasticsearch, Logstash, Kibana,用于日志管理和分析。

Datadog 或 New Relic:云原生监控解决方案,易于部署和管理。

3. 数据采集

基础设施监控:CPU、内存、磁盘I/O、网络流量等资源使用情况。

应用性能监控(APM):跟踪应用程序内部的行为,如方法调用次数、数据库查询性能等。

业务逻辑监控:关注核心业务流程的关键指标,如订单处理成功率。

用户行为监控:通过前端埋点等方式捕捉用户体验的数据,如页面加载速度、点击流等。

4. 实时告警机制

阈值设置:根据历史数据和业务需求合理配置告警阈值。

智能告警:利用机器学习算法自动调整告警策略,减少误报。

多渠道通知:通过邮件、短信、即时通讯工具等多种方式发送告警信息给相关人员。

5. 日志管理和异常检测

集中式日志存储:所有组件的日志统一收集到中心化的日志管理系统中。

日志解析:使用正则表达式或其他解析技术将非结构化日志转换为结构化数据。

异常模式识别:基于规则或机器学习模型检测日志中的异常模式,及时预警潜在问题。

6. 自动化与自我修复

自动化运维脚本:编写脚本来执行常见的维护任务,如重启服务、清理缓存等。

自我修复能力:结合容器编排平台(如Kubernetes),实现故障节点的自动替换和服务的滚动更新。

7. 用户体验与反馈

可视化展示:构建直观的监控界面,帮助团队成员快速理解系统状态。

报告生成:定期生成监控报告,总结系统的健康状况和改进点。

用户反馈机制:建立渠道让最终用户能够提交关于系统表现的意见和建议。

8. 安全与合规性

访问控制:严格限制对监控系统的访问权限,确保只有授权人员可以查看敏感信息。

数据加密:在传输和存储过程中对监控数据进行加密保护。

审计追踪:记录所有的操作日志,便于事后审查和责任追究。

9. 持续优化

迭代改进:根据实际运行情况不断调整和完善监控策略。

新技术引入:关注行业动态和技术发展趋势,适时引入新的监控技术和工具。

通过上述步骤,可以构建起一个全面且高效的高可用监控体系,不仅能够实时监测系统的健康状态,还能有效预防和快速响应可能出现的问题,保障大型系统的稳定性和可靠性。

原创 李峰 漫谈测试

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两款开源的微信对话生成器,做成了在线小工具

如果你也想在社交媒体上、视频创作中或者日常娱乐里,展现出与众不同的一面,那么微信对话生成器绝对是你不可错过的好帮手。今天,就让我们一起走进3M万能在线工具箱https://3m.panziye.com中的两款微信对话生成器,看看它们如何为我们的创意插上翅膀。 微信对话在线生成器 这…

31. 绘图技术

一、QPainter绘图绘图是指在绘图设备(窗口、控件、图像、打印机等)上将用户构思出的图形绘制出来,图形包括点、线、矩形、多边形、椭圆、文字及保存到磁盘上的图像等。可以对绘制的图形进行处理,如给封闭的图形填充颜色。绘图设备是从 QPaintDevice 继承的类,包括继承自 Q…

Go 反射 の 应用场景

两年前曾经写过一篇博客,是关于反射基本概念的 Go 反射 の 基本概念,之后对其再也没有更深入的学习,主要因为 反射主要应用在一些基本库中,而在平时的项目开发中几乎用不到。本文结合一个sql构造器的应用案例,深入的了解一下反射的应用场景。 什么是反射射就是程序在运行时…

中考英语优秀范文-热点话题-传统文化-010 Mid-Autumn Festival 中秋节

1 写作要求 中秋节是我国的传统节日,随着经济的发展和时代的变迁,中秋节依然在我们国人心中有着重要的位置。在中秋节,人们望着天上的明月,守望膜拜,吃着月饼,寄托情怀,这个节日更多地被赋予了思念亲人的色彩,祈求团圆和幸福。过去的中秋节有没有特别让你难忘的事情发生…

AtCoder Beginner Contest 389

A - 9x9 题意一位数的乘法思路模拟代码点击查看代码 #include <bits/stdc++.h> using namespace std; #define int long long typedef pair<int, int> pii;const int mxn = 1e6 + 5;void solve() {string s;cin >> s;cout << (s[0] - 0) * (s[2] - 0) …

2025 开局,我的身体给我上了一课

2025年,我被身体狠狠地上了一课!最终不得不放弃?这不仅是一个关于放弃的故事,更是一个关于接受和改变的过程背景 说实话,时间这东西真的太快了,一年就过去了。 每到这个时候,大家都会写年终总结:这一年,做了什么?也许是因为找不到清晰的答案,干脆就摆烂,都懒得写了…

VS Code远程连接服务器

VS Code远程连接服务器 总体分为两步:在远程服务器安装SSH协议实现软件OpenSSH 在VS Code安装Remote-SSH插件,然后利用该插件登录远程服务器在远程服务器安装SSH协议实现软件 查看是否安装了SSH协议实现软件 dpkg -l | grep ssh如果没有安装,可以通过以下命令安装OpenSSH的客…

Prim最小生成树算法

Prim最小生成树算法 首先给出最小生成树的概念:把给定的无向图中转换成一棵树,且树的边权和最小 Prim算法基于贪心的思想,每次在图中选取距离最小生成树最近的点加入树 首先给出朴素的模板算法: struct edge{int v,w; };int n,m; vector<edge> e[5010]; int dis[5010…

同余前缀和

1 #include<iostream>2 using namespace std;3 4 /*5 原题地址:https://www.luogu.com.cn/problem/P31316 农夫约翰的 \( N \) 头奶牛站在一排,就像它们时不时做的那样。每头奶牛都有一个唯一的整数ID号,7 这样农夫约翰可以区分它们。农夫约翰想要给一组连…

1.MySql基础架构之SQL语句的执行

1.MySQL数据库的整体架构(i)连接器:连接器负责与客户端建立连接,获取权限、维持和管理连接。连接命令中的mysql是客户端工具,用来建立服务端连接。在完成经典的TCP握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。 ​ 如果用户名密码认证通过…

ATF引导启动流程整理-Part2:BL1引导启动流程整理

接上一章的介绍,本文详细整理一下 BL1 阶段的流程 Ch3: ATF启动流程 上面一章简单的介绍了 ATF的隔离和划分,下面就介绍一下使用 ATF 初始启动的流程。ARM v8的启动流程包含多个阶段,典型的官方定义的标志阶段包括 BL1、BL2、BL31、BL32、BL33,根据不同需求这些阶段可以添加…

推荐一款非常好用的在线 SSH 管理工具

前言 SSH工具在远程连接、文件传输、远程管理和增强安全性等方面发挥着重要作用,是我们开发人员和系统管理员不可或缺的工具。今天大姚给大家推荐一款非常好用的在线 SSH 管理工具:Xterminal。工具介绍 Xterminal一个好用的在线SSH、SFTP工具,支持跨平台(Windows、Linux、M…