30天网站建设全程实录 pdf/百度搜索引擎属于什么引擎
一、前言
人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情。 拥有成千上万甚至数百万的用户,确保出色的性能和可靠性是移动应用程序和相关后端服务的提供商和运营商面临的主要挑战。 了解移动应用程序的行为、崩溃的发生和类型、响应时间慢的根本原因以及后端问题对用户的实际影响是管理移动应用程序和相关后端服务性能的关键。
Elastic 推出了适用于 Android 应用程序的应用程序性能监控 (APM) 代理,允许开发人员跟踪其应用程序的关键方面,从崩溃和 HTTP 请求到屏幕渲染时间和端到端分布式跟踪。 所有这些都有助于解决移动应用程序、相应后端服务及其交互的问题和性能缺陷。 Elastic APM Android 代理会自动检测你的应用程序及其依赖项,因此你可以简单地将代理 “即插即用” 到你的应用程序中,而不必担心对代码库进行太多更改。
Elastic APM Android 代理是在 OpenTelemetry 之上从头开发的,OpenTelemetry 是一种开放标准和可观察性框架。 开发人员将能够充分利用其功能,以及庞大而活跃的社区提供的支持。 如果你熟悉 OpenTelemetry 并且你的应用程序已经使用 OpenTelemetry 进行检测,那么你可以在切换到 Elastic APM Android Agent 时简单地重用它。 但如果情况并非如此,请不要担心 —— 代理被配置为自动处理常见的可追踪场景,而无需深入研究 OpenTelemetry API 的细节。
二、怎么运行的
Elastic APM Android Agent 是 SDK 和 Gradle 插件的组合。 SDK 包含实用程序,可让你初始化和配置代理的行为,以及准备和初始化 OpenTelemetry SDK。 你可以使用 SDK 以编程方式配置和初始化代理,特别是高级和特殊用例。
在大多数情况下,不需要编程配置和初始化。 相反,你可以使用提供的 Gradle 插件来配置代理并自动检测你的应用程序。 Gradle 插件在后台使用 Byte Buddy 和官方 Android Gradle 插件 API,通过应用程序及其依赖项类的编译时转换,自动将检测代码注入你的应用程序。
在配置并启用 Elastic Android APM 代理 Gradle 插件的情况下编译你的应用程序将使你的 Android 应用程序在运行时报告跟踪数据、指标以及不同的事件和日志。
三、在 Android 应用程序中使用 Elastic APM 代理
通过一个简单的演示应用程序,我们将按照 “设置代理” 指南中提到的步骤来设置 Elastic Android APM 代理。
先决条件
对于此示例,你将需要以下内容:
启用了 APM 的 Elastic Stack(我们推荐使用 Elastic 的 Cloud 产品。免费试用。)
Java 11+
Android Studio
Android 模拟器、AVD 设备
你还需要一种方法将应用程序的信号推送到 Elastic。 因此,你将需要 Elastic APM 的秘密令牌(secret token),稍后你将在我们的示例应用程序中配置该令牌。
我们示例的测试项目
为了展示包括分布式跟踪在内的端到端场景,在此示例中,我们将检测一个简单的天气应用程序,该应用程序包含两个 Android UI 片段和一个基于 Spring Boot 的简单本地后端服务。
第一个片段将有一个包含一些城市名称的下拉列表以及一个将你带到第二个片段的按钮,你将在其中看到所选城市的当前温度。 如果你在第一个屏幕上选择了一个非欧洲城市,那么当你前往第二个屏幕时,你会从(本地)后端收到一个错误。 这是为了演示如何在 Elastic APM 中捕获和关联网络和后端错误。
应用 Elastic APM 代理插件
在下文中,我们将解释从头开始为 Android 应用程序设置 Elastic APM Android 代理所需的所有步骤。 如果你想跳过这些说明并立即查看代理的运行情况,请使用该存储库的主分支并仅应用步骤 (3.b),然后再继续下一节(“设置本地后端服务”)。
1.克隆示例应用程序库并在 Android Studio 中打开它。
2.切换到 uninstrumented 的 repo 分支,从一个空白的、未检测的 Android 应用程序开始。 你可以运行此命令切换到未检测的分支:
git checkout uninstrumented
3.按照 Elastic APM Android Agent 的设置指南进行操作:
将 co.elastic.apm.android 插件添加到 app/build.gradle 文件(请确保使用该插件的最新版本,你可以在此处找到该插件)。
通过在 app/build.gradle 文件的 “elasticAPM” 部分中提供 “serverUrl” 和 “secretToken” 来配置代理与 Elastic APM 后端的连接。
1. // Android app's build.gradle file
2. plugins {
3. //...
4. id "co.elastic.apm.android" version "[latest_version]"
5. }7. //...9. elasticApm {
10. // Minimal configuration
11. serverUrl = "https://your.elastic.apm.endpoint"13. // Optional
14. serviceName = "weather-sample-app"
15. serviceVersion = "0.0.1"
16. secretToken = "your Elastic APM secret token"
17. }
4.唯一实际需要更改的代码是一行代码,用于在 Application.onCreate 方法中初始化 Elastic APM Android 代理。 此示例应用程序的应用程序类位于 app/src/main/java/co/elastic/apm/android/sample/MyApp.kt。
package co.elastic.apm.android.sample3. import android.app.Application
4. import co.elastic.apm.android.sdk.ElasticApmAgent6. class MyApp : Application() {8. override fun onCreate() {
9. super.onCreate()
10. ElasticApmAgent.initialize(this)
11. }
12. }
请记住,对于此示例,我们不会更改代理的默认配置 —— 如果你想了解有关如何更改的更多信息,请查看代理的运行时配置指南。
在启动我们的 Android 天气应用程序之前,我们需要配置并启动本地天气后端服务,如下一节所述。
设置本地后端服务
代理提供的关键功能之一是分布式跟踪,它允许你查看 HTTP 事务的完整端到端故事,从我们的移动应用程序开始并遍历应用程序使用的检测后端服务。 Elastic APM 将以一个分布式跟踪的形式向你展示全貌,这对于解决问题非常方便,尤其是与高延迟和后端错误相关的问题。
作为示例应用程序的一部分,我们将启动一个简单的本地后端服务来处理我们应用程序的 HTTP 请求。 后端服务使用 Elastic APM Java 代理进行检测,以收集自己的 APM 数据并将其发送到 Elastic APM,使其能够将移动交互与后端请求的处理相关联。
为了配置本地服务器,我们需要在 backend/src/main/resources/elasticapm.properties 文件中设置我们的 Elastic APM 端点和秘密令牌(与上一步中我们的 Android 应用程序使用的相同):
1. service_name=weather-backend
2. application_packages=co.elastic.apm.android.sample
3. server_url=YOUR_ELASTIC_APM_URL
4. secret_token=YOUR_ELASTIC_APM_SECRET_TOKEN
启动演示
我们的示例应用程序将为代理当前支持的框架获得自动检测,这意味着我们将看到屏幕渲染跨度以及开箱即用的 OkHttp 请求。 对于当前不支持的框架,你可以应用手动检测来丰富你的 APM 数据(请参阅下面的 “手动检测”)。
我们准备启动演示。 (该demo旨在使用Android模拟器在本地环境中执行。)因此,我们需要:
在位于示例项目根目录的终端中使用此命令启动后端服务:./gradlew bootRun(如果你使用的是 Windows,则为 gradlew.bat bootRun)。 或者,你可以从 Android Studio 启动后端服务。
在 Android 模拟器(来自 Android Studio)中启动天气示例应用程序。
一切运行后,我们需要在应用程序中四处导航以生成一些我们希望在 Elastic APM 中观察到的负载。 因此,选择一个城市,单击 “Next” 并重复多次。 请确保至少选择 New York 一次。 你会看到天气预报对纽约这个城市不起作用。 下面,我们将使用 Elastic APM 来找出选择纽约时出现的问题。
初看 APM 结果
让我们打开 Kibana 并导航到 Observability 解决方案。
在 Services 导航项下,你应该看到两个服务的列表:我们的 Android 应用 weather-sample-app 和相应的后端服务 weather-backend。 单击 Service map 选项卡以查看这些服务与任何外部服务之间依赖关系的可视化。
单击 weather-sample-app 以深入了解 Android 应用程序的仪表板。 移动应用程序的服务视图在发布此博文时处于技术预览(technical preview)阶段,但你已经可以在该屏幕上看到有关该应用程序的深入信息。 你会看到所选时间范围内的活动会话数量、weather-sample-app 发出的 HTTP 请求数量、请求的地理分布以及设备型号、操作系统版本、网络连接类型和应用程序的细分等信息 版本。 (有关崩溃和应用程序加载时间的信息正在开发中。)
为了演示的目的,我们保持这个演示简单,所以数据不那么多样化,也相当有限。 但是,当你监控使用次数较多且设备型号、操作系统版本等方面更加多样化的移动应用程序时,此类数据特别有用。当你可以使用这些属性进行过滤和分组你的 APM 数据时,故障排除和性能问题变得更加容易 。 你可以使用顶部的快速过滤器来执行此操作,并查看指标如何根据你的选择被采用。
现在,让我们看看如何处理单个用户交互,包括对后端服务的下游调用。 在 Transactions 选项卡(顶部)下,我们看到不同的端到端 transaction 组,包括 FirstFragment 和 SecondFragment 的两个 transactions。
让我们深入研究 SecondFragment - 查看出现的 transaction,以查看此 transaction 组的指标(例如,延迟、吞吐量)以及单个用户交互的调用瀑布视图。 正如我们在下面的屏幕截图中看到的,在视图创建之后,该片段向 10.0.2.2 执行 HTTP GET 请求,这需要大约 130 毫秒。 在同一个瀑布中,我们看到 HTTP 调用由 weather-backend 服务处理,它本身对 api.open-meteo.com 进行 HTTP 调用。
现在,当查看纽约被选为城市的请求的瀑布视图时,我们看到后端服务发生错误,这解释了为什么预测对 New York 不起作用。 通过单击红色的查看相关错误标记,你将获得错误的详细信息和问题的实际根本原因。
天气后端的异常消息指出 “This service can only retrieve geo locations for European cities!” 这就是选择 New York 作为城市的问题。
手动检测
如前所述,Elastic APM Android Agent 代表你为受支持的框架执行一系列自动检测; 但是,在某些情况下,你可能希望根据应用的用例获得额外的检测。 对于这些情况,你已经了解了 OpenTelemetry API,它是 Elastic APM Android 代理的基础。 OpenTelemetry Java SDK 包含用于创建自定义 spans、 metrics 和 logs 的工具,并且由于它是 Elastic APM Android 代理的基础,因此你无需在项目中添加任何额外依赖项也无需配置任何内容即可使用它及将你的自定义信号连接到你自己的 Elastic 环境,就像代理为你做的那样。
开始的方法是像这样获取 OpenTelemetry 的实例:
OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
然后你可以按照 OpenTelemetry Java 文档中的说明创建自定义信号。 有关创建自定义 span 的示例,请参见以下示例:
ini 代码解读复制代码
1. OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
2. Tracer tracer = openTelemetry.getTracer("instrumentation-library-name", "1.0.0");
3. Span span = tracer.spanBuilder("my span").startSpan();5. // Make the span the current span
6. try (Scope ss = span.makeCurrent()) {
7. // In this scope, the span is the current/active span
8. } finally {
9. span.end();
10. }
四、结论
在这篇博文中,我们演示了如何使用 Elastic APM Android 代理在基于 Android 的移动应用程序中实现端到端的可观察性。 设置代理只需几分钟,所提供的见解可让你分析应用的性能及其对后端服务的依赖性。 有了 Elastic APM Android Agent,你可以利用 Elastic 丰富的 APM 功能以及各种可能性,通过自定义检测和自定义仪表板来自定义你的分析工作流程。
你好奇吗? 然后自己试试。 在 Elastic Cloud 上注册免费试用,使用本博客中所述的 Elastic APM Android 代理丰富你的 Android 应用程序,并探索 Elastic 的可观察性解决方案中的数据。
相关文章:

