1、SkyWalking簡介
- 多種監控手段。可以通過語言探針和 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即可啟動服務
(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
-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