【分布式系统】聊聊系统监控

对于分布式系统来说,出现故障的是常有的事情,如何在短时间内找到故障的原因,排除故障是非常重要的,而监控系统是就像系统的眼睛可以通过分析相关数据,进一步管理和运维整个分布式系统。

监控系统的的基本功能包含

  • 全栈监控
  • 关联分析
  • 跨系统调用的串联
  • 实时报警和自动处置
  • 系统性能分析

多层体系的监控

全栈监控其实就是三层监控

  • 基础层:监控主机和底层资源,比如CPU、内存、网络吞吐、磁盘I/O、硬盘使用等。
  • 中间层:中间件层的监控,网关层Nginx、缓存Redis、消息队列RabbitMQ、Kafka、数据层MySQL、Tomcat,Es等。
  • 应用层:监控应用层的使用,HTTP访问量,响应时间,返回码,调用链路分析,性能瓶颈,用户短监控,异常状态监控,异常指标数据监控等。

什么是好的监控系统

在这里插入图片描述
监控的指标化

  • 日志数据结构化
  • 监控数据格式标准化
  • 统一的监控平台
  • 统一的日志分析

如何作出好的监控

大多数系统监控做的并不到位,主要包含以下几点。

  • 1.监控数据是隔离开的,因为分工原因,开发、应用运维、各管各的,所以很多公司的监控系统是隔离的,比如基础层监控报警,运维只能发到大群里@相关业务人员查看。开发人员依赖的中间件系统出现问题,只能运维人员查看。
  • 2.监控的数据项太多,没有重点,指标太多等于没有重点没有信息。需要监控关键数据。

好的监控系统应该具备以下特征。

  • 关注整体应用的SLA,主要为用户服务的API监控整个系统。
  • 关联指标聚合,将基础层、中间层、应用层数据监控关联起来,和具体的机器绑定在一起。
  • 快速故障定位,出现故障不可怕,可怕的是不能快速定位故障,找到根本原因。导致故障恢复的时间过长,从而因为用户的稳定性。所以需要为分布式系统做一个用户请求跟踪的trace监控,整体的调用链路。

一个很好的说法就是,定时的体检,监控系统是否有问题,另一个就是出现问题进行急诊。

体检

容量管理,提供一个全局的系统运行时数据的展示,工程师可以知道是否需要增加机器或者其他资源。
性能管理,可以查看大盘,找到系统瓶颈,并针对性的优化系统和相应代码。

急诊

定位问题,可以快速找到问题的根本原因。快速修复。
性能分析,出现高并发流量时,可以快速排除问题。

如何做出一个好的监控系统

服务调用链跟踪
从用户请求的地方开始,通过调用链,将经过的网关、服务、相关数据中间件等服务进行串联起来,一旦出现问题,就可以快速定位问题在什么地方。
推荐使用Zipkin。java服务可以通过字节码注入方式做到无侵入式。
在这里插入图片描述
服务调用时长分布
当出现相应慢或者超时的时候,可以通过调用时长,定位出现问题的地方。
在这里插入图片描述
服务的Top N试图
通过邮件或者其他方式,发送每日的接口Top 10的接口。访问次数、耗时接口、热点排名等
在这里插入图片描述
数据库操作关联
记录相关数据库操作,可以通过字节码技术进行记录SQL操作的执行时间。
在这里插入图片描述
服务资源跟踪
我们的服务可能运行在物理机上,也可能运行在虚拟机里,还可能运行在一个 Docker 的容器里,Docker 容器又运行在物理机或是虚拟机上。我们需要把服务运行的机器节点上的数据(如 CPU、MEM、I/O、DISK、NETWORK)关联起来。

通过上述的方式,就可以将基础监控和业务联系起来,。
1.当一台机器挂掉是因为CPU或IO过高的时候,就可以马上知道影响到哪些对外服务的API。
2.当一个服务相应过慢的时候,可以通过关联JVM GC或者资源等 或者依赖服务定位问题。
3.SQL操作过慢的时候,可以定位影响的是哪个对外服务的API
4.消息队列拥塞的时候,可以马上知道对外影响服务的API。
在这里插入图片描述

工作中实际经验

对于接触的公司来说,基本都会进行基础层、应用层、中间层的系统监控。但是并没有将数据进行整合在一起。
当出现问题时,基本的手段就是。
1.当天是否有上线新功能,排除是否是新功能引发的BUG问题。
2.进行搜索 ERROR日志,是否存在大量异常。
3.数据库、中间件层是否出现问题。 数据库是否连接失败,网络操作。JVM相关。
4.系统的CPU、内存、磁盘、网络是否有问题,使用TOP、free -h等查看。
5.是否出现瞬间的高流量导致服务扛不住压力崩溃。
6.系统存在的BUG 导致的系统故障。
7.依赖下游系统出现故障,三方服务不正常等。

如果是逻辑问题,看测试环境能否复原出生产现象,从而进一步排除。

总体来说就是出现故障不可怕,即时解决,减少故障的恢复时间 最重要。

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

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

相关文章

如何从Pytorch中导出ONNX模型并使用它实现图像超分

前言 在本教程中,我们将介绍如何将 PyTorch 中定义的模型转换为 ONNX 格式,然后使用 ONNX 运行时运行它。 ONNX 运行时是面向 ONNX 模型的以性能为中心的引擎,可跨多个平台和硬件(Windows、Linux 和 Mac)以及 CPU 和 G…

Vue3 watch监听器

概览:watch监听器的定义以及使用场景。在vue3中的监听器的使用方式,watch的三个参数,以及进一步了解第一个参数可以是一个属性,也可以是一个数组的形式包含多个属性。 watch在vue3和vue2中的使用: vue3中&#xff1a…

opencv 30 -图像平滑处理01-均值滤波 cv2.blur()

什么是图像平滑处理? 图像平滑处理(Image Smoothing)是一种图像处理技术,旨在减少图像中的噪声、去除细节并平滑图像的过渡部分。这种处理常用于预处理图像,以便在后续图像处理任务中获得更好的结果。 常用的图像平滑处理方法包括…

JMeter 的使用

文章目录 1. JMeter下载2. JMeter的使用2.1 JMeter中文设置2.2 JMeter的使用2.2.1 创建线程组2.2.2 HTTP请求2.2.3 监听器 1. JMeter下载 官网地址 https://jmeter.apache.org/download_jmeter.cgi https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.2.zip 下载解…

系统架构设计师-软件架构设计(6)

目录 一、物联网分层架构 二、大数据分层架构 三、基于服务的架构(SOA) 1、SOA的特征 2、服务构件与传统构件的区别 四、Web Service(WEB服务) 1、Web Services 和 SOA的关系 五、REST(表述性状态转移) 六、ESB(…

【C++】STL——queue的介绍和使用、queue的push和pop函数介绍和使用、queue的其他成员函数

文章目录 1.queue的介绍2.queue的使用2.1queue构造函数2.2queue的成员函数(1)empty() 检测队列是否为空,是返回true,否则返回false(2)size() 返回队列中有效元素的个数 (3)front() 返…

如何在Visual Studio Code中用Mocha对TypeScript进行测试

目录 使用TypeScript编写测试用例 在Visual Studio Code中使用调试器在线调试代码 首先,本文不是一篇介绍有关TypeScript、JavaScript或其它编程语言数据结构和算法的文章。如果你正在准备一场面试,或者学习某一个课程,互联网上可以找到许多…

tdengine入门详解

TDengine是什么? TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计,基于C语言开发。 什么是时序数据库?时序数据产生…

C++ 对象数组

**数组元素不仅可以是基本数据类型,也可以是自定义类型。**例如,要存储和处理某单位全体雇员的信息,就可以建立一个雇员类的对象数组。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。 因此,和基…

Libevent开源库的介绍与应用

libeventhttps://libevent.org/ 一、初识 1、libevent介绍 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络&#xff…

Linux系统安装部署MongoDB完整教程(图文详解)

前言:本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程,我的服务器采用的是Centos7,在部署之前我重装了我的服务器,目的是为了干净整洁的给大家演示我是如何一步步的操作的,整体部署还是挺简洁&#xff0c…

如何维护你的电脑:提升性能和延长使用寿命

如何维护你的电脑:提升性能和延长使用寿命 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦&…

【机器学习】西瓜书习题3.3Python编程实现对数几率回归

参考代码 结合自己的理解,添加注释。 代码 导入相关的库 import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt from sklearn import linear_model导入数据,进行数据处理和特征工程 # 1.数据处理&#x…

Go语音介绍

Go语言介绍 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言,是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。 编译型语言——源代码编…

Redis 6.5 服务端的读取缓冲区和输出缓冲区执行源码

通篇全文都是不开启事务,不开启多线程,只有主线程去执行 借鉴 Redis源码与设计剖析 – 18.Redis网络连接库分析 客户端与集群之间数据的交互 IO多路复用与客户端、输出缓冲区和读取缓冲区之间的关系一、读取缓冲区1、新客户端连接时注册从socket读取事件…

【css】解决元素浮动溢出问题

如果一个元素比包含它的元素高&#xff0c;并且它是浮动的&#xff0c;它将“溢出”到其容器之外&#xff1a;然后可以向包含元素添加 overflow: auto;&#xff0c;来解决此问题&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head> <style>…

基于遗传算法的试题组卷(二)

实例讲解 一、准备工作 1、问题实体 问题实体包含编号、类型&#xff08;类型即题型&#xff0c;分为五种&#xff1a;单选&#xff0c;多选&#xff0c;判断&#xff0c;填空&#xff0c;问答&#xff0c; 分别用1、2、3、4、5表示&#xff09;、分数、难度系数、知识点。一…

C++ 智能指针

C 智能指针 为什么需要智能指针&#xff1f;auto_ptrunique_ptrshared_ptrweak_ptr智能指针的核心实现unique_ptr的简单实现Counter的简单实现share_ptr的简单实现weak_ptr简单实现 shared_ptr的线程安全性多线程无保护读写 shared_ptr 可能出现的问题make_shared()share_ptr/u…

卸载本机已安装的node.js(v.16.13.0版本)

因为要用多版本的node&#xff0c;准备安装一个nvm管理&#xff0c;所以需要先卸载掉原来安装的v.16.13.0版本。 记录一下卸载过程 1、在系统设置-应用里卸载node 妈蛋这样卸载报错。。找了下根本没有这个路径 那就只能最简单的方法了&#xff0c;全部删掉 1、删除node的安装…

IDEA用Gradle构建项目时,lombok插件无效的解决办法

Lombok 可用来帮助开发人员消除 Java 的重复代码&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;&#xff0c;比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File -> Settings ->…