Elastic APM是基于Elastic Stack构建的应用程序性能监视系统。它使您可以实时监视软件服务和应用程序-收集有关传入请求,数据库查询,对缓存的调用,外部HTTP请求等的响应时间的详细性能信息。这样可以轻松快速地找出并解决性能问题。
Elastic APM还会自动收集未处理的错误和异常。错误主要根据堆栈跟踪进行分组,因此您可以在新错误出现时识别它们,并密切注意特定错误发生的次数
度量标准是调试生产系统时的另一个重要信息来源。Elastic APM代理自动获取基本主机级别指标和特定于代理的指标,例如Java代理中的JVM指标和Go代理中的Go运行时指标。
Elastic APM 会自动评估应用程序的性能并进行错误跟踪,它具有对流行框架和技术的内置支持,以及一个简单的API,可以用来检测任何应用程序。APM对Kibana及Elasticsearch服务器的最低要求版本是6.5.0。
因为elastic stack在6.3版本开始推出了APM功能,但当时只支持nodejs,python和ruby,尚不支持java和go,而公司里面大部分系统还是java,因此只是关注,还没有去解读。但在6.4.0版本,终于推出了java和go的beta版本,而在6.5.0版本,终于变为GA版本。这使得在生产环境上部署APM服务变为可能。
Elastic APM 由四个基本组件构成:
1)APM Agents
2)APM Server
3)Elasticsearch
4)Kibana
APM Agents
APM agents被称为APM代理,APM代理是使用与您的服务相同的语言编写的开源库,我们可能会用到其中的一个或者多个,我们把APM Agents安装到服务器中,就像安装其它库一样简单,APM Agents在运行时检测代码并收集性能数据和错误。收集后的性能数据和错误将在短时间内进行缓冲并发送到APM服务器。
现在版本为7.4,每个APM Agents都有文档,无论您的公司使用的语言为 Golang还是Java、甚至 .NET、Node.js、Python、Ruby等,通过APM Agents都可以进行检测分析:
Go语言代理配置文档
Java代理配置文档
.NET代理配置文档
Node.js代理配置文档
Python代理配置文档
Ruby代理配置文档
JavaScript代理配置文档
APM Server
APM Server是一个用Go编写的开源应用程序,APM Server 从 APM Agents 接收收集到的性能数据,APM Server 是一个单独的组件,这有助于保持代理的轻便性,防止某些安全风险,并提高弹性堆栈之间的兼容性。
APM Server 验证并处理来自 APM Agents 的事件之后,Server 将数据转换为 Elasticsearch 文档,并将其存储在相应的 Elasticsearch 索引中。几秒钟之内,您就可以开始在Kibana APM应用程序中查看应用程序性能数据。
APM Server默认侦听8200端口。
Elasticsearch
Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速、实时地存储、搜索和分析大量数据。Elasticsearch用于存储APM性能指标并利用其聚合。
Kibana
Kibana是一个开源的分析和可视化平台,旨在与Elasticsearch协同工作。您可以使用Kibana来搜索、查看和与Elasticsearch中存储的数据进行交互。
由于应用程序性能监视完全是为了可视化数据和检测瓶颈,因此了解如何使用Kibana APM UI非常重要。以下部分将帮助你开始:
Elastic APM从检测的应用程序中捕获不同类型的信息:
Spans
spans(跨越)包含有关已执行的特定代码路径的信息。它们从一个活动的开始到结束进行度量,并且它们可以与其他跨度具有父/子关系。
Transactions
Transactions(事物)是一种特殊的跨度,具有与之相关联的额外元数据。您可以将transactions视为在服务中度量的最高工作级别。例如,Transcations可以是对服务器的请求、批处理作业或自定义事务类型。
Errors
Errors包含有关发生的原始异常或在发生异常时创建的日志的信息。
APM可以做到监控应用的以下几种状态
详见:https://blog.csdn.net/qq_43412528/article/details/119568993
详见:https://blog.csdn.net/qq_43412528/article/details/119644581
进入Kibana界面,点击APM,然后设置说明
可根据你的环境进行APM版本的部署
以下介绍两种部署方式
1.RPM方式部署
curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.4.0-x86_64.rpm
sudo rpm -vi apm-server-7.4.0-x86_64.rpm
注:rpm包默认安装位置到 /etc/apm-server/,主配置文件为 apm-server.yml
2.TAR包方式部署
wget https://artifacts.elastic.co/downloads/apm-server/apm-server-7.4.0-linux-x86_64.tar.gz
tar xf apm-server-7.4.0-linux-x86_64.tar.gz -C /usr/local/
mv /usr/local/apm-server-7.4.0-linux-x86_64 /usr/local/apm-server
[root@elastic apm-server]# cat apm-server.yml
apm-server:
host: "192.168.31.215:8200" #定义服务器监听的主机和端口或者使用unix套件字, unix:/path/to.sock
max_header_size: 1048576 #要处理的服务器接受的请求头的最大允许大小(以字节为单位),默认为1048576字节(1 MB)
idle_timeout: 45s #在关闭基础连接之前等待下一个传入请求的最长时间
read_timeout: 30s #读取整个请求的最大持续时间,超出此时间则认为超时
write_timeout: 30s #写入响应的最大允许持续时间,写入时间超过30s则认为写入超时
shutdown_timeout: 5s #关闭服务器时释放资源的最大持续时间
max_event_size: 307200 #要处理的服务器接受的事件的最大允许大小(以字节为单位)(0.3MB)
max_connections: 0 #同时接受的最大新连接数(0表示无限制)
max_procs: 4 #设置可以同时执行的最大cpu数量,默认值是系统中可用的逻辑cpu数量
output.elasticsearch: #将APM Agents收集的数据通过APM Server输出至Elasticsearch
hosts: ["192.168.31.215:9201","192.168.31.215:9202","192.168.31.215:9203"] #指定输出的es数组
enabled: true #启用或禁用输出模块,默认启用
compression_level: 5 #gzip压缩级别,将此值设置为0将禁用压缩,压缩级别必须在1(最佳速度)到9(最佳压缩)之间,越高的压缩级别将减少网络使用,但会增加cpu使用.
protocol: "http" #指定APM Server到Elasticsearch之间数据传输使用的http协议
username: "elastic" #连接到Elasticsearch的基本身份验证用户名
password: "26tBktGolYCyZD2pPISW" #连接到Elasticsearch的基本身份验证密码
worker: 3 #每个配置的主机发布事件到Elasticsearch的工作者数量,这最好在启用负载平衡模式时使用,例如:如果您有2个主机和3个worke,那么总共启动6个worker(每个主机3个)
更多常用配置见:apm-server.yml更多配置讲解
1.RPM 启动
service apm-server start
RPM日志默认输出至 : /var/log/messages
2.TAR 包方式启动
[root@elastic /]# cd /usr/local/apm-server/
[root@elastic apm-server]# ./apm-server test config #启动测试
Config OK
[root@elastic /]# nohup /usr/local/apm-server/apm-server run -c /usr/local/apm-server/apm-server.yml &
TAR 日志默认输出至: /path/to/logs/apm-server
APM Agents官方提供了很多语言的代理,如下:有了这些代理的支持,我们就可以通过官方提供的方式对我们的应用程序进行监控,我这里就以我们公司为例,介绍SpringBoot
架构代理以及Tomcat
容器监控案例。
1.下载 APM Agents
下载官方提供的Agents jar包
mkdir /usr/local/jar
wget -P /usr/local/jar https://search.maven.org/remotecontent?filepath=co/elastic/apm/elastic-apm-agent/1.12.0/elastic-apm-agent-1.12.0.jar
2.启动APM Agents
java -javaagent:/usr/local/jar/elastic-apm-agent-1.12.0.jar \ #指定APM Agents的 Jar包
-Delastic.apm.service_name=my-springboot \ #指定我们要监控的名称,可自定义
-Delastic.apm.server_url=http://192.168.31.215:8200 \ #指定APM Server的地址及端口,由APM Agents收集数据后发送
-Delastic.apm.application_packages=com.xwl \ #指定我们的SprintBoot项目中的应用包名称
-jar xwl-spring-boot-project-0.0.1-SNAPSHOT.jar --server.port=8888 #指定我们要监控的SprintBoot项目、端口
我这里的springboot项目是一个测试页面,非常简单的一个页面,没有连接redis及数据库,这里只做测试使用,提供下载地址:点击下载
Tomcat部署方式略
1.将配置添加至catalina.sh
中
vim bin/catalina.sh
JAVA_OPTS="-javaagent:/usr/local/jar/elastic-apm-agent-1.12.0.jar \
-Delastic.apm.service_name=crm-new \
-Delastic.apm.server_url=http://192.168.31.215:8200 \
-Delastic.apm.application_packages=com.micvs"
2.重启Tomcat并确保环境变量加载成功
ps -ef | grep java #确保Tomcat进程中有我们加入的配置
https://www.elastic.co/guide/en/apm/get-started/7.4/index.html