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

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.rhkb.cn/news/476890.html

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

相关文章

Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找

目录 一,数组翻转 二,冒泡排序 三,二分查找(一尺之锤,日取其半,万世不竭) 一,数组翻转 1.概述:数组对称索引位置上的元素互换,最大值数组序号是数组长度减一 创建跳板…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare(金融数据库)入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

网络编程(JAVA笔记第三十八期)

p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解 目录 网络编程概念网络编程三要素IPInetAddress类端口号协议 UDP协议UDP通信程序(发送数据)UDP通信程序(发送数据)使用UDP写聊天室项目UDP的通信方式 TCP协议通过TCP协议实现多发多收通…

Bokeh实现大规模数据可视化的最佳实践

目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…

IDEA2023 SpringBoot整合MyBatis(三)

一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…

PVE的优化与温度监控(二)—无法识别移动硬盘S.M.A.R.T信息的思考并解决

前情提要:空闲2.5英寸机械硬盘,直接放到PVE上测试NAS 使用,通过SATA线的方式让小主机不太美观,并且失去了前期调试的安全性。购入移动硬盘盒,缺点,USB 连接,会失去一些特性。比如本文中遇到的问…

记录下jekins新建个前端部署配置项

1 新建个item 2 输入项目名称,选择个新的工程或 或者搜个已存在的现有模板 3 添加一些描述 4 (可选)配置下构建历史保存情况 5 限制下构建节点和选择gitlab或者github 6 写下git仓库地址、账号密码以及分支 7 选择构建工具node以及版本 8 构建…

文件管理 II(文件的物理结构、存储空间管理)

一、文件的物理结构 文件实际上是一种抽象数据类型,我们要研究它的逻辑结构、物理结构,以及关于它的一系列操作。文件的物理结构就是研究文件的实现,即文件数据在物理存储设备上是如何分布和组织的。同一个问题有两个方面的回答:…

大数据新视界 -- 大数据大厂之 Impala 性能优化:跨数据中心环境下的挑战与对策(上)(27 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

利用 GitHub 和 Hexo 搭建个人博客【保姆教程】

利用 GitHub 和 Hexo 搭建个人博客 利用 GitHub 和 Hexo 搭建个人博客一、前言二、准备工作(一)安装 Node.js 和 Git(二)注册 GitHub 账号 三、安装 Hexo(一)创建博客目录(二)安装 H…

ABAP开发-CO的底层表-物料价格分析CKM3

系列文章目录 文章目录 系列文章目录[TOC](文章目录) 前言一、物料分类账与CKM3二、CKM3界面分析三、CKM3的主要功能1、物料价格分析2、成本构成分析3、价格差异分析4、期间状态查看 四、物料分类账与CKM3的关系五、CKM3的底层表及数据支持1、核心数据表2、取数逻辑 总结 前言 …

汽车被追尾了怎么办?

今天开车上班的路上发生了一起4车追尾的交通事故,作为过来人我复盘了下交通追尾的处理过程。简述如下: 发生追尾后打双闪及时放置三角架,提醒后面车这里发生交通事故了 打122交警电话和自行拍下事故现场的远近照片。如果车子损伤严重或事故复…

了解Redis(第一篇)

目录 Redis基础 什么事Redis Redis为什么这么快 除了 Redis,你还知道其他分布式缓存方案吗? 说-下 Redis 和 Memcached 的区别和共同点 为什么要用Redis? 什么是 Redis Module?有什么用? Redis基础 什么事Redis Redis (REmote DIctionary S…

javascrip页面交互

元素的三大系列 offset系列 offset初相识 offset系列属性 作用 element.offsetParent 返回作为该元素带有定位的父级元素,如果父级没有定位,则返回body element.offsetTop 返回元素相对于有定位父元素上方的偏移量 element.offsetLeft 返回元素…

K8S + Jenkins 做CICD

前言 这里会做整体CICD的思路和流程的介绍,会给出核心的Jenkins pipeline脚本,最后会演示一下 实验/实操 结果 由于整体内容较多,所以不打算在这里做每一步的详细演示 - 本文仅作自己的实操记录和日后回顾用 要看保姆式教学的可以划走了&…

nvm安装node遇到的若干问题(vscode找不到npm文件、环境变量配置混乱、npm安装包到D盘)

问题一:安装完nvm后需要做哪些环境变量的配置? 1.打开nvm文件夹下的setting文件,设置nvm路径和安装node路径,并添加镜像。 root: D:\software\nvm-node\nvm path: D:\software\nvm-node\nodejs node_mirror: https://npmmirror.c…

shell脚本(五)

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

如何使用ChatGPT整理和收集论文实验数据?

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 使用ChatGPT整理和收集论文实验数据,需要通过一些具体的方法和提示词。以下几个步骤和技巧,告诉你如何借助ChatGPT更好地完成工作: 1. 数据格式化和…

PDF电子发票信息转excel信息汇总

PDF电子发票信息提取,支持将pdf发票文件夹下的剩所有发票,转为excel格式的信息,对于发票量比较大,不好统计,需要一个一个去统计的情况,可节省2个点以上的时间,一次下载,终身有效。 使…

小鹏汽车智慧材料数据库系统项目总成数据同步

1、定时任务处理 2、提供了接口 小鹏方面提供的推送的数据表结构: 这几个表总数为100多万,经过条件筛选过滤后大概2万多条数据 小鹏的人给的示例图: 界面: SQL: -- 查询车型 select bmm.md_material_id, bmm.material_num, bm…