Introduction

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服务变为可能。

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监控核心应用指标

APM可以做到监控应用的以下几种状态

  • 监控请求响应时间
  • 监控未处理的错误及异常
  • 可视化条用关系
  • 发现性能瓶颈
  • 代码下钻

Elasticsearch安装部署

详见:https://elk.abcops.cn/elasticsearch_cluster_cert/

Kibana安装部署

详见:https://elk.abcops.cn/elasticsearch_cluster_cert/#kibana

APM Srever安装部署

进入Kibana界面,点击APM,然后设置说明

可根据你的环境进行APM版本的部署

下载并解压缩APM Server

以下介绍两种部署方式

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更多配置讲解

启动APM Server

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 Server是采用Go语言开发

检查APM Server状态

点击检查APM Server状态

APM Agents代理部署

APM Agents官方提供了很多语言的代理,如下:有了这些代理的支持,我们就可以通过官方提供的方式对我们的应用程序进行监控,我这里就以我们公司为例,介绍SpringBoot架构代理以及Tomcat容器监控案例。

APM Server监控SpringBoot

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及数据库,这里只做测试使用,提供下载地址:点击下载

3.访问SprintBoot项目

4.页面检测APM Agents

5.APM页面介绍

APM Server监控Tomcat项目

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进程中有我们加入的配置

3.页面查看

参考文献

https://www.elastic.co/guide/en/apm/get-started/7.4/index.html

本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0

欢迎来到Elastic Stack技术栈~~