Skywalking是一個分佈式系統的應用程序性能監視工具,專爲微服務、雲原生架構和基於容器(Docker、K8s、Mesos)架構而設計。SkyWalking 是觀察性分析平臺和應用性能管理系統。提供分佈式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。支持Java, .Net Core, PHP, NodeJS, Golang, LUA語言探針,支持Envoy + Istio構建的Service Mesh。html
快速安裝
本案例將skywalking中的數據存儲在elasticesearch中,須要提早安裝好elasticsearch7.x,能夠參考這篇文章(https://www.fangzhipeng.com/springboot/2020/06/01/sb-es.html)安裝,固然skywalking能夠將數據存儲在其餘數據庫中,好比mysql、infludb等。前端
去官網下載apache-skywalking的安裝包,本案例是須要將監控數據存儲在elasticesearch中,因此使用apache-skywalking-apm-es7-6.6.0.tar.gz這個jar包,而且須要安裝elasticsearch7.x。執行下面的命令下載skywalkingjava
wget https://www.apache.org/dyn/closer.cgi/skywalking/6.6.0/apache-skywalking-apm-es7-6.6.0.tar.gz
執行tar -zxvf apache-skywalking-apm-es7-6.6.0.tar.gz,解壓apache-skywalking-apm-es7-6.6.0.tar.gz,解壓後的目錄以下:mysql
agent bin config LICENSE licenses logs mesh-buffer NOTICE oap-libs README.txt trace-buffer webapp
主要目錄結構以下:git
- bin目錄存放的是啓動腳本,包含oapService.sh、webappService.sh等啓動腳本
- config是oap服務的配置,包含一個application.yml的配置我呢
- agent是skywalking的agent,通常用來採集業務系統的日誌
- webapp目錄是skywalking前端的UI界面服務的配置
總體的架構以下:github
在整個skywalking的系統中,有四個角色:web
- skywalking agent和業務系統綁定在一塊兒,負責收集各類監控數據
- Skywalking oapservice是負責處理監控數據的,好比接受skywalking agent的監控數據,並存儲在數據庫中(本案例使用elasticsearch);接受skywalking webapp的前端請求,從數據庫查詢數據,並返回數據給前端。Skywalking oapservice一般以集羣的形式存在。
- skywalking webapp,前端界面,用於展現數據。
- 用於存儲監控數據的數據庫,好比mysql、elasticsearch等。
啓動Skywalking oapservice
修改oapservice的配置文件,在config目錄下的application.yml文件中。spring
cluster: standalone: storage: elasticsearch7: nameSpace: ${SW_NAMESPACE:"my-application"} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost: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:""} user: ${SW_ES_USER:""} password: ${SW_ES_PASSWORD:""} indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2} indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0} recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000} metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
- cluster.standalone集羣以單體的形式存在
- storage.elasticsearch7,存儲使用elasticsearch7.x版本。
- storage.elasticsearch7.clusterNodes填elasticsearch的
在bin目錄下執行 oapService的啓動腳本sql
sh oapService.sh
oapService服務暴露了2個端口,分別爲收集監控數據的端口11800和接受前端請求的端口12800。shell
啓動skywalking webapp
skywalking webapp是用於展現數據的前端界面,在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
- server.port是webapp的啓動端口
- collector.ribbon.listOfServers 填寫Skywalking oapservice的端口。
在bin目錄下執行webappService的啓動命令:
sh webappService.sh
spring boot項目集成
將agent目錄拷貝到部署spring boot項目的機器裏,修改agent的配置,配置在agent/config/agent.config:
agent.service_name=${SW_AGENT_NAME:my-skywalking} collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800} # Logging file_name logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log} # Logging level logging.level=${SW_LOGGING_LEVEL:DEBUG}
- agent.service_name填和springboot的application.name便可,也能夠隨意取名字,可是不要和其餘應用重名。
- collector.backend_service填寫oapService的地址,端口填11800。
以javaagent的形式啓動springboot工程:
java -javaagent:/root/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -jar boot-es-0.0.1-SNAPSHOT.jar
- -javaagent:/root/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar,指定javaagent的目錄,即skywalking-agent.jar在機器上的絕對路徑。
- boot-es-0.0.1-SNAPSHOT.jar的源碼下載地址爲https://github.com/forezp/distributed-lab/tree/master/boot-es
簡單測試
在boot-es-0.0.1-SNAPSHOT.jar啓動的機器上調用如下接口:
curl localhost:8500/testInsert curl localhost:8500/testGetAll
在瀏覽上訪問skywalking webapp的地址,好比本文中skywalking webapp安裝在本地,即訪問localhost:8080,首頁展現以下(若是數據展現不出來,嘗試清空緩存重試,前端貌似不是很給力),展現了接口請求的一些數據:
拓撲圖以下:
接口數據調用詳情以下:
源碼下載
https://github.com/forezp/distributed-lab/tree/master/boot-es