今天,我們將從實作中更深入了解 APM agents 。
本篇的主題包含有:
那我們就開始吧!
在開始前,我們先來了解一下整個實作的架構會是怎麼樣的:
我們已經將與 APM Server 一起運行的 Elasticsearch 設置好傳送資料到那,並而將Kibana 設置為從那裡檢索資料。在接下來的步驟中,我們將啟動 Petclinic(示範應用的名字而已,不是什麼專有名詞XD),然後通過 Kibana 中的 APM UI 探索軌跡資料。
Petclinic 是一可分為三個微服務的應用程式,核心是用 REST API 實現,連接到資料庫伺服器,其是通過 Spring 框架實現的,並偵聽 port 8080。
前端是一個運行在客戶端瀏覽器上的 React 應用程式,並通過Node.js提供服務。
後端通過 port 4000 接收的所有前端請求。
我們會使用 Java agent 來監控應用程式核心,使用 RUM 代理來監控 React 前端,並使用 Node.js 來監控後端。
這一部分的實作,我們將可以學到:
apm-server.yml
的部分,修改的部份如下:將 localhost:8200
改成 0.0.0.0:8200
的原因是需要將 APM server 公開到 Internet ,才能從瀏覽器上運行的客戶端接收資料。apm-server:
# 定義 host 和 port 讓 APM server 偵聽
host: "0.0.0.0:8200"
rum:
# 啟動 real user monitoring (RUM)
enabled: true
./apm-server -e
),接著再開啟一個 terminal,並且 ssh 連線到 server1,然後啟動 Petclinic 應用程式核心:java -javaagent:/home/elastic/petclinic/elastic-apm-agent-1.12.0.jar \
-Delastic.apm.service_name=petclinic-spring \
-Delastic.apm.server_urls=http://server1:8200 \
-jar /home/elastic/petclinic/spring-petclinic-1.5.16.jar
petclinic/frontend
下,編輯 config.js
這個檔案內的 apm_server_js
參數,改成 <Public_DNS>
的位址:var config = {
apm_server: process.env.ELASTIC_APM_SERVER_URL || 'http://localhost:8200',
apm_server_js: process.env.ELASTIC_APM_SERVER_JS_URL || '<Public_DNS>:8200',
apm_service_name: process.env.ELASTIC_APM_SERVICE_NAME || 'petclinic-node',
apm_client_service_name: process.env.ELASTIC_APM_CLIENT_SERVICE_NAME || 'petclinic-react',
apm_service_version: process.env.ELASTIC_APM_SERVICE_VERSION || '1.0.0',
api_server: process.env.API_SERVER || 'http://localhost:8080',
api_prefix: process.env.API_PREFIX || '/petclinic/api',
address_server: process.env.ADDRESS_SERVER || 'http://localhost:5000',
distributedTracingOrigins: process.env.DISTRIBUTED_TRACINGS_ORIGINS || 'http://petclinic-client:3000,http://petclinic-server:8000,http://localhost:4000,http://localhost:8080,http://localhost:8081'
}
module.exports = config;
你可能會注意到有
apm_server
和apm_server_js
這兩個參數,他們有什麼差別呢?apm_server
:給後端使用的資訊,所以不需要修改,因為是和 APM server 一起運行在同一台機器上。apm_server_js
:給前端使用的資訊,所以需要修改,因為會在客戶端的瀏覽器運行,必須要知道如何聯繫上 APM server。
npm start
),然後就可以到 <Public_DNS>:4000
位址,就可以看到 PetClinic 的首頁啦!一樣隨意到處點點、看看,讓它產生一些資料給 APM server 傳送。No message available
這個種類,就可以看到錯誤的一些細節跟源頭:呼~總算結束了 Observability 的系列了!這一連串也讓我瞭解到以前都沒碰到的資料類型,是怎麼產生、紀錄、儲存與分析的,也了解到日常維運一個系統其實背後要偵測這麼多數據和資料,各位 DevOps 工程師大大們真的辛苦了~
今天我們學到了如何設置 APM agents 來收集傳送軌跡資料,接下來我們將邁入視覺化工具最重要的部分:Kibana!