五分鐘體驗SpringBoot+Skywalking

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

相關文章
相關標籤/搜索