SkyWalking使用和Docker環(huán)境下部署方式
一、Skywalking概述
1、Skywalking介紹
Skywalking是分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具,專為微服務(wù),云原生架構(gòu)和基于容器(Docker,K8S,Mesos)架構(gòu)而設(shè)計(jì),它是一款優(yōu)秀的APM(Application Performance Management)工具,包括了分布式追蹤,性能指標(biāo)分析和服務(wù)依賴分析等。
Skywalking是一個(gè)國(guó)產(chǎn)的開(kāi)源框架,2015年由吳晟個(gè)人開(kāi)源,2017年加入Apache孵化器,國(guó)人開(kāi)源的產(chǎn)品,主要開(kāi)發(fā)人員來(lái)自于華為,2019年4月17日Apache董事會(huì)批準(zhǔn)SkyWalking成為頂級(jí)項(xiàng)目,支持Java、.Net、NodeJs等探針,數(shù)據(jù)存儲(chǔ)支持Mysql、Elasticsearch等,跟Pinpoint一樣采用字節(jié)碼注入的方式實(shí)現(xiàn)代碼的無(wú)侵入,探針采集數(shù)據(jù)粒度粗,但性能表現(xiàn)優(yōu)秀,且對(duì)云原生支持,目前增長(zhǎng)勢(shì)頭強(qiáng)勁,社區(qū)活躍。
2、Skywalking架構(gòu)圖

