Docker搭建Skywalking
- 虚拟机IP:
192.168.0.109
- Nacos服务地址:
http://192.168.0.109:8848/nacos
- MySQL服务:
- IP:
192.168.0.109
- 端口:
3306
- 用户名:
root
- 密码:
root
- ElasticSearch服务:
- IP:
192.168.0.109
- 端口:
9200
- 用户名:
elastic
- 密码:
123456
- 容器使用的Docker网络:
docker network create elastic-net
- 容器名称:
elasticsearch
- Kibana服务:
- IP:
192.168.0.109
- 端口:
5601
- 用户名:
elastic
- 密码:
123456
- 测试地址:http://192.168.0.109:5601
准备工作
- 先准备配置目录和持久化目录,举个栗子:
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版本需要适配,版本不适配可能会出现页面无法访问、agent上报不到页面等问题。
部署 SkyWalking OAP 服务器
0. 启动临时容器【通过创建一个临时的测试容器来复制配置文件,反推配置】
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
:容器自动重启策略。
目录结构说明
路径 | 说明 |
---|---|
/skywalking/config | 配置文件目录 |
/skywalking/logs | 日志文件目录 |
/skywalking/data | 数据存储目录 |
复制 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 数据库)
启动 SkyWalking OAP 容器,使用 H2 数据库作为存储:
docker run \-d -p 11800:11800 -p 12800:12800 \--name skywalking-oap \--restart always \apache/skywalking-oap-server:8.9.0
说明:如果不指定存储类型,默认使用 H2 数据库。
容器内主要目录和文件说明
目录/文件名 | 说明 |
---|---|
bin | 启动脚本及其他可执行工具,如 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容器的网络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 服务地址,可以是容器内的服务名(例如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
环境变量:
- 可以使用
SW_STORAGE_ES_CLUSTER_NODES
来指定 ElasticSearch 集群的节点地址。如果是使用容器内部网络,可以用容器的名称代替 IP 地址(例如elasticsearch:9200
)。SW_ES_USER
和SW_ES_PASSWORD
用于认证信息。如果在生产环境中使用,请确保密码存储方式安全,避免通过环境变量暴露敏感信息。挂载配置文件:
- 使用
-v
选项将本地的application.yml
配置文件挂载到容器中,这样可以灵活配置 SkyWalking 的各项参数,避免每次修改环境变量。网络连接:
- 使用
--link elasticsearch:elasticsearch
来连接 Docker 容器间的网络。但建议使用 Docker 网络来替代--link
,因为--link
已被弃用。可以通过创建自定义网络来进行容器间的连接。
3. 使用 MySQL 存储(推荐✨)
-
在 MySQL 创建 SkyWalking 数据库
CREATE DATABASE skywalking CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
配置 MySQL 驱动
SkyWalking 需要 MySQL JDBC 驱动来连接 MySQL 数据库。如果您使用的是 MySQL 8,可能需要手动将
mysql-connector
驱动文件导入到skywalking-oap
容器中。-
准备驱动文件
将mysql-connector-java-8.0.18.jar
文件放到服务器的任意位置,例如/root
; -
拷贝到 Docker 容器
使用docker cp
命令将驱动文件传入 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
那么就跳过这个步骤# 检查是否有适配的驱动 docker exec -it skywalking-oap ls -l /skywalking/oap-libs
-
-
启动 SkyWalking OAP 服务,使用 MySQL 存储数据
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服务地址>:<端口>/<数据库名>?useUnicode=true&characterEncoding=UTF-8&useSSL=false
示例中
mysql
是 Docker 服务名,3306
是默认端口。
SW_DATA_SOURCE_USER
和SW_DATA_SOURCE_PASSWORD
:MySQL 数据库的用户名和密码。
--link mysql:mysql
:通过 Docker 的--link
参数连接 MySQL 服务(需确保 MySQL 服务已启动且可访问)。注意事项:
- MySQL 地址和端口:确保替换
mysql:3306
为实际的 MySQL 地址和端口。如果 MySQL 服务在本地运行,可以替换为localhost:3306
,如果是远程数据库,则替换为对应的远程地址。- 提前创建数据库:在执行启动命令之前,确保 MySQL 数据库中已经创建了
skywalking
数据库。你可以根据需要调整数据库名称和字符集。- MySQL 版本兼容性:确保你使用的 MySQL 版本与 SkyWalking OAP 兼容,建议使用 MySQL 5.7 以上版本。
4. 可选配置:自定义参数或挂载配置文件
-
修改JVM堆内存大小
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
注意:确保挂载路径和配置文件内容正确无误。
部署 SkyWalking UI
SkyWalking UI 提供了一个基于 Web 的界面,用于可视化 OAP 服务器收集的遥测数据。
方式 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 可监控 SkyWalking OAP 服务的运行状态及指标数据。
- 启动后左侧菜单可能较少,需等待上报数据后才能显示完整菜单。
- 查询数据时,请确认右上角的时间区间是否正确。
如果
8080
端口被占用,这里可以替换成其他的端口 例如:-p 28080:8080
方式 2:通过 Docker 启动 SkyWalking UI 服务(使用自定义网络 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容器内部
docker ps # 查看正在运行的容器,并得到 容器id# 进入tomcat容器内部
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'
EOFsource /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# 查看已经开发那些端口
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
结论
以上步骤完成后,您已成功配置Apache SkyWalking的OAP服务器和UI。可以选择使用H2、Elasticsearch或MySQL作为存储,通过SkyWalking UI监控系统运行情况。