使用skywalking監控springboot項目


 

1、SkyWalking簡介

SkyWalking是國內開源的基於字節碼注入的調用鏈分析以及應用監控分析工具。
特點是支持多種插件,UI功能較強,接入端無代碼侵入。
目前使用廠商最多,版本更新較快,已成為 Apache 基金會頂級項目。
 
它有哪些功能呢?
  • 多種監控手段。可以通過語言探針和 service mesh 獲得監控是數據。
  • 多個語言自動探針。包括 Java,.NET Core 和 Node.JS。
  • 輕量高效。無需大數據平台,和大量的服務器資源。
  • 模塊化。UI、存儲、集群管理都有多種機制可選。
  • 支持告警。
  • 優秀的可視化解決方案。

它的整體架構

整個架構,分成上、下、左、右四部分:

這里,我們舍棄掉 Metric 指標相關,而着重在 Tracing 鏈路相關功能。

  • 上部分 Agent :負責從應用中,收集鏈路信息,發送給 SkyWalking OAP 服務器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 數據信息。而我們目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 數據,傳遞給服務器。
  • 下部分 SkyWalking OAP :負責接收 Agent 發送的 Tracing 數據信息,然后進行分析(Analysis Core) ,存儲到外部存儲器( Storage ),最終提供查詢( Query )功能。
  • 右部分 Storage :Tracing 數據存儲。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多種存儲器。而我們目前采用的是 ES ,主要考慮是 SkyWalking 開發團隊自己的生產環境采用 ES 為主。
  • 左部分 SkyWalking UI :負責提供控台,查看鏈路等等。

2. skywalking 的下載與安裝

下載

下載地址

 

 安裝

解壓后的目錄

 

3. 啟動

在bin目錄下執行startup.bat即可啟動服務

執行startup.bat之后會啟動如下兩個服務:
(1)Skywalking-Collector:追蹤信息收集器,通過 gRPC/Http 收集客戶端的采集信息 ,Http默認端口 12800,gRPC默認端口 11800。
(2)Skywalking-Webapp:管理平台頁面 默認端口 8080

4、配置信息

這里可以用來設置數據存儲,如果是本地也可以先采用默認的,先不做修改,這里只是用來查看使用springboot項目集成skywalking之后的效果,可以不用做修改。

4.1 OAP 配置文件

config/application.yml

主要配置SkyWakling集群方式、數據存儲,配置文件內容如下

core:
  default:
  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}
  downsampling:
    - Hour
    - Day
    - Month
  # Set a timeout on metric data. After the timeout has expired, the metric data will automatically be deleted.
  recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:90} # Unit is minute
  minuteMetricsDataTTL: ${SW_CORE_MINUTE_METRIC_DATA_TTL:90} # Unit is minute
  hourMetricsDataTTL: ${SW_CORE_HOUR_METRIC_DATA_TTL:36} # Unit is hour
  dayMetricsDataTTL: ${SW_CORE_DAY_METRIC_DATA_TTL:45} # Unit is day
  monthMetricsDataTTL: ${SW_CORE_MONTH_METRIC_DATA_TTL:18} # Unit is month
storage:
  h2:
    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
    user: ${SW_STORAGE_H2_USER:sa}
    #  elasticsearch:
    #    # nameSpace: ${SW_NAMESPACE:""}
    #    clusterNodes:     ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
    #    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
    #    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
    #    # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
    #    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:2000} # Execute the bulk every 2000 requests
    #    bulkSize: ${SW_STORAGE_ES_BULK_SIZE:20} # flush the bulk every 20mb
    #    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
    #    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
receiver-register:
    default:
receiver-trace:
    default:
bufferPath: ${SW_RECEIVER_BUFFER_PATH:../trace-buffer/}  # Path to trace buffer files, suggest to use absolute path
bufferOffsetMaxFileSize: ${SW_RECEIVER_BUFFER_OFFSET_MAX_FILE_SIZE:100} # Unit is MB
bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
bufferFileCleanWhenRestart: ${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
receiver-jvm:
    default:
#service-mesh:

5.部署探針

5.1.IDEA 部署探針

 修改項目啟動的 VM 運行參數

 1、點擊菜單欄中的 Run -> EditConfigurations...

 

 

 

 2、增加如下參數到VM options中:

-javaagent:C:\Users\ke\Desktop\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent\skywalking-agent.jar 
-Dskywalking.agent.service_name=service-myapp
-javaagent:用於指定探針路徑
-Dskywalking.agent.service_name:用於重寫 agent/config/agent.config 配置文件中的服務名
-Dskywalking.collector.backend_service:用於重寫 agent/config/agent.config 配置文件中的服務地址
啟動后看到如下啟動日志:
  INFO 2020-02-13 14:57:36:310 main SnifferConfigInitializer : Config file found in C:\Users\ke\Desktop\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent\config\agent.config.
5.2、Java 命令行啟動方式
java -javaagent:C:\Users\ke\Desktop\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent/skywalking-agent.jar=-Dskywalking.agent.service_name=service-myapp,-Dskywalking.collector.backend_service=localhost:11800 -jar service-myapp.jar
5.3. 腳本啟動

編寫腳本(可修改后使用)

[root@basenode demo]# vi startup.sh 

#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot-skywalking-wudl #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.1.180:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置鏈路的最大Span數量,默認為 300。
export JAVA_AGENT=-javaagent:/opt/module/skywalking-apm-bin-es7/agent/skywalking-agent.jar
java $JAVA_AGENT -jar /opt/module/demo/user-center-0.0.1-SNAPSHOT.jar #jar啟動

運行

[root@basenode demo]# sh startup.sh 
DEBUG 2021-09-12 18:01:30:050 main AgentPackagePath : The beacon class location is jar:file:/opt/module/skywalking-apm-bin-es7/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class. 
INFO 2021-09-12 18:01:30:051 main SnifferConfigInitializer : Config file found in /opt/module/skywalking-apm-bin-es7/agent/config/agent.config. 

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.2.RELEASE)

