
作者介绍
Elastic APM是构建在Elastic产品生态上的一个应用性能监控系统。它通过采集http请求响应、db交互、第三方服务调用等详细性能数据来实时监控我们的软件应用系统。如图1所示,当图示系统中分布式缓存出现某种故障导致应用响应超时,Elastic APM能够实时监控并快速定位到是哪个服务导致的超时。因此有了APM,我们便可以高效的对服务性能问题进行定位、分析和修复。

从以上的介绍中可以看出,Elastic APM包括了链路追踪、性能指标分析应用和服务依赖分析等强大功能,除此之外,Elastic APM还会自动采集Errors和Exceptions等异常信息,其中Errors信息会跟进堆栈Trace进行自动分组,可以帮助我们很方便地进行识别和监控。

Elastic APM由四个组件构成。分别是APM Agents,Elastic APM integration,Elasticsearch集群和Kibana。
APM Agents:用于采集应用数据的探针,是Elastic官方提供的多语言开发的超轻量的开源库。如Java agent、Go agent、Node.js agent等。我们通常选择和要监控的服务使用同一种语言开发的agent即可。例如Spring项目,选择Java agent。该agent的安装方式和其他第三方库一样。当我们在项目中引入了对应的agent库之后,它就会开始检查对应的代码并在运行时不断采集性能数据和异常错误信息,并在本地缓冲很短时间后发送到APM Server。
APM intergration:是一个数据接收和处理的服务,主要用于接收从APM agents上发来的性能数据,并在本地做相应的校验和处理,然后将其转换成ES文档。APM intergration运行在Elastic Agent之上。
目前,官方提供了两种部署Elastic APM的架构,分别是APM intergration集中式部署和APM intergration分布式部署两种。以下图3、图4来自官方文档 。


其中,APM intergration集中化部署架构。顾名思义,就是所有的Agents将采集的性能数据统一发送到一台或多台APM intergration上;而分布式部署架构,则是每个Agent节点上都会部署一台对应的APM intergration,通过集中托管的Elastic Agent进行注册和元数据同步。
Elasticsearch:主要用于存储APM数据,数据以索引的形式存储在集群中。
Kibana:APM的可视化组件。Kibana中的APM模块支持客户可视化查看及分析应用性能数据。同时还支持各种维度的监控告警配置。
APM agents从应用系统中采集不同类型的信息,这些信息被统称为事件events,而这些events可以是spans、transactions、errors或者metrics。另外我们还可以在events中包含一些自定义的元数据信息,来增强数据的丰富度和可识别度,如标签、自定义上下文等。Transactions:事务,它描述了由APM agent检测服务所采集的一个事件。可以看作是一种特殊类型的Span,组成一个服务的请求和响应,例如下单接口请求,每个请求调用都是由单独的span构成。详细描述了Elastic APM agent所采集的事件。例如:它可以是一个http请求、一个批处理任务、一个定时后台任务或者其他我们自定义的事务类型。
Service:是在APM agent中配置的监控的应用系统名称。是一种逻辑上标识一组事务的方法。
Span:跨度,事务中的单个事件。例如api接口调用,db查询,es检索,文件的上传与下载等,即那些需要一些时间才能完成的任何事件。以下图为例,我们可以非常直观的看到请求最后对ES集群的wr-index执行了一次写入操作,并且耗时195ms。

另外我们还可以点击该Span查看更加详细的信息,如下图所示,展示了请求ES的具体API,所属的Service名称和Transaction,请求耗时及详细的调用栈信息。能够快速帮忙我们定位和分析问题。

Trace:跟踪,代表一个请求的完整数据链路。每个Trace跟踪单个请求的全部内容。下图是Kibana上展示的Traces列表页,相同的Traces以名称进行聚合,点击进入每条Trace名称后即可查看该Trace下包含的所有的Transactions指标监控和完整调用链等详细信息。

当一个Trace连接多个服务时,这在微服务架构被称为分布式链路跟踪。如果我们在Kibana的APM模块里看到我们的Trace时间线是彩色的,则表示该Trace是一个分布式跟踪。分布式链路跟踪中的Service是以颜色分隔开并按照调用顺序进行展示的,如下图所示,图片来自官方文档。

Metrics:指标,通过APM agents定期采集性能数据来衡量应用系统的健康状态。APM系统中的指标主要有两大类:
系统指标:APM agents会定期自动采集所属主机的性能指标,例如系统和进程级别的CPU、Load和内存指标。以及agents所属的特定指标,如Java agents会采集JVM指标,Go agent采集Go routime指标等。
计算指标:APM agents和APM Server定期计算来自跟踪事件(trace events)指标,以增强APM应用程序中可视化的效果。
因此Metrics和Traces的区别主要在于Metrics主要用来进行数据的统计,比如耗时统计、吞吐量统计。而Trances主要包含了一次请求的完整链路数据,用于监控和分析各子链路的性能瓶颈。Errors:一条错误事件,通常是由原始异常,或者异常发生时创建的error日志信息组成。为了简单起见,错误事件通常由全局唯一的ID表示,error message中则详细记录了具体的异常错误信息,非常方便我们定位分析问题根因。

本文从原理的角度,详细介绍了Elastic APM的产品功能、组件架构和数据模型,让我们对Elastic APM及Elastic技术栈又有了新的认识,若想了解更多,可到腾讯云Elasticsearch Service控制台创建集群进行体验吧。下一篇文章我们将演示如何通过通过Elastic APM实时监控我们的SpringBoot服务。
免费体验活动专区
Elasticsearch 新用户可享 2核4G,0元 体验 30 天!顺畅体验云上集群

添加小助手回复 Elasticsearch 加入 Elasticsearch 技术社区👇

推荐阅读
关注腾讯云大数据公众号
邀您探索数据的无限可能

点击“阅读原文”,了解相关产品最新动态
↓↓↓
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建
文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就
【适用平台】私有云 说明:完成私有云部分是需要两台虚拟机的,分别为controller、compute两个节点,但我们只需配置一台,然后克隆就方便多啦!需要用到的映射文件:关于vm的安装我就不介绍的,毕竟挺简单的,下面让我们看看基于私有云模块中,虚拟机的搭建吧。1、创建新的虚拟机,这里一般我会选择自定义,毕竟后面的配置都要根据私有云相关来进行搭建,会比较复杂。(如果是基础的可以选择典型,典型的满足一般虚拟机的配置) 2、选择稍后安装操作系统会比较方便后续的选择,这里你也可以自己选择自己的映像文件(但不建议) 3、我们是基于Linux下操作的,所以选择Linux客户机操作系统,版本选择自己
三大公有云厂商,香港地区主机测评一、ping时延比对(厦门电信本地测试):Ping时延测试腾讯云阿里云华为云延迟率最低时延44ms,最高72ms,平均46ms47.242段:最低时延59ms,最高204ms,平均107ms最低时延45ms,最高93ms,平均47ms丢包率丢包率小有的ip段丢包率较大每个段都会有概率丢包阿里云:47.242段:最低时延59ms,最高204ms,平均107ms,有的ip段丢包率较大8.210段:最低时延64ms,最高232ms,平均119ms,丢包率较好腾讯云:最低时延44ms,最高72ms,平均46ms,丢包率小华为云:最低时延45ms,最高93ms,平均47m
HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca
如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1. 创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1. 创建SpringBoot项目 打开IDEA,选择NewProject创建项目。 填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。 选择springboot版本以及需要的包,此处只选择了springweb。 此处需特别注意,若你使用的是jdk1