应用性能管理:用户的使用体验应该如何监控?

news2024/11/30 2:36:29

目录

前言

一、什么是应用用性能管理

二、如何搭建 APM 系统

三、什么是Skywalking

一、Skywalking原理数据库

二、为什么Skywalking侵入性小

三、Skywalking Agent原理

四、Skywalking登录地址

五、Skyworking oap原理

六、Skywalking mysql

七、Skywalking版本选取

总结


前言

在生产环境中,经常有用户反馈创建订单失败,但是从服务端的监控报表来看,并没有什么明显的性能波动,从存储在Elasticsearch 里的原始日志中,甚至没有找到这次创建订单的请求。这有可能是客户端有Bug,或者网络抖动导致创建订单的请求并没有发送到服务端。

再比如,有些用户会反馈,使用长城宽带打开商品详情页面特别慢,甚至出现 DNS 解析失败的情况。那么,当我们遇到这类问题时,要如何排查和优化呢?

这里面涉及一个概念叫应用性能管理(Application Performance Management,简称APM),它的含义是:对应用各个层面做全方位的监测,期望及时发现可能存在的问题,并加以解决,从而提升系统的性能和可用性。


一、什么是应用性能管理

应用性能管理(Application Performance Management)是一个比较新的网络管理方向,APM 或应用程序性能监控使组织能够监控其关键业务应用程序的性能指标,在出现性能问题时及时接收警报,并生成定期性能分析报告。

APM 提供对应用程序性能的上下文洞察,使 IT 和 DevOps 管理员能够在应用程序与最终用户交互时管理可用性、性能和控制应用程序的行为。APM 工具还可以通过快速识别任何问题来帮助减少停机时间。这反过来又使您能够维护快速响应的软件,从而改善最终用户体验。

由于现代应用程序具有复杂且动态的结构,因此 APM 对于让您的应用程序保持最佳运行和运行至关重要。这很关键,因为应用程序通常代表品牌。如果没有 APM 工具,定位和解决问题可能会很费劲,这增加了最终用户体验不佳的可能性。它还可以降低运营成本,增加收入和销售额。

根据软件分析公司 Gartner 的说法,APM 工具应满足三个主要功能维度:

  • 前端监控
  • 应用程序发现、跟踪和诊断 (ADTD)
  • 分析

二、如何搭建 APM 系统

与搭建服务端监控系统类似,在搭建端到端的,应用性能管理系统时,我们也可以从数据的采集、存储和展示几个方面来思考。

首先,在数据采集方面,我们可以采用类似 Agent 的方式,在客户端上植入 SDK,由SDK 负责采集信息,并且经过采样之后,通过一个固定的接口,定期发送给服务端。这个固定接口和服务端,我们可以称为 APM 通道服务。

虽然客户端需要监控的指标很多,比如监控网络情况,监控客户端卡顿情况、垃圾收集数据等等,但我们可以定义一种通用的数据采集格式。

比如,在我之前的公司里,采集的数据包含下面几个部分,SDK 将这几部分数据转换成JSON 格式后,就可以发送给 APM 通道服务了。这几部分数据格式,你可以在搭建自己的APM 系统时,直接拿来参考。

系统部分:包括数据协议的版本号,以及下面提到的消息头、端消息体、业务消息体的长度;

消息头:主要包括应用的标识(appkey),消息生成的时间戳,消息的签名以及消息体加密的秘钥;

端消息体:主要存储客户端的一些相关信息,主要有客户端版本号、SDK 版本号、IDFA、IDFV、IMEI、机器型号、渠道号、运营商、网络类型、操作系统类型、国家、地区、经纬度等等。由于这些信息有些比较敏感,所以我们一般会对信息加密;业务消息体:也就是真正要采集的数据,这些数据也需要加密。

加密的方法是这样的:我们首先会分配给这个应用,一对 RSA 公钥和私钥,然后 SDK 在启动的时候,先请求一个策略服务,获取 RSA 公钥。在加密时,客户端会随机生成一个对称加密的秘钥 Key,端消息体和业务消息体,都会使用这个秘钥来加密。那么数据发到APM 通道服务后,要如何解密呢?

客户端会使用 RSA 的公钥对秘钥加密,存储在消息头里面(也就是上面提到的,消息体加密秘钥),然后 APM 通道服务使用 RSA 秘钥,解密得到秘钥,就可以解密得到端消息体和业务消息体的内容了。