2021-09-12 18:01:39.170  INFO 5590 --- [           main] c.wudl.usercenter.UserCenterApplication  : Starting UserCenterApplication v0.0.1-SNAPSHOT on basenode with PID 5590 (/opt/module/demo/user-center-0.0.1-SNAPSHOT.jar started by root in /opt/module/demo)
2021-09-12 18:01:39.177  INFO 5590 --- [           main] c.wudl.usercenter.UserCenterApplication  : The following profiles are active: dev
2021-09-12 18:01:43.948  INFO 5590 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9909 (http)
2021-09-12 18:01:44.050  INFO 5590 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-09-12 18:01:44.050  INFO 5590 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
2021-09-12 18:01:44.196  INFO 5590 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-09-12 18:01:44.197  INFO 5590 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4819 ms
2021-09-12 18:01:47.260  INFO 5590 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-09-12 18:01:47.956  INFO 5590 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.util.MsUtil CLASS_CACHE cache.
2021-09-12 18:01:47.956  INFO 5590 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.genid.GenIdUtil CACHE cache.
2021-09-12 18:01:47.957  INFO 5590 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.version.VersionUtil CACHE cache.
2021-09-12 18:01:47.957  INFO 5590 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear EntityHelper entityTableMap cache.
2021-09-12 18:01:48.365  INFO 5590 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9909 (http) with context path ''
2021-09-12 18:01:48.370  INFO 5590 --- [           main] c.wudl.usercenter.UserCenterApplication  : Started UserCenterApplication in 11.576 seconds (JVM running for 18.419)

6.簡單測試

完事,可以去 SkyWalking UI 查看是否鏈路收集成功。

1、首先,使用瀏覽器,訪問下 http://127.0.0.1:8079/demo/echo 地址,請求下 Spring Boot 應用提供的 API。因為,我們要追蹤下該鏈路。

2、然后,繼續使用瀏覽器,打開 http://127.0.0.1:8080/ 地址,進入 SkyWalking UI 界面。如下圖所示:

這里,我們會看到 SkyWalking 中非常重要的三個概念:

  • 服務(Service) :表示對請求提供相同行為的一系列或一組工作負載。在使用 Agent 或 SDK 的時候,你可以定義服務的名字。如果不定義的話,SkyWalking 將會使用你在平台(例如說 Istio)上定義的名字。

    這里,我們可以看到 Spring Boot 應用的服務為 "demo-application",就是我們在環境變量 SW_AGENT_NAME 中所定義的。

  • 服務實例(Service Instance) :上述的一組工作負載中的每一個工作負載稱為一個實例。就像 Kubernetes 中的 pods 一樣, 服務實例未必就是操作系統上的一個進程。但當你在使用 Agent 的時候, 一個服務實例實際就是操作系統上的一個真實進程。

    這里,我們可以看到 Spring Boot 應用的服務為 {agent_name}-pid:{pid}@{hostname},由 Agent 自動生成。關於它,我們在「5.1 hostname」小節中,有進一步的講解,胖友可以瞅瞅。

  • 端點(Endpoint) :對於特定服務所接收的請求路徑, 如 HTTP 的 URI 路徑和 gRPC 服務的類名 + 方法簽名。

    這里,我們可以看到 Spring Boot 應用的一個端點,為 API 接口 /demo/echo

3、之后,點擊「拓撲圖」菜單,進入查看拓撲圖的界面。如下圖所示:

 4、再之后,點擊「追蹤」菜單,進入查看鏈路數據的界面。如下圖所示:

 

7.其他

你也可以搭建skywalking的集群環境,步驟如下:

搭建一個 SkyWalking 集群環境,步驟如下:

  • 第一步,搭建一個 Elasticsearch 服務的集群。
  • 第二步,搭建一個注冊中心的集群。目前 SkyWalking 支持 Zookeeper、Kubernetes、Consul、Nacos 作為注冊中心。
  • 第三步,搭建一個 SkyWalking OAP 服務的集群,同時參考《SkyWalking 文檔 —— 集群管理》,將 SkyWalking OAP 服務注冊到注冊中心上。
  • 第四步,啟動一個 Spring Boot 應用,並配置 SkyWalking Agent。另外,在設置 SkyWaling Agent 的 SW_AGENT_COLLECTOR_BACKEND_SERVICES 地址時,需要設置多個 SkyWalking OAP 服務的地址數組。
  • 第五步,搭建一個 SkyWalking UI 服務的集群,同時使用 Nginx 進行負載均衡。另外,在設置 SkyWalking UI 的 collector.ribbon.listOfServers 地址時,也需要設置多個 SkyWalking OAP 服務的地址數組。

 設置告警等。

 

 參考:

https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/

https://www.jianshu.com/p/5524b4545421

https://www.jianshu.com/p/5bb6e9d289c8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM