iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0
Elastic Stack on Cloud

ES 新手,破門而入!!!系列 第 15

【ES新手,破門而入!】Day15 - 當 APM 來敲門之入口 B

  • 分享至 

  • xImage
  •  

你可以學到?

今天,我們將從實作中更深入了解 APM agents 。

本篇的主題包含有:

  1. 設置 APM agents

那我們就開始吧!

動手實作 EP11:設置 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 agents 破門而入

這一部分的實作,我們將可以學到:

  • 設置 APM agents 並探索由 agents 所收集的資料
  1. 延續昨天的實作,不過要先修改 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

  1. 修改完設置檔後,啟動 APM server(./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
  1. 再開啟一個 terminal,並且 ssh 連線到 server1,我們要開啟後端應用來服務前端,移動到 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_serverapm_server_js 這兩個參數,他們有什麼差別呢?
apm_server:給後端使用的資訊,所以不需要修改,因為是和 APM server 一起運行在同一台機器上。
apm_server_js:給前端使用的資訊,所以需要修改,因為會在客戶端的瀏覽器運行,必須要知道如何聯繫上 APM server。

  1. 修改完後就可以啟動後端(npm start),然後就可以到 <Public_DNS>:4000 位址,就可以看到 PetClinic 的首頁啦!一樣隨意到處點點、看看,讓它產生一些資料給 APM server 傳送。

  1. 這時候在 Kibana 的 APM 下,從昨天的找不到服務到今天出現東西啦!可喜可賀~

  1. 點到 Traces 分頁,就可以看到不同的軌跡資料:

  1. 回到 Services,隨意點進去一個應用服務,就可以看到詳細的 TranscationsErrors

  1. Errors 下,我們看看 No message available 這個種類,就可以看到錯誤的一些細節跟源頭:

今日心得與短結

呼~總算結束了 Observability 的系列了!這一連串也讓我瞭解到以前都沒碰到的資料類型,是怎麼產生、紀錄、儲存與分析的,也了解到日常維運一個系統其實背後要偵測這麼多數據和資料,各位 DevOps 工程師大大們真的辛苦了~

今天我們學到了如何設置 APM agents 來收集傳送軌跡資料,接下來我們將邁入視覺化工具最重要的部分:Kibana!


上一篇
【ES新手,破門而入!】Day14 - 當 APM 來敲門之入口 A
下一篇
【ES新手,破門而入!】Day16 - 戴上 Kibana 看著資料的北半球
系列文
ES 新手,破門而入!!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言