Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析

news2025/5/11 13:49:24

1. 产品定位

Ease Monitor 有如下的产品定位:

关注于整体应用的SLA。 主要从为用户服务的 API 来监控整个系统。

关联指标聚合。 把有关联的系统及其指示聚合展示。主要是三层系统数据:基础层、平台中间件层和应用层。

快速故障定位。 对于现有的系统来说,故障总是会发生的,而且还是会频繁发生。故障发生不可怕,可怕的是故障的恢复时间过长。所以,快速的定位故障就相当关键。

换句话说,Ease Monitor 主要是为以下两个场景所设计的:

“体检”

容量管理。 提供一个全局的系统运行时数据的展示,可以让工程师团队知道是否需要增加机器或是其它资源。

性能管理。可以通过查看大盘,找到系统瓶颈,并有针对性的优化系统和相应代码。

“急诊”

定位问题。可以快速的暴露并找到问题的发生点,帮助技术人员诊断问题。

性能分析。当出现不预期的流量提升,可以快速的找到系统的瓶颈,并可以帮助开发人员深入代码。

下图是一个很常见的情况:
在这里插入图片描述

2. 设计原则

Ease Monitor 其实是一种 APM - Application Performance Management,但是又不同于传统意议上的 APM 软件。

主要有下面两个方面影响了 Ease Monitor 的设计:

不同的工程视角。我们知道,在很多公司有不同的工程师角色,如:开发、应用运维、系统运维等等,他们会站在不同的地方来看一个系统,例如:

经理们主要关心的是整个系统的运行健康情况,不太关注细节。
软件开发工程师主要关注应用的运行状态。
运维人员主要关注底层和各种中间件的运行状态。
不重新发明轮子。重新开发一个监控就像是重新发明一个轮子,因为这个世界上已经有很多的监控系统了。所以,我们不想重新发明轮子。我们希望我们的 Ease Monitor 是一个可以足够兼容现有的主流的监控软件,并且可以像乐高玩具一样,可以做到其中的组件随意替换随意剪裁的效果。

所以,Ease Monitor 有如下的设计原则:

使用主流的技术。 我们希望我们使用的技术是绝大多数的工程师团队熟悉并可以运维的。

组件都可以被替换和被裁剪。 因为不同的场景有不同的需求和业务形态,所以,设计必需做到有足够的灵活度可以容易地替换或裁剪相当的组件。

跟踪用户请求。 可以在一个分布式的系统,从端到端跟踪整个用户的调用。

引导工程能力。 好的一个监控至少可以让工程师做两件事:1)快速地定位故障,2)容易的做出工程上的决定。

驱动自动化。 一个好的监控系统可以和现有的集群控制系统关联起来,做自动化运维。如:自动化扩展,或是自动化的资源或流量调度。

全栈监控。我们必需对三层软件进行监控:

应用服务层。 在这一层上,主要是对应用服务的关键指针进行监控,如:HTTP request, Status code, Throughput, Latency …等等。
平台中间件层。 在这一层上,主要是参考相关的中间件进行监控,如:Nginx, Redis, Tomcat, Kafka, MySQL… 等等。
基础层。 在这一层上,主要是对相关主机的操作系统进行监控,如:CPU, Memory, Disk, Network … 等等。
自定义的仪表盘。 不同的用户有不同的视角,所以,用户可以定义自己感兴趣的仪表盘。

3. 系统架构设计

在这里插入图片描述
上图是整个 Ease Monitor 的架构图所用到的技术。

数据采集端
基础层和中间件指标采集 - Telegraf
日志采集 - Filebeat 和 Fluentd
Java Agent - EaseAgent (我们自研并开源了这个组件 - Apache 2.0许可证。详见 “技术细节” 一节)
数据处理管线
数据总线 - Apache Kafka
数据 ETL - Logstash
数据存储 - ElasticSearch
报警数据 - InfluxDB
报警触发和报警处理 - 我们自研了这个组件。详见 “技术细节” 一节
Web前端控制台 - 我们自研了这个组件。详见 “技术细节” 一节
对于这个技术架构,其中的技术都是主流的成熟的,其被设计于可以监控一个规模很大的集群,而且其中的组件是可以被灵活的裁剪和取代。

4. 系统要求和限制

目前,Ease Monitor 只支持如下的系统环境。

Java 语言系的应用。Java的版本得 >= 1.6
Linux 操作系统。

5. 功能展示

5.1 总体仪表板

总体仪表板主要展示了系统整体的健康和容量情况。
在这里插入图片描述

5.2 服务 SLA 日报

下图展示了服务的SLA报告,可以是全站的,也可以是单个服务的
在这里插入图片描述

5.3 面向服务的大盘

下图整合了服务的流量,服务的上下游,服务的TOP API,最慢的Tracing,相关资源使用指示的整体大盘
在这里插入图片描述

5.4 调用链跟踪

下图展示了一个整体调用拓扑图。
在这里插入图片描述
下图展示了一个请求在整个系统中的服务调用链以及相应的时间分布。
在这里插入图片描述

5.5 系统请求排名列表

系统请求排名列表列出了系统比较耗时的请求以及相关的请求热点。

Nginx 请求排名列表
在这里插入图片描述
JDBC 数据库操作排名列表
在这里插入图片描述

5.6 可自由定制的仪表盘

基础操作系统的仪表盘
在这里插入图片描述

6. 技术细节

6.1 EaseAgent

EaseAgent 是一个使用 Instrument API开发的 Java Agent,使用字节码增强的方式对应用的性能和调用链数据进行收集。
它针对使用Spring Boot的代码做了大量的增强。
兼容主流监控生态系统,如Kafka、ElasticSearch、Prometheus、Zipkin等。
EaseAgent 收集基本指标和服务跟踪日志,对性能分析和故障排除很有帮助。

6.1.1 设计原则

它遵从微服务架构设计,从服务的角度收集数据。
以无侵入的方式对应用程序字节码进行增强。
轻量级并且对CPU、内存和 I/O 资源使用率非常低。
对Java应用程序是安全可靠的。

6.1.2 兼容性与要求

记录性能数据和调用链日志
JDBC 4.0
HTTP Servlet、HTTP Filter
Spring Boot 2.2.x: WebClient 、 RestTemplate、FeignClient
RabbitMQ Client 5.x、 Kafka Client 2.4.x
Jedis 3.5.x、 Lettuce 5.3.x
记录访问日志
HTTP Servlet、HTTP Filter
Spring Cloud Gateway
支持在应用的日志中增加traceId and spanId。
提供健康检查的API。
提供应用就绪检查的API

6.1.3 采集数据种类

服务器收到 HTTP 请求的 Metric。
JDBC Connection 获取和 Statement 执行的 Metric, 以及调用关联信息(如 URL,SQL等)
兼容 Zipkin 协议的分布式调用链数据,包括:
HTTP 接收 与 发送
SQL 执行
Redis 访问

6.1.4 安装与使用

从 release 下载 easeagent.jar 后, 添加如下 Java 运行时参数:

-javaagent=easeagent.jar

6.2 事件报警

当前,Ease Monitor 的事件报警支持如下的用户案例。

指标 - 持续时间 - 阈值。 当一个指标在一个时间段内持续超过所配置的阈值,引发报警。如:在两分钟内 cpu 利用率持续超过 80% 。

指标 - 持续时间 - 百分比分布 - 阈值。 当一个指标在一个时间段间的某个百分比分布超过所配置的阈值,引发报警。如:99%的请求响应时间在两分钟内超过 300ms (即:P99)

指标 - 持续时间 - 函数 - 阈值。 支持一些简单的函数计算 Sum/Average/Min/Max/Count。如:在两分钟内 JVM 的 GC 次数超过所配置的阈值(使用Sum函数)。

日志 - 持续时间 - 关键词 - 匹配次数。监控日志中某个关键词在一个时间段内出现的次数超过某个数量,引发报警。关键词支持正规表达式匹配。

6.3 数据存储格式

下面是 Ease Monitor 在 ElasticSearch 中的数据存储格式。

6.3.1 索引格式

在这里插入图片描述

6.3.2 文档类型格式

我们有如下的文档类型的存储格式:

Index mapping template

ease-monitor-metrics-* - 用于存储时序类型的指标数据。
ease-monitor-aggregate-metrics-* - 用于存储 Java Agent 所采集的数据。
ease-monitor-logs-* - 用于存储日志数据。
Category

application - 表明是应用层的数据种类。
platform - 表明是平台层中间件的数据种类。如:nginx, redis, tomcat, mysql, kafka … 等等。
infrastructure - 表明是基础层的数据种类。如: CPU, MEM, DISK, NET 指标。
Document Type

组件名称
组件的指标和统计名。
相关示例:
在这里插入图片描述
在这里插入图片描述

文档

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

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

相关文章

科研深度学习:如何精选GPU以优化服务器性能

GPU在科研深度学习中的核心价值 在科研深度学习的范畴内,模型训练是核心环节。面对大规模参数的模型训练,这往往是科研过程中最具挑战性的部分。传统CPU的计算模式在处理复杂模型时,训练时间会随着模型复杂度的增加而急剧增长,这…

补题 R7

C 赛时想的思路是正确的,是一个贪心的题目,应该先不断的让右边的老鼠入队。 赛时的代码: 不清楚 如何模拟 毛移动和老鼠移动的过程。 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) …

ROS机器视觉入门:从基础到人脸识别与目标检测

前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…

启动前后端分离项目笔记

一、项目 首先可以在各大开源软件拿取一个项目,以下项目是在gitee上获取 二、准备工作 配置JDK环境,node.js环境,安装vue脚手架工具以及maven环境 三、前端项目启动 在前端目录下安装依赖 npm install 如果报错可能是因为权限不够&#…

Spring |(二)IOC相关内容 | bean

文章目录 📚bean基础配置🐇bean的id和class🐇bean的name属性🐇bean作用范围scope配置🐇bean基础配置小结 📚bean实例化🐇构造方法实例化(常用)🐇静态工厂实例…

ffmpeg视频滤镜:替换部分帧-freezeframes

滤镜描述 freezeframes 官网地址 > FFmpeg Filters Documentation 这个滤镜接收两个输入&#xff0c;然后会将第一个视频中的部分帧替换为第二个视频的某一帧。 滤镜使用 参数 freezeframes AVOptions:first <int64> ..FV....... set first fra…

Ubuntu24虚拟机-gnome-boxes

推荐使用gnome-boxes&#xff0c; virtualbox构建失败&#xff0c;multipass需要开启防火墙 sudo apt install gnome-boxes创建完毕&#xff5e;

Vscode写markdown快速插入python代码

