Docker搭建Skywalking的實現(xiàn)示例
Docker搭建Skywalking
- 虛擬機IP:
192.168.0.109
- Nacos服務地址:
http://192.168.0.109:8848/nacos
- MySQL服務:
- IP:
192.168.0.109
- 端口:
3306
- 用戶名:
root
- 密碼:
root
- IP:
- ElasticSearch服務:
- IP:
192.168.0.109
- 端口:
9200
- 用戶名:
elastic
- 密碼:
123456
- 容器使用的Docker網(wǎng)絡:
docker network create elastic-net
- 容器名稱:
elasticsearch
- IP:
- Kibana服務:
- IP:
192.168.0.109
- 端口:
5601
- 用戶名:
elastic
- 密碼:
123456
- 測試地址:http://192.168.0.109:5601
- IP:
準備工作
- 先準備配置目錄和持久化目錄,舉個栗子:
mkdir -p /opt/module/skywalking/{config,data,logs}
- 解決 SkyWalking 容器
Permission denied
(權限被拒絕)的錯誤,chmod -R 777 /opt/module/skywalking
拉取官方Skywalking鏡像
# 拉取 OAP 服務鏡像 docker pull apache/skywalking-oap-server:8.9.0 # 拉取 UI 服務鏡像 docker pull apache/skywalking-ui:8.9.0
- 注意:oap版本和agent版本需要適配,版本不適配可能會出現(xiàn)頁面無法訪問、agent上報不到頁面等問題。
部署 SkyWalking OAP 服務器
0. 啟動臨時容器【通過創(chuàng)建一個臨時的測試容器來復制配置文件,反推配置】
docker run \ -d -p 11800:11800 -p 12800:12800 \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
說明:
11800
:OAP 服務端口。12800
:SkyWalking UI 服務端口。--restart always
:容器自動重啟策略。
目錄結(jié)構(gòu)說明
路徑 | 說明 |
---|---|
/skywalking/config | 配置文件目錄 |
/skywalking/logs | 日志文件目錄 |
/skywalking/data | 數(shù)據(jù)存儲目錄 |
復制 SkyWalking 配置文件到宿主機
docker cp skywalking-oap:/skywalking/config /opt/module/skywalking docker cp skywalking-oap:/skywalking/logs /opt/module/skywalking docker cp skywalking-oap:/skywalking/data /opt/module/skywalking # 如果需要導出所有文件 docker cp skywalking-oap:/skywalking /opt/module
移除臨時容器
docker stop skywalking-oap docker rm skywalking-oap
1. 使用默認存儲(H2 數(shù)據(jù)庫)
啟動 SkyWalking OAP 容器,使用 H2 數(shù)據(jù)庫作為存儲:
docker run \ -d -p 11800:11800 -p 12800:12800 \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
說明:如果不指定存儲類型,默認使用 H2 數(shù)據(jù)庫。
容器內(nèi)主要目錄和文件說明
目錄/文件名 | 說明 |
---|---|
bin | 啟動腳本及其他可執(zhí)行工具,如 startup.sh 和 stop.sh。 |
config | 配置文件目錄,包含關鍵配置文件,如 application.yml(OAP 核心配置)。 |
config-examples | 配置示例目錄,包含模板配置,便于用戶參考。 |
docker-entrypoint.sh | 容器啟動腳本,用于初始化和啟動 SkyWalking OAP 服務。 |
ext-config | 擴展配置文件目錄,用于自定義擴展配置。 |
ext-libs | 擴展庫目錄,用于添加插件或依賴庫。 |
LICENSE | SkyWalking 項目的開源許可證文件。 |
licenses | 項目中使用的所有依賴庫的許可證集合。 |
oap-libs | OAP 組件所需的依賴庫文件夾。 |
README.txt | 項目介紹文件,包含操作指南。 |
tools | 工具目錄,包含與 SkyWalking 相關的實用工具。 |
zipkin-LICENSE | Zipkin 集成相關的許可證信息。 |
核心目錄說明
- config
- 包含 application.yml,用于配置存儲后端、服務等。
- oap-libs
- SkyWalking OAP 的運行時依賴庫,一般不需要手動修改。
- logs
- 日志目錄,存儲運行日志,便于排查問題。
- ext-libs 和 ext-config
- 可以添加插件或自定義擴展配置,靈活性高。
2. 使用 ElasticSearch 存儲
方式 1:通過 Docker 啟動 SkyWalking OAP 服務并使用 ElasticSearch 存儲
docker run -d \ -p 11800:11800 \ -p 12800:12800 \ -e SW_STORAGE=elasticsearch \ -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 \ -e SW_ES_USER=elastic \ -e SW_ES_PASSWORD="\"123456\"" \ --link elasticsearch:elasticsearch \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
方式 2:通過 Docker 啟動 SkyWalking OAP 服務并使用 ElasticSearch 存儲【這里直接使用之前ES容器的網(wǎng)絡es-net
】
docker run -d \ -p 11800:11800 \ -p 12800:12800 \ -e SW_STORAGE=elasticsearch \ -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 \ -e SW_ES_USER=elastic \ -e SW_ES_PASSWORD="\"123456\"" \ --net es-net \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
注意:
- -e SW_ES_PASSWORD這里的密碼值 "\"123456\"",額外的引號確保其被正確解析為字符串。
方式 3:直接指定 ElasticSearch 服務的 IP 地址
docker run \ -d -p 11800:11800 -p 12800:12800 \ -e TZ=Asia/Shanghai \ -e SW_STORAGE=elasticsearch \ -e SW_STORAGE_ES_CLUSTER_NODES=[ES的IP]:9200 \ -e SW_ES_USER=elastic \ -e SW_ES_PASSWORD="\"123456\"" \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
說明:
- SW_STORAGE=elasticsearch:指定使用 ElasticSearch 存儲。
- SW_STORAGE_ES_CLUSTER_NODES:指定 ElasticSearch 服務地址,可以是容器內(nèi)的服務名(例如 elasticsearch:9200)或外部服務的 IP 地址(例如 [ES的IP]:9200)。
- SW_ES_USER 和 SW_ES_PASSWORD:用于連接 ElasticSearch 的認證信息。
方式 4:使用掛載配置文件啟動(自定義 application.yml 配置)
如果您希望使用自定義配置文件 application.yml
,可以將其掛載到容器中:
docker run -d \ -p 11800:11800 \ -p 12800:12800 \ -v /opt/module/skywalking/config/application.yml:/skywalking/config/application.yml \ -e SW_STORAGE=elasticsearch \ -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 \ -e SW_ES_USER=elastic \ -e SW_ES_PASSWORD="\"123456\"" \ --link elasticsearch:elasticsearch \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
環(huán)境變量:
- 可以使用 SW_STORAGE_ES_CLUSTER_NODES 來指定 ElasticSearch 集群的節(jié)點地址。如果是使用容器內(nèi)部網(wǎng)絡,可以用容器的名稱代替 IP 地址(例如 elasticsearch:9200)。
- SW_ES_USER 和 SW_ES_PASSWORD 用于認證信息。如果在生產(chǎn)環(huán)境中使用,請確保密碼存儲方式安全,避免通過環(huán)境變量暴露敏感信息。
掛載配置文件:
- 使用 -v 選項將本地的 application.yml 配置文件掛載到容器中,這樣可以靈活配置 SkyWalking 的各項參數(shù),避免每次修改環(huán)境變量。
網(wǎng)絡連接:
- 使用 --link elasticsearch:elasticsearch 來連接 Docker 容器間的網(wǎng)絡。但建議使用 Docker 網(wǎng)絡來替代 --link,因為 --link 已被棄用??梢酝ㄟ^創(chuàng)建自定義網(wǎng)絡來進行容器間的連接。
3. 使用 MySQL 存儲(推薦?)
在 MySQL 創(chuàng)建 SkyWalking 數(shù)據(jù)庫
CREATE DATABASE skywalking CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
配置 MySQL 驅(qū)動
SkyWalking 需要 MySQL JDBC 驅(qū)動來連接 MySQL 數(shù)據(jù)庫。如果您使用的是 MySQL 8,可能需要手動將
mysql-connector
驅(qū)動文件導入到skywalking-oap
容器中。準備驅(qū)動文件將
mysql-connector-java-8.0.18.jar
文件放到服務器的任意位置,例如/root
;拷貝到 Docker 容器使用
docker cp
命令將驅(qū)動文件傳入 SkyWalking OAP 容器:docker cp /root/mysql-connector-java-8.0.18.jar skywalking-oap:/skywalking/oap-libs
注意要查看一下你使用的skywalking-oap容器中是否有 MySQL8的jar包, 如果有mysql-connector-java-8.0.X.jar那么就跳過這個步驟
# 檢查是否有適配的驅(qū)動 docker exec -it skywalking-oap ls -l /skywalking/oap-libs
啟動 SkyWalking OAP 服務,使用 MySQL 存儲數(shù)據(jù)
docker run \ -d -p 11800:11800 -p 12800:12800 \ -e SW_STORAGE=mysql \ -e "SW_JDBC_URL=jdbc:mysql://mysql:3306/skywalking?useUnicode=true&characterEncoding=UTF-8&useSSL=false" \ -e SW_DATA_SOURCE_USER=root \ -e SW_DATA_SOURCE_PASSWORD=root \ -v /opt/module/skywalking/config:/skywalking/config \ -v /opt/module/skywalking/oap-libs:/skywalking/oap-libs \ --link mysql:mysql \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
說明:
SW_STORAGE=mysql
:指定使用 MySQL 存儲。SW_JDBC_URL
:MySQL JDBC 連接 URL,格式為:jdbc:mysql://<MySQL服務地址>:<端口>/<數(shù)據(jù)庫名>?useUnicode=true&characterEncoding=UTF-8&useSSL=false
示例中
mysql
是 Docker 服務名,3306
是默認端口。SW_DATA_SOURCE_USER
和SW_DATA_SOURCE_PASSWORD
:MySQL 數(shù)據(jù)庫的用戶名和密碼。--link mysql:mysql
:通過 Docker 的--link
參數(shù)連接 MySQL 服務(需確保 MySQL 服務已啟動且可訪問)。
注意事項:
- MySQL 地址和端口:確保替換
mysql:3306
為實際的 MySQL 地址和端口。如果 MySQL 服務在本地運行,可以替換為localhost:3306
,如果是遠程數(shù)據(jù)庫,則替換為對應的遠程地址。 - 提前創(chuàng)建數(shù)據(jù)庫:在執(zhí)行啟動命令之前,確保 MySQL 數(shù)據(jù)庫中已經(jīng)創(chuàng)建了
skywalking
數(shù)據(jù)庫。你可以根據(jù)需要調(diào)整數(shù)據(jù)庫名稱和字符集。 - MySQL 版本兼容性:確保你使用的 MySQL 版本與 SkyWalking OAP 兼容,建議使用 MySQL 5.7 以上版本。
4. 可選配置:自定義參數(shù)或掛載配置文件
修改JVM堆內(nèi)存大小
docker run \ -d -p 11800:11800 -p 12800:12800 \ -e JAVA_OPTS="-Xmx2g" \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
掛載本地配置文件
將配置文件放在
/opt/module/skywalking/config/application.yml
路徑,啟動命令如下:docker run \ -d -p 11800:11800 -p 12800:12800 \ -v /opt/module/skywalking/config/application.yml:/skywalking/config/application.yml \ --name skywalking-oap \ --restart always \ apache/skywalking-oap-server:8.9.0
注意:確保掛載路徑和配置文件內(nèi)容正確無誤。
部署 SkyWalking UI
SkyWalking UI 提供了一個基于 Web 的界面,用于可視化 OAP 服務器收集的遙測數(shù)據(jù)。
方式 1:通過 Docker 啟動 SkyWalking UI 服務
docker run \ -d -p 8080:8080 \ -e SW_OAP_ADDRESS=http://skywalking-oap:12800 \ --link skywalking-oap:skywalking-oap \ --name skywalking-ui \ --restart always \ apache/skywalking-ui:8.9.0
瀏覽器訪問:http://<主機IP>:8080
。
說明:
- UI 服務默認訪問地址為
http://<主機IP>:8080
。 - UI 可監(jiān)控 SkyWalking OAP 服務的運行狀態(tài)及指標數(shù)據(jù)。
- 啟動后左側(cè)菜單可能較少,需等待上報數(shù)據(jù)后才能顯示完整菜單。
- 查詢數(shù)據(jù)時,請確認右上角的時間區(qū)間是否正確。
如果8080
端口被占用,這里可以替換成其他的端口 例如: -p 28080:8080
方式 2:通過 Docker 啟動 SkyWalking UI 服務(使用自定義網(wǎng)絡 es-net
)
docker run \ -d -p 8080:8080 \ -e SW_OAP_ADDRESS=http://skywalking-oap:12800 \ --net es-net \ --name skywalking-ui \ --restart always \ apache/skywalking-ui:8.9.0
查看啟動日志
docker logs -f skywalking-oap docker logs -f skywalking-ui # 查看最近 20 行日志 docker logs -f -t --tail 20 skywalking-oap docker logs -f -t --tail 20 skywalking-ui
進入skywalking-oap、skywalking-ui容器內(nèi)部
docker ps # 查看正在運行的容器,并得到 容器id # 進入tomcat容器內(nèi)部 docker exec -it [容器id] /bin/bash # 中間那個是容器id 就是 CONTAINER_ID docker exec -it [容器id] /bin/sh # -it 表示進入
docker exec -it skywalking-oap /bin/sh docker exec -it skywalking-ui /bin/sh
# 使用 命令別名 開啟 ll命令 cat <<EOF >> /etc/profile alias ll='ls -l --color=tty' alias grep='grep --color=auto' EOF source /etc/profile
查看防火墻【開放端口】
# 查詢端口是否開放 firewall-cmd --query-port=8080/tcp firewall-cmd --query-port=11800/tcp firewall-cmd --query-port=12800/tcp # 開放80、443端口 firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --permanent --add-port=11800/tcp firewall-cmd --permanent --add-port=12800/tcp # 移除端口 firewall-cmd --permanent --remove-port=8080/tcp firewall-cmd --permanent --remove-port=11800/tcp firewall-cmd --permanent --remove-port=12800/tcp # 重啟防火墻(修改配置后要重啟防火墻) firewall-cmd --reload # 查看已經(jīng)開發(fā)那些端口 firewall-cmd --list-ports firewall-cmd --zone=public --list-ports
測試
#瀏覽器中服務器 http://虛擬機IP:8080
查看日志
查看 SkyWalking OAP 日志
docker logs -f skywalking-oap
查看 SkyWalking UI 日志
docker logs -f skywalking-ui
停止并刪除容器
停止并刪除 OAP 容器
docker stop skywalking-oap docker rm skywalking-oap
停止并刪除 UI 容器
docker stop skywalking-ui docker rm skywalking-ui
結(jié)論
以上步驟完成后,您已成功配置Apache SkyWalking的OAP服務器和UI。可以選擇使用H2、Elasticsearch或MySQL作為存儲,通過SkyWalking UI監(jiān)控系統(tǒng)運行情況。
到此這篇關于Docker搭建Skywalking的實現(xiàn)示例的文章就介紹到這了,更多相關Docker搭建Skywalking內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker內(nèi)服務訪問宿主機服務的實現(xiàn)
本文主要介紹了docker內(nèi)服務訪問宿主機服務的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10Docker容器中文亂碼(修改docker容器編碼格式)的解決方案
這篇文章主要介紹了Docker容器中文亂碼(修改docker容器編碼格式)的解決方案的相關資料,需要的朋友可以參考下2016-12-12