通過Elasticsearch應用效能監控APM(Application Performance Monitoring)服務,結合Elasticsearch,您可以搭建應用效能監控系統,實現系統的可觀測性。本文介紹如何通過自建APM Server將資料擷取至Elasticsearch。
背景資訊
可觀測性的本質是度量您的基礎設施、平台和應用程式,以瞭解它是如何啟動並執行。與傳統監控營運相比,目前主流的監控更加註重發現與預警問題,而可觀測性的目標是為一個複雜分布式系統所發生的一切給出合理解釋。監控更注重軟體的交付過程中以及交付後的服務狀態,而可觀測性則要為全研發與營運的生命週期負責。
日誌、基礎架構指標以及APM應用程式效能監測構成了可觀測性的三要素。其中,APM彌補了指標和日誌之間的差距。雖然日誌和指標往往更具交叉性,涉及基礎架構和組件,但APM更側重於應用程式,允許IT和開發人員監測其堆棧的應用程式層,包括最終的使用者體驗。將APM添加到系統監測中,您可以:
瞭解服務的時間花在什麼上,以及它崩潰的原因。
瞭解服務如何相互互動,以及它的可視化瓶頸。
主動發現並修複效能瓶頸和錯誤。
提高Team Dev的生產力。
在瀏覽器中跟蹤終端使用者體驗。
APM通常被應用於以下情境:
使用者體驗監控:通過監控使用者的行為提升使用者體驗。例如監控使用者和Web介面或用戶端的互動,並記錄互動事件的時間。
運行時應用程式架構:理解服務間的依賴關係、架構中應用程式互動的網路拓撲。
業務事務(Business transaction):產生有意義的SLA報告,並從業務角度提供有關應用程式效能的趨勢資訊。
組件監控(Deep dive component monitoring):通常需要安裝Agent並且主要針對中介層,包括Web伺服器、應用和Message Service器等。健壯的監控應該能顯示代碼執行的清晰路徑,因為這一維度和上述第二個維度緊密相關,APM產品通常會將這兩個維度合并作為一個功能。
分析或報告(Analytics/Reporting):將從應用程式中收集的一系列指標資料,標準化地展現成應用效能資料的通用視圖。
前提條件
已建立Elasticsearch 7.10版本執行個體,具體操作請參見建立Elasticsearch執行個體。
說明建議您選擇開啟Indexing Service索引構建服務和Openstore智能混合儲存,以滿足應用效能監控情境下低成本海量資料寫入及儲存的需求。
已建立阿里雲ECS執行個體,執行個體的作業系統類型需要為Linux。具體操作請參見自訂購買執行個體。
已在阿里雲ECS執行個體中安裝Go語言環境。
說明本文樣本使用Go語言的APM Agent,因此需要安裝Go語言環境。
操作流程
步驟一:搭建APM Server
串連ECS執行個體。
具體操作請參見通過密碼或密鑰認證登入Linux執行個體。
說明本文檔以普通使用者權限為例。
安裝APM Server。
下載APM Server安裝包。
wget https://artifacts.elastic.co/downloads/apm-server/apm-server-7.10.2-linux-x86_64.tar.gz解壓。
tar -zxf apm-server-7.10.2-linux-x86_64.tar.gz
修改APM Server配置。
進入APM Server安裝目錄。
cd apm-server-7.10.2-linux-x86_64/修改yml設定檔。
vim apm-server.yml參考以下樣本修改yml檔案。
apm-server: host: "0.0.0.0:8200" output.elasticsearch: hosts: ["es-cn-*****.elasticsearch.aliyuncs.com:9200"] username: "elastic" password: "[pwd]"參數
說明
apm-server
APM Server的訪問地址。host需要配置為
APM Server的監聽地址:連接埠號碼,本文樣本為:0.0.0.0:8200。output.elasticsearch
輸出端Elasticsearch配置。配置說明如下:
hosts:Elasticsearch執行個體的公網或私網訪問地址,擷取方式請參見查看執行個體的基本資料。
重要如果Elasticsearch執行個體與安裝APM Server的ECS在同一VPC下,可使用私網訪問地址;否則需要使用公網訪問地址,並且需要配置IP地址訪問白名單,詳細資料請參見配置執行個體公網或私網訪問白名單。
username:Elasticsearch執行個體的訪問使用者名稱,預設為elastic。如果您想使用自建使用者,需要為自建使用者指派相應的角色和許可權,詳細資料請參見通過Elasticsearch X-Pack角色管理實現使用者權限管控。
password:對應使用者的密碼。elastic的密碼在建立執行個體時設定,如果忘記可重設,重設密碼的注意事項和操作步驟請參見重設執行個體訪問密碼。
啟動APM Server。
sudo nohup ./apm-server -e > apmserver.log 2>&1 &
步驟二:配置APM Agent
本文以Go語言為例。
安裝APM Agent。
初始化。
sudo go mod init demo安裝Go的APM Agent軟體包。
sudo go get go.elastic.co/apm sudo go get go.elastic.co/apm/module/apmhttp說明如果安裝時提示
golang.org xxxx: i/o timeout的報錯,表示無法訪問golang.org,您需要自行更換下載源。
配置APM Agent。
開啟環境變數設定檔。
vim ~/.bash_profile在環境變數設定檔中,添加以下配置初始化APM Agent,並儲存。
# 設定服務名稱。允許使用的字元:a-z、A-Z、0-9、-、_ 和空格。 # 如果未指定ELASTIC_APM_SERVICE_NAME,將會使用可執行檔名稱。 export ELASTIC_APM_SERVICE_NAME=zijian # 設定定製APM Server URL(預設值:http://localhost:8200)。 export ELASTIC_APM_SERVER_URL= # APM Server需要令牌時使用。 export ELASTIC_APM_SECRET_TOKEN=執行以下命令,使設定檔生效。
source ~/.bash_profile
通過APM Agent檢測應用程式。
建立應用程式範例檔案apm.go。
vim apm.go在apm.go檔案中添加以下內容,並儲存。
您可以使用以下提供的檢測模組之一或直接使用跟蹤器API來檢測Go應用程式。
package main import ( "net/http" "go.elastic.co/apm/module/apmhttp" ) func main() { mux := http.NewServeMux() http.ListenAndServe(":8080", apmhttp.Wrap(mux)) }運行apm.go。
sudo go run apm.go
步驟三:在Kibana中查看並分析APM Server採集的資料
登入目標Elasticsearch執行個體的Kibana控制台。
登入Kibana控制台的具體操作,請參見登入Kibana控制台。
說明本文以Elasticsearch 7.10版本為例,其他版本操作可能略有差別,請以實際介面為準。
根據頁面提示進入Kibana首頁,單擊右上方的Dev tools。
在Console頁簽,運行以下指令碼,開啟自動建立APM onboarding索引。
說明APM Server啟動後Elasticsearch會自動建立APM相關索引,您可在Kibana控制台中查看。除此之外,由於Elasticsearch對自動建立索引的命名規範有要求,APM onboarding索引的命名不符合當前規範,因此您還需要手動開啟自動建立APM onboarding索引。
以下指令碼中的7.10.2為您安裝的APM Server的版本號碼。
PUT _cluster/settings { "persistent": { "action.auto_create_index":"+.*,+apm-7.10.2-onboarding-*,-*" } }查看APM中包含的所有服務。

在頁面左上方單擊
表徵圖,展開左側導覽列。在左側導覽列,單擊Observability下的APM。
在Services頁簽下查看APM的所有服務。
單擊對應服務的名稱,查看並分析資料。