《Elastic(中国)基础开发宝典》——添加免费且开放的 Elastic APM 作为Elastic可观测性部署的一部分(下)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 《Elastic(中国)基础开发宝典》——添加免费且开放的 Elastic APM 作为Elastic可观测性部署的一部分(下)

《Elastic(中国)基础开发宝典》——添加免费且开放的 Elastic APM 作为Elastic可观测性部署的一部分(上):https://developer.aliyun.com/article/1220747?spm=a2c6h.13148508.setting.18.5c6c4f0eIizOJG


4. 使用 Elastic APM 代理装载示例代码


各种语言代理的指令会因编程语言而有所不同,但大致流程相似。首先,在语言的本机规范中添加代理的依赖项,然后配置代理,让它知道如何查找 APM 服务器。


您可以尝试任何您喜欢的类型,但我将使用我找到的全栈 Ruby 示例来演练 Ruby on Rails 说明。我在运行这个示例时确实遇到了一个问题,原来是类似于这个的 bootsnap 缓存问题。这个问题通过在我的 docker 文件中添加一行就可以解决:

volumes: 
 - .:/app 
 # 不要挂载 tmp 目录 
 - /app/tmp

它包含在我的上述存储库的分叉中。


5. 获取示例代码(也可用自己的代码)


首先,我克隆 GitHub 存储库,然后更改到以下目录:

git clone 
https://github.com/jamiesmith/docker-rails-example.git
cd docker-rails-example

(如果没有安装git,只需下载一个zip文件并将其解压缩即可)


6. 添加依赖项


按照说明,我编辑了项目的依赖项规范(如果用的是Ruby,那就是Gemfile),并添加了 gem 'elastic-apm'


我把它放在了靠近顶部的位置:

source 'https://rubygems.org' 
git_source(:github) { |repo| 
"https://github.com/#{repo}.git" } 
ruby '2.7.2' 
# 启用 Elastic APM 
gem 'elastic-apm' 
# 捆绑边缘 Rails 代替:gem 'rails', github: 'rails/rails' 
gem 'rails', '~> 6.1.0'

保存文件并继续下一步一开始配置代理。


请注意,完整的Gemfile作为Gemfile.elastic-apm包含在存储库中。


7. 配置代理


代理需要将应用程序跟踪数据发送到APM服务器,所以必须能够访问到它。如果您 还记得,我们的配置是侦听主机IP因此子网中的任何应用程序都可以向它发送数 据。我们需要在项目中添加另一个文件,以在项目开始时进行选取。在项目顶部的 config目录下新建一个文件,并添加以下类似于docs的注释

# 设置服务名称 - 允许使用的字符:a-z、A-Z、0-9、-、_ 和空格
# 默认为 Rails 应用的名称
service_name: 'my-service' 
# APM 服务器需要密钥令牌时使用
# secret_token: '' 
# 设置自定义 APM 服务器 URL(默认:http://localhost:8200)
server_url: 'http://192.168.1.175:8200' # 设置服务环境
environment: 'production'

对上述注释的一些解释:


service_name:如果您忽略此项,它将默认为应用程序的名称,但您可以在此 处覆盖这个名称;

secret_token:使用密钥令牌,您可以授权对APM服务器的请求,但APM服 务器必须设置了 SSL/TLS,并且已设置密钥令牌。我们没有在代理和APM服务 器之间使用HTTPS因此我们会将这项注释掉

server_url:这是代理能够访问APM服务器的方式请将它替换为主机的名称 或IP;

environment:这允许您向服务添加元数据。例如,您可能在QA中有一个版 本,在生产中有另一个版本。


请注意示例config文件作为config/eastic_apm.ymLeastic-apm包含在存储库中。


至此,Elastic APM端的配置已经完成,接下来只需按照README中的步骤启动即 可。我们复制两个文件,然后构建并运行:

cp .env.example .env
cp docker-compose.override.yml.example
docker-compose.override.yml
docker-compose up --build

构建步骤将需要几分钟的时间。完成后,在同一目录的另一个终端窗口中,运行./run rails db:setup来设置初始数据库。


您可以通过访问 http://localhost:8000 http://localhost:8000/up 前往正在运行 的示例应用程序。虽然样本数量不多,但它确实生成了一些APM数据。要生成一点 负载,您可以重新加载几次,也可以运行一个快速加载的小脚本:

while [ 1 ]
do
curl localhost:8000/up
curl localhost:8000 sleep 1
done

这样每秒都会重新加载页面。