如图当我按下快捷键CRTLSHIFTK 自动出现python代码片段 配置方法shortcuts’ 打开这个json文件 输入 {"key": "ctrlshiftk","command": "editor.action.insertSnippet","when": "editorTextFocus","args&…

docker搭建私有仓库,实现镜像的推送和拉取

1.拉取docker仓库镜像 docker pull registry 2.启动registry容器 docker run -d registry 3.查看当前仓库中存在的镜像&#xff08;一&#xff09; curl -XGET http://192.168.111.162: 5000/v2/_catalog 192.168.111.162 部署docker仓库宿主机的ip 5000 部署docker仓库映射到宿…

基于docker进行任意项目灵活发布

引言 不管是java还是python程序等&#xff0c;使用docker发布的优势有以下几点&#xff1a; 易于维护。直接docker命令进行管理&#xff0c;如docker stop、docker start等&#xff0c;快速方便无需各种进程查询关闭。环境隔离。项目代码任何依赖或设置都可以基本独立&#x…

点餐管理系统设计与实现(Java+SpringBoot+MySql)

目录 第1章 绪论 1.1选题动因 1.2目的和意义 1.3论文结构安排 第2章 开发环境与技术 2.1 MySQL数据库 2.2 Tomcat 介绍 2.3 vue技术 2.4 SpringBoot框架 第3章 系统分析 3.1可行性分析 3.1.1操作可行性分析 3.1.2经济可行性分析 3.1.3技术可行性分析 3.2系统流程…

特征交叉-MaskNet文章总结代码实现

MaskNet 这个模型是微博21年提出的&#xff0c;23年twitter(X)开源的推荐系统排序模块使用的backbone结构。 核心思想是认为DNN为主的特征交叉是addictive&#xff0c;交叉效率不高&#xff1b;所以设计了一种multiplicatvie的特征交叉 如何设计muliplicative特征交叉呢&#x…

(7) 探索Python函数的无限可能:从递归到Lambda的奇妙之旅

欢迎进入Python编程的奇幻世界!在这个课程中,我们将一起探索编程的乐趣,通过生动有趣的方式,培养编程的逻辑思维和创造力,该课程适合有一定基础的中学及以上学生及成年人。 以下是我们课程的大纲: 【Python:趣味编程,探索未来】 目录 1. 前言2. 认识我们的“魔法咒语”…

算法日记 32 day 动态规划(完全背包)

同样是背包问题&#xff0c;但01背包和完全背包是两个类型的问题。 完全背包&#xff1a; 完全背包与01背包的区别在于物品的个数是否是无限的。除此之外&#xff0c;在解决01背包的时候dp的背包遍历的顺利是倒序&#xff0c;为的是保证物品只被添加一次&#xff0c;而完全背包…

实用功能,觊觎(Edge)浏览器的内置截(长)图功能

Edge浏览器内置截图功能 近年来&#xff0c;Edge浏览器不断更新和完善&#xff0c;也提供了长截图功能。在Edge中&#xff0c;只需点击右上角的“...”&#xff0c;然后选择“网页捕获”->“捕获整页”&#xff0c;即可实现长截图。这一功能的简单易用&#xff0c;使其成为…

计算机网络:应用层知识点概述及习题

网课资源&#xff1a; 湖科大教书匠 1、概述 习题1 1 在计算机网络体系结构中&#xff0c;应用层的主要功能是 A. 实现进程之间基于网络的通信 B. 通过进程之间的交互来实现特定网络应用 C. 实现分组在多个网络上传输 D. 透明传输比特流 2 以下不属于TCP/IP体系结构应用层范畴…

【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感

本文将介绍如何使用LSTM训练一个能够创作诗歌的模型。为了训练出效果优秀的模型&#xff0c;我整理了来自网络的4万首诗歌数据集。我们的模型可以直接使用预先训练好的参数&#xff0c;这意味着您无需从头开始训练&#xff0c;即可在自己的电脑上体验AI作诗的乐趣。我已经为您准…

鸿蒙网络编程系列50-仓颉版TCP回声服务器示例

1. TCP服务端简介 TCP服务端是基于TCP协议构建的一种网络服务模式&#xff0c;它为HTTP&#xff08;超文本传输协议&#xff09;、SMTP&#xff08;简单邮件传输协议&#xff09;等高层协议的应用程序提供了可靠的底层支持。在TCP服务端中&#xff0c;服务器启动后会监听一个或…

基于 SpringBoot 的作业管理系统【附源码】

基于 SpringBoot 的作业管理系统 效果如下&#xff1a; 系统注册页面 学生管理页面 作业管理页面 作业提交页面 系统管理员主页面 研究背景 随着社会的快速发展&#xff0c;信息技术的广泛应用已经渗透到各个行业。在教育领域&#xff0c;课程作业管理是学校教学活动中的重要…

怎么只提取视频中的声音?从视频中提取纯音频技巧

在数字媒体的广泛应用中&#xff0c;提取视频中的声音已成为一项常见且重要的操作。无论是为了学习、娱乐、创作还是法律用途&#xff0c;提取声音都能为我们带来诸多便利。怎么只提取视频中的声音&#xff1f;本文将详细介绍提取声音的原因、工具、方法以及注意事项。 一、为什…