package com.xinwu.advert.test;

import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;

public class RSATest {
    public static void main(String[] args) {
        KeyPair keyPair = SecureUtil.generateKeyPair("RSA", 512);
        PrivateKey privateKey = keyPair.getPrivate();
        PublicKey publicKey = keyPair.getPublic();

        RSA rsa = new RSA(privateKey, publicKey);

        String text = "hello world !";
        //公钥加密,私钥解密
        String encryptByPublic = rsa.encryptBase64(text, KeyType.PublicKey);
        System.out.println("公钥加密:" + encryptByPublic);

        String decryptByPrivate = rsa.decryptStr(encryptByPublic,KeyType.PrivateKey);
        System.out.println("私钥解密:" + decryptByPrivate);
    }
}

 最后,我们把消息头、端消息体、业务消息体还有消息头中的时间戳组装起来,用 MD5 生成摘要后,存储在消息头中(也就是消息的签名)。这样,APM 通道服务在接收到消息后,可以使用同样的算法生成摘要,并且与发送过来的摘要比对,以防止消息被篡改。数据被采集到 APM 通道服务之后,我们先对 JSON 消息做解析,得到具体的数据,然后发送到消息队列里面。从消息队列里面消费到数据之后,会写一份数据到 Elasticsearch中,作为原始数据保存起来,再写一份到统计平台,以形成客户端的报表。

有了这套 APM 通道服务,我们就可以将从客户端上采集到的信息,通过统一的方式上报到服务端做集中处理。这样一来,你就可以收集到客户端上的性能数据和业务数据,能够及时地发现问题了。 

三、什么是Skywalking

Skywalking是基于APM (Application Performance Management) 原理的一款开源项目,它利用监控数据分析分布式系统,在生产环境中发现和排除分布式系统故障。

Skywalking利用trace分析技术实现对请求链路的跟踪追踪。在实际运行过程中,针对整个分布式系统,Skywalking会把调用链路上的详细信息(调用者、被调用者、调用方法等等)记录下来,并基于此生成事务 trace视图,实现了对整个分布式系统的全链路跟踪、检索与可视化。

Skywalking的核心原理就是代码追踪,它的原理是利用字节码注入技术实现对JVM运行时的监控和收集,通过分析trace信息,将分布式系统中所有的请求串起来形成事务和调用链路。

一、Skywalking原理数据库

Skywalking采用ElasticSearch作为存储引擎。实时分析与查询这些信息,有助于快速诊断并修复当期应用程序中的性能问题。

Skywalking在ElasticSearch中存储了很多的指标,其中包括:应用程序组、应用程序、实例、端点、服务以及调用链的元数据。使用ElasticSearch索引和集群技术,可以轻松地查询和聚合这些指标,让开发人员可以更好地理解他们的应用程序目前的状态。

二、为什么Skywalking侵入性小

Skywalking采用了字节码注入的技术,可以在不修改原代码的情况下实现代码追踪。Skywalking侵入性小,是因为它在JVM层面进行监控,不需要在代码中加入Skywalking监控的相关代码。同时也可以通过配置文件很方便地进行全局控制,很容易地管理和升级。

三、Skywalking Agent原理

Skywalking Agent作为Skywalking的核心部分,是一个Java应用,它托管在应用程序内部,与应用程序代码同步运行。

Skywalking将收集到的埋点信息以日志的方式输出(采集到的各种 trace 信息),然后由Agent组件对这些信息进行格式化整理后发送到Skywalking的Collector组件中,最终将整理后的数据存储到ElasticSearch中。

四、Skywalking登录地址

Skywalking的控制台可以查看各种分析数据,通过图形化方式展示每一层的性能信息,便于分析和排查问题。组件精细,支持分别快速进行数据查询,是一个极具价值的应用。

默认情况下,Skywalking的登录地址为:http://localhost:8080/。

五、Skyworking oap原理

Skywalking OAP(Open Analytics Platform)是Skywalking的另一个核心部件,支持自定义的指标聚合和关联,将监测数据进行处理、聚合和存储。

Skywalking OAP支持分布式存储,在写入ElasticSearch时,可以将数据同时写入其他数据存储系统,比如 H2、Cassandra、MySQL、TiDB、Postgres 等,保证数据的备份和稳定性。