Elasticsearch:使用 Elastic APM 监控 Android 应用程序
一、前言 人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情。 拥有成千上万甚至数百万的用户,确保出色的性能和可靠性是移动应用程序和相关后端服务的提供商和运营商面临的主要挑战。 了解移动应用程序的行为、崩溃的发生和类型、响应时间慢的根本…...

Go的简单问题问答
基础问题回答 Go 的主要特点是什么? 简洁:语法简化,减少复杂性。并发:内置 Goroutine 和 Channel,支持轻量级并发。静态类型:强类型语言,编译时检查错误。跨平台:编译生成独立的二进…...

【攻防实验】溯源与取证分析实验
溯源与取证分析实验 溯源取证分析作为网络攻防过程中重要环节,准确找到攻击者的入侵线索(尤其是攻击突破口、攻击IP地址、域名、工具等信息),对于企业或者团队安全运营团队来说都是必备技能。常规攻击取证过程中往往会结合流量、Web访问日志、终端系统或…...

THREE.js 入门(一)xyz坐标系
一、坐标系概念 在 three.js 中,相机的默认朝向是沿着 Z 轴的负方向。也就是说,默认情况下,相机会沿着 Z 轴的负方向“看”到场景中的对象,而 X 轴和 Y 轴分别对应水平方向和垂直方向。换句话说,相机的默认位置是 (0,…...

AUTOSAR CP中基于通信模块(COM)的Transformer-R24的规范导读
该文档是关于 AUTOSAR CP中基于通信模块(COM)的Transformer的规范说明,主要内容包括引言、相关文档、约束与假设、功能规范、API 规范、配置规范等,旨在为汽车电子系统开发中基于 COM 的Transformer提供全面的技术规范和指导。 一…...

ubuntu20.04安装anygrasp_sdk
ubuntu20.04安装anygrasp_sdk采坑记录 安装ME的教程看上一篇,现在来看anygrasp安装问题grasp_detection、grasp_trackinglicense申请demo文件的运行注意的地方到这以为大功告成了,然后出现了一个numpy版本不匹配问题最后还有一个问题就是修改demo.sh,不然没法可视化结果展示安…...

Spring完整知识点二
Spring注解开发 Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,它能够代替xml配置文件,可以简化配置,提高开发效率Spring注解根据出现时间分类 Spring原始注解…...

GESP三级集训——课堂笔记(部分)
进制转换(二进制、十进制、八进制、十六进制等) 十进制(逢十进一)——Decimal 十进制是我们生活中最常见的进制,如“1”“23”“891”等: 进位过程如下:{1,2,3,4,5,6,7,8,9}{10,11,12,13,14,…...

Spring Boot接口返回统一格式
统一的标准数据格式好处 SpringBoot返回统一的标准数据格式主要有以下几点好处: 增强接口的可读性和可维护性,使得前端开发人员能够更加清晰地理解接口返回的数据结构,从而提高开发效率。 降低前后端耦合度,当后端需要修改返回数…...

Flink如何基于数据版本使用最新离线数据
业务场景 假设批量有一张商户表,表字段中有商户名称和商户分类两个字段。 批量需要将最新的商户名称和分类的映射关系推到hbase供实时使用。 原实现方案 a.原方案内容 为解决批量晚批问题,批量推送hbase表时一份数据产生两类rowkey:T-1和…...

软件开发中的常用性能指标
大家好!我是今越。在软件开发中我们经常会遇到一些性能指标,下面就带大家一起来看看。 QPS Queries Per Second,每秒查询率,一台服务器每秒能够响应的查询次数。它是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准…...

cmakelist使用总结
支持能编译成在不同系统上运行程序的方法 我们代码就一份,但有时需要编译成arm32,有时需要编译成x86_64,或更多 1、首先先将代码定义一个名称: #将所有的源文件列为一个集合,集合名字叫做SRC_LISTS set(SRC_LISTS main.cpp A.cpp…...

准备阶段 Unity优化总纲
Unity优化总纲 我们在学习优化课程之前要预先做好准备功能 例如最主要是的接收到一个优化的任务,应该怎么做,其次怎么做,最后怎么做。 也要学习一些专业工具以及专业术语 了解游戏运行机制,在排查期间思路会更清晰 1.优化目的…...

ubuntu防火墙(三)——firewalld使用与讲解
本文是Linux下,用ufw实现端口关闭、流量控制(二) firewalld使用方式 firewalld 是一个动态管理防火墙的工具,主要用于 Linux 系统(包括 Ubuntu 和 CentOS 等)。它提供了一个基于区域(zones)和服务&#x…...

zookeeper 搭建集群
基础的java 环境先安好,选择3台虚拟机 ip 不一样 机器应为奇数个 zookeeper 奇数个节点实际上是(2*n-1) 比偶数台机器少一台解决成本,并且能够满足 zookeeper 集群过半选举leader 的规则 # 3台虚拟机 将zookeeper 解压到服务器上 #在 conf/ 目录下 找到zoo_s…...

Java——异常机制(下)
1 异常处理之(捕获异常) (一般处理运行时异常) (try-catch-finally子句) (finally一般用于文件最后关闭) (catch捕获的子类在前父类在后——>不然父类在前面都让父类捕获掉了,会报错) (Exception是父类放在最后,如果前面没有捕获到,就…...

centos 手动安装libcurl4-openssl-dev库
下载源代码 curl downloadshttps://curl.se/download/ 选择需要下载的版本,我下载的是8.11.0 解压 tar -zxvf curl-8.11.0 查看安装命令 查找INSTALL.md,一般在docs文件夹下 –prefix :指定安装路径(默认安装在/usr/local&…...

JS学习(1)(基本概念与作用、与HTML、CSS区别)
目录 一、JavaScript是什么? (1)基本介绍 (2)简称:JS? 二、JavaScript的作用。 三、HTML、CSS、JS之间的关系。 (1)html、css。 (2)JavaScript。 …...

代码随想录算法训练营day50|动态规划12
不同的子序列 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。、 编辑距离中的删除元素,其实就是直接变数字,其只删除原来的较长的数组里的元素 递推模拟,使用s的最后一个元素匹配,或者删除…...

JavaWeb学习(2)(Cookie原理(超详细)、HTTP无状态)
目录 一、HTTP无状态。 (1)"记住我"? (2)HTTP无状态。 (3)信息存储客户端中。如何处理? 1、loaclStorage与sessionStorage。 2、Cookie。 二、Cookie。 (1&…...

java抽象类
目录 一.抽象类 1.什么是抽象类 2.抽象类特点 (1)抽象类不能直接实例化对象 (2)可以包含抽象方法和具体方法 (3)可以有构造方法 (4)抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修…...

minio集群部署–linux环境
原文地址:minio集群部署–linux环境 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 第一步:安装 有rpm、deb、和二进制文件安装方式。参考文档在:MinIO Object Storage for Linux — MinIO Object Storage …...

在vue3里使用scss实现简单的换肤功能
实现的换肤功能:主题色切换、亮色模式和暗黑模式切换、背景图切换 主题色就是网站主色,可以配置到组件库上面;亮色模式又分为两种风格:纯白风格和背景图风格,不需要背景图的话可以删掉这部分逻辑和相关定义;…...

JavaScript编写css自定义属性
一、自定义属性 是在 CSS 中定义的变量,以 --开头。它们可以存储颜色、尺寸、字体等任何 CSS 值,并且可以在整个文档中重复使用。 :root {--primary-color: #3498db;--font-size: 16px; }body {color: var(--primary-color);font-size: var(--font-siz…...

我们来学webservie - WSDL
WSDL 题记WSDL系列文章 题记 举个例子 酒桌上大领导们谈笑风生,把酒临风,其喜洋洋者矣老张说能签下xx项目,一来证明了集团在行业中的翘楚地位,二来感谢各位领导给予的大力支持接下来的一周,项目经理、业务顾问相继入场࿰…...

【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现
在探索大语言模型的创意应用过程中,我们开发了一个基于多 Agent 的智能诗歌创作系统。本文将介绍如何通过多个专业化的 Agent 协同工作,实现根据地点和天气信息自动创作诗歌的功能。 GitHub Code 项目地址 核心架构设计 1. Agent 基类设计 from pydan…...

001 LVGL PC端模拟搭建
01 LVGL模拟器介绍 使用PC端软件模拟LVGL运行,而不需要任何嵌入式硬件 环境搭建:codeblocks-20.03mingw-setup 正常安装流程即可 工程获取:LVGL官网-> github仓库 本地安装包下载资源包 工程模版和软件安装包 补充:…...

AJAX三、XHR,基本使用,查询参数,数据提交,promise的三种状态,封装-简易axios-获取省份列表 / 获取地区列表 / 注册用户,天气预报
一、XMLHttpRequest基本使用 XMLHttpRequest(XHR)对象用于与服务器交互。 二、XMLHttpRequest-查询参数 语法: 用 & 符号分隔的键/值对列表 三、XMLHttpRequest-数据提交 核心步骤 : 1. 请求头 设置 Content-Type 2. 请求体 携带 符合要求 的数…...

mybatis之数据统计与自定义异常处理
文章目录 需求描述定义实体方式一、mybatisPlus实现方式二、自定义SQL实现简单查询过滤查询 异常处理1、SQL拼写异常 在使用Mybatis或MybatisPlus进行数据统计,在【 SpringBoot的Mybatis-plus实战之基础知识】中对mybatisplus引入有介绍,本次要使用其进…...

qt creator使用taglib读取音频元信息,windows平台vcpkg安装
注意:qt creator用的构建组件是qt 6.2.3 MSVC2019 64bit 安装vcpkg // 我的安装位置C:\vcpkg git clone https://github.com/microsoft/vcpkg.git C:\vcpkg cd C:\vcpkg .\bootstrap-vcpkg.bat// 设置系统环境变量 VCPKG_ROOT C:/vcpkg用vcpkg安装taglib vcpkg …...