整個(gè)架構(gòu),分成上、下、左、右四部分
- 1)上部分 Agent :負(fù)責(zé)從應(yīng)用中,收集鏈路信息,發(fā)送給 SkyWalking OAP 服務(wù)器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 數(shù)據(jù)信息。Agent 收集 SkyWalking Tracing 數(shù)據(jù),傳遞給服務(wù)器。
- 2)下部分 SkyWalking OAP :負(fù)責(zé)接收 Agent 發(fā)送的 Tracing 數(shù)據(jù)信息,然后進(jìn)行分析(Analysis Core) ,存儲(chǔ)到外部存儲(chǔ)器( Storage ),最終提供查詢( Query )功能。
- 3)右部分 Storage :Tracing 數(shù)據(jù)存儲(chǔ)。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多種存儲(chǔ)器。而我們目前采用的是 ES ,主要考慮是 SkyWalking 開(kāi)發(fā)團(tuán)隊(duì)自己的生產(chǎn)環(huán)境采用 ES 為主。
- 4)左部分 SkyWalking UI :負(fù)責(zé)提供控臺(tái),查看鏈路等等。
SkyWalking 三個(gè)核心部分
- Agent(探針):Agent 運(yùn)?在各個(gè)服務(wù)實(shí)例中,負(fù)責(zé)采集服務(wù)實(shí)例的 Trace 、Metrics 等數(shù)據(jù),然后通過(guò) gRPC ?式上報(bào)給 SkyWalking 后端。
- OAP:SkyWalking 的后端服務(wù),?個(gè)是負(fù)責(zé)接收 Agent 上報(bào)上來(lái)的 Trace、Metrics 等數(shù)據(jù),進(jìn)?流式分析,最終將分析得到的結(jié)果寫?持久化存儲(chǔ)中,另?個(gè)是負(fù)責(zé)響應(yīng) SkyWalking UI 界?發(fā)送來(lái)的查詢請(qǐng)求。
- UI 界?:展示查詢結(jié)果。
SkyWalking Agent實(shí)現(xiàn)原理
- SkyWalking Agent是通過(guò)Java Agent的方式隨著應(yīng)用程序一起啟動(dòng),然后通過(guò)Byte Buddy庫(kù)動(dòng)態(tài)插入埋點(diǎn)信息收集Trace信息。
- Java Agent本質(zhì)上就是?個(gè)Jar包,它會(huì)調(diào)? Instrumentation API,來(lái)修改已經(jīng)加載到JVM中的字節(jié)碼。
- Instrumentation API由JVM提供?來(lái)修改已加載類的?具,可以提供Java語(yǔ)?編寫的插樁功能,動(dòng)態(tài)修改運(yùn)?時(shí)代碼的能?。
Java Agent具有兩種加載?式
靜態(tài)加載
這種?式下,在應(yīng)?程序的任何代碼被執(zhí)?之前,就加載Agent以修改字節(jié)碼。靜態(tài)加載需要使?JVM 的-javaagent參數(shù):
java -javaagent:agent.jar -jar application.jar # 可以同時(shí)加載多個(gè)Agents java -javaagent:agentA.jar -javaagent:agentB.jar application.jar
動(dòng)態(tài)加載
這種?式下,Agent可以在運(yùn)?時(shí)動(dòng)態(tài)按需的加載。動(dòng)態(tài)加載需要調(diào)?Java Attach API。
// 根據(jù)PID查找?標(biāo)JVM,并連接到JVM VirtualMachine jvm = VirtualMachine.attach(jvmPid); // 加載Agent jvm.loadAgent(agentFile.getAbsolutePath()); // 取消到JVM的連接 jvm.detach();
Instrumentation
Instrumentation是java提供的修改已經(jīng)加載到JVM中字節(jié)碼的API。使? Instrumentation,開(kāi)發(fā)者可以構(gòu)建?個(gè)獨(dú)?于應(yīng)?程序的代理程序(Agent),?來(lái)監(jiān)測(cè)和協(xié)助運(yùn)?在 JVM 上的程序,甚?能夠替換和修改某些類的定義。有了這樣的功能,開(kāi)發(fā)者就可以實(shí)現(xiàn)更為靈活的運(yùn)?時(shí)虛擬機(jī)監(jiān)控和Java 類操作了,這樣的特性實(shí)際上提供了?種虛擬機(jī)級(jí)別?持的 AOP 實(shí)現(xiàn)?式,使得開(kāi)發(fā)者?需對(duì) JDK 做任何升級(jí)和改動(dòng),就可以實(shí)現(xiàn)某些 AOP 的功能了。JVM級(jí)別AOP。
在JDK 1.6以前,instrument只能在JVM剛啟動(dòng)開(kāi)始加載類時(shí)生效,而在JDK 1.6之后,instrument支持了在運(yùn)行時(shí)對(duì)類定義的修改。在 Java SE 6 ??,instrumentation 包被賦予了更強(qiáng)?的功能:?jiǎn)?dòng)后的instrument、本地代碼 (native code)instrument,以及動(dòng)態(tài)改變 classpath 等等。這些改變,意味著 Java 具有更強(qiáng)的動(dòng)態(tài)控制、解釋能?,它使得 Java 語(yǔ)?變得更加靈活多變。
二、Docker環(huán)境下使用docker-compose部署Skywalking
1、相關(guān)組件及版本
序號(hào) | 組件 | 版本 | 備注 |
1 | skywalking-oap-server | 8.9.1 | |
2 | elasticsearch | 7.17.6 | |
3 | skywalking-ui | 8.9.1 | |
4 | apache-skywalking-java-agent | 8.15.0 |
2、創(chuàng)建目錄賦予權(quán)限
mkdir elasticsearch cd elasticsearch mkdir logs mkdir data chmod 775 logs chmod 775 data
3、準(zhǔn)備docker-compose.yml文件
version: '3.3'
services:
elasticsearch:
image: elasticsearch:7.17.6
container_name: elasticsearch
restart: always
ports:
- 9200:9200
environment:
- "TAKE_FILE_OWNERSHIP=true" #volumes 掛載權(quán)限 如果不想要掛載es文件改配置可以刪除
- "discovery.type=single-node" #單機(jī)模式啟動(dòng)
- "TZ=Asia/Shanghai" # 設(shè)置時(shí)區(qū)
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 設(shè)置jvm內(nèi)存大小
volumes:
- ./elasticsearch/logs:/usr/share/elasticsearch/logs
- ./elasticsearch/data:/usr/share/elasticsearch/data
#- ./elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ulimits:
memlock:
soft: -1
hard: -1
skywalking-oap-server:
image: apache/skywalking-oap-server:8.9.1
container_name: skywalking-oap-server
depends_on:
- elasticsearch
links:
- elasticsearch
restart: always
ports:
- 11800:11800
- 12800:12800
environment:
SW_STORAGE: elasticsearch # 指定ES版本
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
TZ: Asia/Shanghai
#volumes:
#- ./oap/conf/alarm-settings.yml:/skywalking/config/alarm-settings.yml
skywalking-ui:
image: apache/skywalking-ui:8.9.1
container_name: skywalking-ui
depends_on:
- skywalking-oap-server
links:
- skywalking-oap-server
restart: always
ports:
- 8080:8080
environment:
SW_OAP_ADDRESS: http://skywalking-oap-server:12800
TZ: Asia/Shanghai3、執(zhí)行啟動(dòng)服務(wù)命令
docker-compose up -d
4、訪問(wèn)UI地址http:${IP}:8080

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker?Kill/Pause/Unpause命令使用與區(qū)別小結(jié)
本文詳細(xì)介紹了Docker中的三個(gè)重要命令,kill、pause和unpause,這些命令在管理和操作運(yùn)行中的容器時(shí)非常有用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
基于iptables的Docker端口白名單控制實(shí)現(xiàn)
本文主要介紹了通過(guò)iptables為Docker?Compose部署的容器設(shè)置宿主機(jī)端口IP白名單,強(qiáng)調(diào)規(guī)則順序與持久化配置,提供單端口和multiport兩種實(shí)現(xiàn)方式,感興趣的可以了解一下2025-07-07
Docker部署rabbitmq遇到的兩個(gè)問(wèn)題
當(dāng)使用docker部署rabbitmq時(shí)遇到兩個(gè)問(wèn)題,訪問(wèn)交換機(jī)時(shí)報(bào)錯(cuò),另一種是訪問(wèn)channel時(shí)報(bào)錯(cuò),本文給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧2021-07-07
使用Docker部署Neko自托管虛擬瀏覽器(Firefox)的流程
本文介紹了基于WebRTC的自托管虛擬瀏覽器環(huán)境Neko的部署方法,包括使用Docker和Docker Compose部署、基本配置、使用方法及注意事項(xiàng)等內(nèi)容,適合團(tuán)隊(duì)協(xié)作、遠(yuǎn)程演示等場(chǎng)景,需要的朋友可以參考下2026-04-04
IDEA集成Docker實(shí)現(xiàn)打包的方法
本文主要介紹了IDEA集成Docker實(shí)現(xiàn)打包的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Docker安裝Nacos服務(wù)的實(shí)現(xiàn)
本文主要介紹了Docker安裝Nacos服務(wù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Docker容器搭建android編譯環(huán)境的實(shí)踐記錄
這篇文章主要介紹了Docker容器搭建android編譯環(huán)境的實(shí)踐記錄,主要包括部署容器、鏡像管理、容器管理等相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07

