通過Elasticsearch應用性能監控APM(Application Performance Monitoring)服務,結合阿里云Elasticsearch,您可以搭建應用性能監控系統,實現系統的可觀測性。本文介紹如何通過自建APM Server將數據采集至阿里云Elasticsearch。
背景信息
可觀測性的本質是度量您的基礎設施、平臺和應用程序,以了解它是如何運行的。與傳統監控運維相比,目前主流的監控更加注重發現與預警問題,而可觀測性的目標是為一個復雜分布式系統所發生的一切給出合理解釋。監控更注重軟件的交付過程中以及交付后的服務狀態,而可觀測性則要為全研發與運維的生命周期負責。
日志、基礎架構指標以及APM應用程序性能監測構成了可觀測性的三要素。其中,APM彌補了指標和日志之間的差距。雖然日志和指標往往更具交叉性,涉及基礎架構和組件,但APM更側重于應用程序,允許IT和開發人員監測其堆棧的應用層,包括最終的用戶體驗。將APM添加到系統監測中,您可以:
了解服務的時間花在什么上,以及它崩潰的原因。
了解服務如何相互交互,以及它的可視化瓶頸。
主動發現并修復性能瓶頸和錯誤。
提高開發團隊的生產力。
在瀏覽器中跟蹤終端用戶體驗。
APM通常被應用于以下場景:
用戶體驗監控:通過監控用戶的行為提升用戶體驗。例如監控用戶和Web界面或客戶端的交互,并記錄交互事件的時間。
運行時應用程序架構:理解服務間的依賴關系、架構中應用程序交互的網絡拓撲。
業務事務(Business transaction):產生有意義的SLA報告,并從業務角度提供有關應用程序性能的趨勢信息。
組件監控(Deep dive component monitoring):通常需要安裝Agent并且主要針對中間層,包括Web服務器、應用和消息服務器等。健壯的監控應該能顯示代碼執行的清晰路徑,因為這一維度和上述第二個維度緊密相關,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 Server的Agent數據采集對話框中查詢配置,詳細信息請參見步驟二:配置APM Agent。
安裝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的所有服務。
單擊對應服務的名稱,查看并分析數據。