六、Skywalking mysql

<dependency>

         <groupId>org.apache.skywalking</groupId>

        <artifactId>apm-protocol/apm-mysql-plugin</artifactId>

        <version>8.4.0</version>

</dependency>

Skywalking的Mysql插件可以帮助我们追踪和监控分布式的Mysql访问请求,采集有用的数据,如数据库访问状态和性能分析结果,并在Skywalking控制台上呈现。

七、Skywalking版本选取

选择合适的Skywalking版本,需要考虑系统的实际需求和场景,可以先搭建一个简单的Skywalking系统,并在测试环境进行测试。根据测试结果,进行版本选取和相关配置调整

在这里,我们推荐使用最新版本,因为最新版本往往能兼容更多的应用和技术,并能解决之前一些版本存在的问题。


总结

Skywalking是一个非常优秀的全链路监控系统,它的原理为基于字节码注入的方式实现,侵入性小,且对于分布式系统的监控能力也很强大,对于应用程序的运行状况进行了全方位的监测和分析。

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

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

相关文章

C语言 每日一题 Day10

1.使用函数判断完全平方数 本题要求实现一个判断整数是否为完全平方数的简单函数。 函数接口定义&#xff1a; int IsSquare(int n); 其中n是用户传入的参数&#xff0c;在长整型范围内。如果n是完全平方数&#xff0c;则函数IsSquare必须返回1&#xff0c;否则返回0。 代码实…

软考之软件工程基础理论知识

软件工程基础 软件开发方法 结构化方法 将整个系统的开发过程分为若干阶段&#xff0c;然后依次进行&#xff0c;前一阶段是后一阶段的工作依据按顺序完成。应用最广泛。特点是注重开发过程的整体性和全局性。缺点是开发周期长文档设计说明繁琐&#xff0c;工作效率低开发前要…

python脚本监听域名证书过期时间,并将通知消息到钉钉

版本一&#xff1a; 执行脚本带上 --dingtalk-webhook和–domains后指定钉钉token和域名 python3 ssl_spirtime.py --dingtalk-webhook https://oapi.dingtalk.com/robot/send?access_tokenavd345324 --domains www.abc1.com www.abc2.com www.abc3.com脚本如下 #!/usr/bin…

pytorch笔记 GRUCELL

1 介绍 GRU的一个单元 2 基本使用方法 torch.nn.GRUCell(input_size, hidden_size, biasTrue, deviceNone, dtypeNone) 输入&#xff1a;&#xff08;batch&#xff0c;input_size&#xff09; 输出和隐藏层&#xff1a;&#xff08;batch&#xff0c;hidden_size&#xf…

Unity 报警告warning CS0649: Field ‘...‘ is never assigned to,...解决办法

文章目录 1. 现象2. 警告出现原因3. 解决方法 1. 现象 2. 警告出现原因 该警告应仅出现在私有成员变量中。那些不能从外部设置&#xff0c;这就是为什么编译器可以确定这些变量没有在任何地方蛇者其值。在C&#xff03;中&#xff0c;没有访问修饰符的变量&#xff08;private…

React中的状态管理

目录 前言 1. React中的状态管理 1.1 本地状态管理 1.2 全局状态管理 Redux React Context 2. React状态管理的优势 总结 前言 当谈到前端开发中的状态管理时&#xff0c;React是一个备受推崇的选择。React的状态管理机制被广泛应用于构建大型、复杂的应用程序&#xf…

HNU-编译原理-讨论课1

讨论课安排&#xff1a;2次4学时&#xff0c;分别完成四大主题讨论 分组&#xff1a;每个班分为8组&#xff0c;每组4~5人&#xff0c;自选组长1人 要求和说明&#xff1a; 以小组为单位上台报告&#xff1b;每次每组汇报2个小主题&#xff0c;每组按要求在2个小主题中各选1…

GEE——Publisher Data Catalogs发布者数据目录

发布者数据目录 发布者数据目录由数据集发布者策划&#xff0c;供更大范围的 Google 地球引擎社区使用&#xff0c;并作为地球引擎资产集公开共享。这些目录并非由 Google 编制。这里是GEE团队简政放权的一个过程&#xff0c;也就是说这些数据集的后续更新和维护并不由GEE团队负…

在虚拟机centos7中部署docker+jenkins最新稳定版