返回Kibana,重新转到APM应用单击汉堡图标然后选择APM),您应该会看 到新的my service服务(我运行了我的服务所以它显示了更多的历史记录):

image.png

 

服务概述页面对服务运行状况提供了一个总体性的概述。如果您是开发人员或SRE, 可以从这个页面中查看以下几个方面:


新部署对性能有何影响?

对哪些事务的影响最大?

性能如何与底层基础架构相关联?


这个视图列出了在指定时间段内(本例中为过去15分钟Elastic APM发送应用 程序跟踪数据的所有应用程序。此外,还有以迷你图形式显示延迟、吞吐量和错误 率的波形图。单击my-service,即会转到服务概述页面,其中显示了服务中的各种 事务(回想一下,我的脚本正在命中//up终端它们是PageController的一部 分,如事务部分所示)。我们看到的图表,比如延迟、吞吐量、错误和错误率(目前 尚未出现错误)会更大,并且列出了此服务所依赖的服务和应用程序,在本例中, 它所依赖的唯一服务是Postgres:

image.png 当您在真实负载下装载实际应用程序时,您将看到更多的连接(和错误!)

image.png

单击事务视图中的事务(在本例中,显示的是我们示例应用的PagesController#up 事务)我们可以确切地看到调用了哪些操作:

image.png

 

或者,如果是更为复杂的调用其他微服务和外部服务的事务,我们看到的细节会更多:

image.png

包括有关调用外部服务(如数据库查询)的详细信息:

image.png


8.后续操作


至此,您的Elastic可观测性集群已设置好并开始运行,收集了开箱即用的应用程序 跟踪数据。接下来会探索您的应用程序所用语言的公共API,这会让您将APM数据 提升到下一个级别。使用这些API,您可以添加定制元数据,定义业务事务创建定 制范围等。您可以在APM代理文档页面上找到各种APM代理(例如JavaRuby 等)的公共API规范。如果您想了解有关Elastic APM的更多信息,请查看关于Elastic APM转向云原生的网络研讨会,了解Elastic APM可在您的生态系统中助您一臂之力的其他方式。



相关文章
|
2月前
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
260 1
|
5天前
|
监控 Java API
如何在Spring Boot中集成Elastic APM进行应用性能监控
如何在Spring Boot中集成Elastic APM进行应用性能监控
|
2月前
|
存储 Prometheus 运维
【阿里云云原生专栏】云原生下的可观测性:阿里云 ARMS 与 Prometheus 集成实践
【5月更文挑战第25天】阿里云ARMS与Prometheus集成,为云原生环境的可观测性提供强大解决方案。通过集成,二者能提供全面精准的应用监控,统一管理及高效告警,助力运维人员及时应对异常。集成示例代码展示配置方式,但需注意数据准确性、监控规划等问题。这种集成将在云原生时代发挥关键作用,不断进化以优化用户体验,推动业务稳定发展。
151 0
|
编解码 人工智能 运维
《云原生架构容器&微服务优秀案例集》——01 互联网——核桃编程 基于 ARMS 构建可观测体系,全方位提升用户体验
《云原生架构容器&微服务优秀案例集》——01 互联网——核桃编程 基于 ARMS 构建可观测体系,全方位提升用户体验
255 0
|
运维 Prometheus 监控
《云原生架构容器&微服务优秀案例集》——03 零售/电商——传音 基于 ARMS 构建全球一体化可观测平台高效支撑业务创新
《云原生架构容器&微服务优秀案例集》——03 零售/电商——传音 基于 ARMS 构建全球一体化可观测平台高效支撑业务创新
493 0
|
Prometheus 监控 Cloud Native
带你读《企业级云原生白皮书项目实战》——4.3.1 ARMS概述
带你读《企业级云原生白皮书项目实战》——4.3.1 ARMS概述
114 0
|
数据采集 监控 Kubernetes
带你读《企业级云原生白皮书项目实战》——4.3.2 ARMS优势
带你读《企业级云原生白皮书项目实战》——4.3.2 ARMS优势
120 0
|
SQL 监控 Cloud Native
带你读《企业级云原生白皮书项目实战》——4.3.3ARMS最佳实践(上)
带你读《企业级云原生白皮书项目实战》——4.3.3ARMS最佳实践(上)
111 0
|
监控 Cloud Native 前端开发
带你读《企业级云原生白皮书项目实战》——4.3.3ARMS最佳实践(下)
带你读《企业级云原生白皮书项目实战》——4.3.3ARMS最佳实践(下)
122 0
|
2月前
|
监控 Java 索引