SkyWalking是分布式的應用性能管理APM(Application Performance Monitoring)工具,也被稱為分布式追蹤系統。本文介紹使用阿里云Elasticsearch 7.4版本的實例與SkyWalking,實現對實例的全鏈路監控。
背景信息
SkyWalking具有以下特性:
全自動探針監控,不需要修改應用程序代碼。
手動探針監控,提供了支持OpenTracing標準的SDK。覆蓋范圍擴大到OpenTracing-Java支持的組件。
說明OpenTracing支持的組件請參見OpenTracing Registry。
自動監控和手動監控可以同時使用,使用手動監控彌補自動監控不支持的組件,甚至私有化組件。
純Java后端分析程序,提供RESTful服務,可為其他語言探針提供分析能力。
高性能純流式分析。
SkyWalking的架構圖如下。
SkyWalking的核心在于數據分析和度量結果的存儲平臺部分,通過HTTP或gRPC方式向SkyWalking Collector提交分析和度量數據。SkyWalking Collector對數據進行分析和聚合,存儲到Elasticsearch、H2、MySQL、TiDB等其一即可,最后通過SkyWalking UI的可視化界面查看分析結果。Skywalking支持從多個來源和多種格式收集數據,支持多種語言的Skywalking Agent 、Zipkin v1/v2 、Istio勘測、Envoy度量等數據格式。
本文介紹SkyWalking與阿里云Elasticsearch 7.4版本的集成配置,您也可以通過Skywalking客戶端上報Java應用數據,詳細信息,請參見通過SkyWalking上報Java應用數據。SkyWalking支持的中間件和組件,請參見SkyWalking官方文檔。
前提條件
您已完成以下操作:
創建阿里云Elasticsearch實例,本文使用7.4.0版本。
具體操作步驟,請參見創建阿里云Elasticsearch實例。
準備一臺Linux服務器,并在服務器中安裝JDK,要求JDK版本為1.8.0及以上版本。
建議您使用阿里云ECS服務器。購買ECS服務器的方法,請參見步驟一:創建ECS實例。
說明安裝JDK的方式,請參見步驟三:安裝JDK。如果未正確安裝JDK,啟動SkyWalking后查看日志,可能會顯示Java not found或者java-xxx: No such file or directory報錯。
確保Linux服務器的8080、10800、11800、12800端口不被占用。
關閉Linux服務器的防火墻及SELinux。
操作流程
步驟一:下載并安裝SkyWalking
在Linux服務器中,下載SkyWalking。
本文使用的是Elasticsearch 7.4.0版本,選擇Binary Distribution for ElasticSearch 7二進制包。下載命令如下。
wget https://archive.apache.org/dist/skywalking/7.0.0/apache-skywalking-apm-es7-7.0.0.tar.gz
解壓。
tar -zxvf apache-skywalking-apm-es7-7.0.0.tar.gz
查看解壓后的文件。
ls apache-skywalking-apm-bin-es7/
返回結果如下。
total 92 agent bin config LICENSE licenses NOTICE oap-libs README.txt tools webapp
步驟二:配置SkyWalking與Elasticsearch連通
在config目錄下,打開application.yml文件。
cd apache-skywalking-apm-bin-es7/config/ vi application.yml
定位到
storage
部分,將默認的H2存儲庫改為elasticsearch7,并按照以下說明配置。storage: selector: ${SW_STORAGE:elasticsearch7} elasticsearch7: nameSpace: ${SW_NAMESPACE:"skywalking-index"} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:es-cn-4591kzdzk000i****.public.elasticsearch.aliyuncs.com:9200} protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} # trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"} # trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""} enablePackedDownsampling: ${SW_STORAGE_ENABLE_PACKED_DOWNSAMPLING:true} # Hour and Day metrics will be merged into minute index. dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index. user: ${SW_ES_USER:"elastic"} password: ${SW_ES_PASSWORD:"es_password"}
說明SkyWalking服務默認使用H2存儲,不具有持久存儲的特性,所以需要將存儲組件修改為elasticsearch。
參數
說明
selector
存儲選擇器。本文設置為elasticsearch7。
nameSpace
命名空間。Elasticsearch實例中,所有索引的命名會使用此參數值作為前綴。
clusterNodes
指定Elasticsearch實例的訪問地址。由于實例與SkyWalking不在同一專有網絡VPC(Virtual Private Cloud)下,因此要使用公網訪問地址,獲取方式請參見查看實例的基本信息。
user
Elasticsearch實例的訪問用戶名,默認為elastic。
password
對應用戶的密碼。elastic用戶的密碼在創建實例時指定,如果忘記可重置。重置密碼的注意事項和操作步驟,請參見重置實例訪問密碼。
重要配置中僅指定用戶名和密碼即可,請注釋trustStorePath和trustStorePass,否則會報錯NoSuchFileException:../es_keystore.jks。
可選:修改監聽的IP地址或端口號。
SkyWalking默認使用12800作為Rest API通信端口,11800為gRPC API端口,可在application.yml文件的core中修改,本文使用默認配置。
core: selector: ${SW_CORE:default} default: # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate # Receiver: Receive agent data, Level 1 aggregate # Aggregator: Level 2 aggregate role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator restHost: ${SW_CORE_REST_HOST:0.0.0.0} restPort: ${SW_CORE_REST_PORT:12800} restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/} gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0} gRPCPort: ${SW_CORE_GRPC_PORT:11800}
可選:在webapp目錄下,修改webapp.yml配置。
本文使用默認配置,您也可以根據具體需求修改。
server: port: 8080 collector: path: /graphql ribbon: ReadTimeout: 10000 # Point to all backend's restHost:restPort, split by , listOfServers: 127.0.0.1:12800
步驟三:驗證結果
在Linux服務器中,啟動SkyWalking。
cd ../bin ./startup.sh
重要在啟動SkyWalking前,請確保Elasticsearch實例為正常狀態。
執行
./startup.sh
命令,會同時啟動Collector和UI。
啟動成功后,返回如下結果。
SkyWalking OAP started successfully! SkyWalking Web Application started successfully!
在瀏覽器中,訪問http://<Linux服務器的IP地址>:8080/。
說明初次使用SkyWalking連接Elasticsearch服務,啟動會比較慢。因為SkyWalking需要向Elasticsearch服務創建大量的index,所以在未創建完成之前,訪問這個頁面會顯示空白。此時您可以通過查看日志來判斷啟動是否完成,日志路徑為
<SkyWalking的安裝路徑>logs/skywalking-oap-server.log
。參見登錄Kibana控制臺,登錄對應Elasticsearch實例的Kibana控制臺,執行
GET _cat/indices?v
命令查看索引數據。根據返回結果,可以看到Elasticsearch實例中包含了大量以
skywalking-index
開頭的索引。