前面的章节介绍了 Elastic APM,由於 Elastic APM 的运作,会需要有实际的应用程序及服务,让使用者把 APM Agent 埋进去,同时也要有足够复杂的情境,才能展示 APM 的相关功能,因此在这边直接使用 Elastic 官方所提供的一个开放原始码的专案 - APM Integration Testing,让我们透过这个专案所建立的情境,快速的架设一组实际的 Elastic APM 解决方案及实用实例,从中学习 Elastic APM 的布署方式与使用方法。
APM Integration Testing 是一个公开在 GitHub 的开放原始码的专案,这个专案主要语言是用 Python 撰写,并且使用 Docker 来运作 Elastic Stack 的各种服务以及 opbeans 这个 Demo 专用的库存管理系统,让我们能够拥有一个 Elastic APM 所需要执行的情境,并且能够将当中的某些元件替换成真实运作的版本,可以协助开发人员进行 debug,或是协助整合测试 (Integration Test) 所需使用的复杂的环境。
以下几种角色,是 APM Integration Testing 的 Docker Containers 运作起来时,里面有的角色:
APM Integration Testing 就是以这些角色组成一个让我们可以进行测试及使用的环境,以下画面,是使用预设配置所建立的环境当中所包含的角色:
接下来说明安装 APM Integration Testing 的步骤及要注意的事项。
在执行 APM Integration Testing 的环境,我们会需要准备:
注意:Mac M1 目前实测 build 到 RUM 的部份时,会发生 chrome 相关套件的错误,所以请不要用 M1 来执行。
要执行 APM Integration Testing,首先我们将整个专案从 GitHub 抓下来:
git clone https://github.com/elastic/apm-integration-testing.git
里面有一个 Python 程序 ./scripts/compose.py
,会是主要的执行档,我们先透过这们程序来安装一个『完整版』的环境:
./scripts/compose.py start --all 7.15.0 --release
主要的参数如下:
start
:初始化并且启动整个所有的环境。--all
:完整版的各种服务及元件都会进行安装7.15.0
:Elastic Stack 的指定版本--release
:使用 release 的版本 (如果不指定的话,会使用 snapshot 的版本)。其他可选用的参数,因为支援的参数非常非常多,我这边只举几个例子:
--with-opbeans-java
:当我们不使用 --all
时,可以指定我们要安装哪些版本的 opbeans 环境。
--no-apm-server
:不要启动 APM Server。
--no-kibana
、 --no-elasticsearch
:不要启动 Kibana、Elasticsearch,也可以另外指定外部的 Elasticsearch 或 Kibana。
--with-dyno
:启动 Dyno Mode。
一开始执行时,因为会 build 相关的 Docker image,会跑蛮久的,以下是执行的 gif 画面。
当执行完 start
之後,会在执行的目录底下,建立一个 docker-compose.yml
的档案,并且实际执行的运作,就是透过 docker-compose
运作起来。
因此我们後续可以使用 docker-compose stop
、 docker-compose up
等指令来停止或启动,也可以直接去修改 docker-compose.yml
里面的一些配置。
当安装及布署完成之後,我们可以直接从 Kibana 查看,这边注意预设是有开启 X-Pack Security
,并且预设的密码会是 changeme
:
登入之後,我们就可以在 Observability 的画面,查看由 APM Integration Testing 这个环境及里面的流量产生工具,所产生出来的各种服务存取的资讯,我们就有许多 APM 的资料可以来查看 APM 所提供的功能。
以下是使用 gif 档来录制操作的画面:
APM Dyno 是一个能帮我们在 opbeans 的这些运作的 demo 环境之中,建立出一些情境,这些情境是能协助我们进行压测时,能模拟出更接近真实情境的环境,
例如:
这些功能有透过 UI 的方式让我们能直接进行调整,并且可以针对某一台 Container 进行指定。
不过 Dyno mode 只有提供 opbeans-python
版本能使用,并不是所有的 opbeans 版本都支援。
注意:官方文件写的指令
--dyno
实际使用时发现是写错的,是要带入--with-dyno
才是正确的。
文件中有特别提到,如果使用的是 AWS、GCP 这种云端主机服务时,要用 APM Integration Testing 的这个工具,可以透过 port forwarding 的方式来转接。
例如以下在 ~/.ssh/config
定义 gcptunnel
的这台主机:
Host gcptunnel
HostName <my.gcp.host.ip>
IdentityFile ~/.ssh/google_compute_engine <--- yours may differ
User jamie <--- yours probably differs
Compression yes
ExitOnForwardFailure no
LocalForward 3000 127.0.0.1:3000
LocalForward 3001 127.0.0.1:3001
LocalForward 3002 127.0.0.1:3002
LocalForward 3003 127.0.0.1:3003
LocalForward 3004 127.0.0.1:80
LocalForward 5601 127.0.0.1:5601
LocalForward 8000 127.0.0.1:8000
LocalForward 9200 127.0.0.1:9200
LocalForward 9222 127.0.0.1:9222
并使用 ssh gcptunnel
来执行。
查看最新 Elasticsearch 或是 Elastic Stack 教育训练资讯: https://training.onedoggo.com
欢迎追踪我的 FB 粉丝页: 乔叔 - Elastic Stack 技术交流
不论是技术分享的文章、公开线上分享、或是实体课程资讯,都会在粉丝页通知大家哦!
>>: 【领域展开 18 式】 我的 Bluehost 帐密不是我 WordPress 的帐密
定义 指的是用一段连续的储存单元一次储存线性串列的资料元素 优缺 优点: 无须为表示串列中元素之间的...
安装套件 Visual Studio Code 上有很多方便编写程序的扩充套件,能让我们在使用上更加...
新增一个测试页 主要是进行对资料库的动作 还有前端的展示 可以在浏览器上按F5就快速新增测试资料到资...
前置作业 复制程序码 还记得前天最後建立的资料夹吗,把它用 VS code 打开,再建立一个 php...
早起运动Day11 - 来自周遭的祝福 「你知道吗?当时最让我触动的地方,是你接受了我的情绪。...