在虚拟机centos7中部署dockerjenkins最新稳定版 查看端口是否被占用 lsof -i:80 查看运行中容器 docker ps 查看所有容器 docker ps -a 删除容器 docker rm 镜像/容器名称 强制删除 docker rmi -f 镜像名 查看当前目录 pwd 查看当前目录下所有文件名称 ls 赋予权限 chown 777 …

[TryHackMe] [Intro to Offensive Security] 网络安全概论.黑掉你的第一个网站

TASK1:什么是进攻性安全&#xff1f; 简而言之&#xff0c;攻击性安全是闯入计算机系统、利用软件错误并查找应用程序中的漏洞以获得未经授权的访问的过程。 要打败黑客&#xff0c;你需要表现得像个黑客&#xff0c;在网络犯罪分子之前发现漏洞并推荐补丁 另一方面&#xf…

Yolov5-detect.py代码简化(便于移植)

Yolov5-detect.py代码简化&#xff08;便于移植&#xff09; # -*- coding: UTF-8 -*- # Time : 2023/11/1 18:23 # File : detect_iter.py # Software: PyCharm # YOLOv5 &#x1f680; by Ultralytics, GPL-3.0 license import argparse import os import sys import time…

C语言_自定义类型详解

文章目录 前言一.结构体的声明1.1结构体的基础知识1.2结构的声明1.3特殊声明1.4结构体的自引用在结构中包含一个类型为该结构本身的成员是否可以&#xff1f;正确的自引用方式匿名结构体类型和typedef的结合形式 1.5 结构体变量的定义和初始化结构体定义与初始化结构体里嵌套结…

数据结构与算法:稀疏数组Java版

什么是稀疏数组 稀疏数组是一种特殊的数据结构&#xff0c;它仅在数组中保存了有效的数据元素&#xff0c;忽略掉了大部分未被使用或被零值占据的元素&#xff0c;从而节省了内存空间。 在稀疏数组中&#xff0c;只有非零元素会被保存&#xff0c;这些元素在原数组中的位置和…

姿态识别+康复训练矫正+代码+部署(AI 健身教练来分析深蹲等姿态)

姿态识别康复训练矫正&#xff08;AI 健身教练姿态分析&#xff09; 目录 本文旨在构建一个 AI 健身教练&#xff0c;帮助判断姿态标准与否&#xff0c;并且矫正姿态&#xff01;无论您是初学者还是专业人士&#xff0c;它都可以帮助您无缝地进行深蹲。为了完成这项任务&…

基于海洋捕食者算法的无人机航迹规划-附代码

基于海洋捕食者算法的无人机航迹规划 文章目录 基于海洋捕食者算法的无人机航迹规划1.海洋捕食者搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用海洋捕食者算法来优化无人机航迹…

SANSAN每周新鲜事|到底哪一款物联网平台适合你?

假如您有对设备进行监控、控制、管理、维护的需求&#xff0c;或者您的业务系统涉及设备管控、设备数据可视化和分析&#xff0c;大概率上&#xff0c;您需要开发一套系统专门去做设备接入和管理&#xff0c;您会面临两种选择&#xff1a; 1、选择一款合适的物联网平台&#x…

“消费增值:绿色商业模式的创新之路“

随着消费者对绿色、环保生活方式的追求不断增加&#xff0c;一种名为消费增值的商业模式正逐渐受到人们的关注。通过鼓励绿色消费行为&#xff0c;消费增值模式引导消费者形成低碳环保的生活方式&#xff0c;并实现积分的增值和社会效益的提升。一种只涨不跌的模式&#xff0c;…

历年网规上午真题笔记(2015年)

解析: 变更控制为“问题识别”——“问题分析与变更描述”——“变更分析与成本计算”——“变更实现”——“修改后的需求” 自动化工具能够帮助变更控制过程更有效地运作,能有效收集、存储、管理变更,工具应该具备的特征如下: 可定义变更请求中的数据可定义变更请求生命…

以八数码问题为例实现A*算法的求解(未完结)

八数码&#xff1a; 在一个 33 的网格中&#xff0c;1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如&#xff1a; 1 2 3 x 4 6 7 5 8在游戏过程中&#xff0c;可以把 x 与其上、下、左、右四个方向之一的数字交换&#xff08;如果存在&#xff09;。…