Docker搭建Skywalking

Docker搭建Skywalking

  • 虚拟机IP192.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服务:

准备工作

  1. 先准备配置目录和持久化目录,举个栗子:mkdir -p /opt/module/skywalking/{config,data,logs}
  2. 解决 SkyWalking 容器 Permission denied(权限被拒绝)的错误,chmod -R 777 /opt/module/skywalking

拉取官方Skywalking镜像

bash 复制代码
# 拉取 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. 启动临时容器【通过创建一个临时的测试容器来复制配置文件,反推配置】
bash 复制代码
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 配置文件到宿主机
bash 复制代码
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
移除临时容器
bash 复制代码
docker stop skywalking-oap
docker rm skywalking-oap

1. 使用默认存储(H2 数据库)

启动 SkyWalking OAP 容器,使用 H2 数据库作为存储:

bash 复制代码
docker run \
  -d -p 11800:11800 -p 12800:12800  \
  --name skywalking-oap \
  --restart always \
  apache/skywalking-oap-server:8.9.0

说明:如果不指定存储类型,默认使用 H2 数据库。

容器内主要目录和文件说明
目录/文件名 说明
bin 启动脚本及其他可执行工具,如 startup.shstop.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 集成相关的许可证信息。
核心目录说明
  1. config
    • 包含 application.yml,用于配置存储后端、服务等。
  2. oap-libs
    • SkyWalking OAP 的运行时依赖库,一般不需要手动修改。
  3. logs
    • 日志目录,存储运行日志,便于排查问题。
  4. ext-libsext-config
    • 可以添加插件或自定义扩展配置,灵活性高。

2. 使用 ElasticSearch 存储

方式 1:通过 Docker 启动 SkyWalking OAP 服务并使用 ElasticSearch 存储

bash 复制代码
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

bash 复制代码
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 地址

bash 复制代码
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_USERSW_ES_PASSWORD:用于连接 ElasticSearch 的认证信息。
方式 4:使用挂载配置文件启动(自定义 application.yml 配置)

如果您希望使用自定义配置文件 application.yml,可以将其挂载到容器中:

bash 复制代码
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_USERSW_ES_PASSWORD 用于认证信息。如果在生产环境中使用,请确保密码存储方式安全,避免通过环境变量暴露敏感信息。

挂载配置文件

  • 使用 -v 选项将本地的 application.yml 配置文件挂载到容器中,这样可以灵活配置 SkyWalking 的各项参数,避免每次修改环境变量。

网络连接

  • 使用 --link elasticsearch:elasticsearch 来连接 Docker 容器间的网络。但建议使用 Docker 网络来替代 --link,因为 --link 已被弃用。可以通过创建自定义网络来进行容器间的连接。

3. 使用 MySQL 存储(推荐✨)
  1. 在 MySQL 创建 SkyWalking 数据库

    bash 复制代码
    CREATE DATABASE skywalking CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  2. 配置 MySQL 驱动

    SkyWalking 需要 MySQL JDBC 驱动来连接 MySQL 数据库。如果您使用的是 MySQL 8 ,可能需要手动将 mysql-connector 驱动文件导入到 skywalking-oap 容器中。

    1. 准备驱动文件

      mysql-connector-java-8.0.18.jar 文件放到服务器的任意位置,例如 /root

    2. 拷贝到 Docker 容器

      使用 docker cp 命令将驱动文件传入 SkyWalking OAP 容器:

      bash 复制代码
      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那么就跳过这个步骤

    bash 复制代码
    # 检查是否有适配的驱动
    docker exec -it skywalking-oap ls -l /skywalking/oap-libs
  3. 启动 SkyWalking OAP 服务,使用 MySQL 存储数据

    bash 复制代码
    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,格式为:

    bash 复制代码
    jdbc:mysql://<MySQL服务地址>:<端口>/<数据库名>?useUnicode=true&characterEncoding=UTF-8&useSSL=false

    示例中 mysql 是 Docker 服务名,3306 是默认端口。

  • SW_DATA_SOURCE_USERSW_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. 可选配置:自定义参数或挂载配置文件
  1. 修改JVM堆内存大小

    bash 复制代码
    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
  2. 挂载本地配置文件

    将配置文件放在/opt/module/skywalking/config/application.yml路径,启动命令如下:

    bash 复制代码
    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 服务

bash 复制代码
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

bash 复制代码
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

查看启动日志

bash 复制代码
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容器内部

bash 复制代码
docker ps     # 查看正在运行的容器,并得到 容器id

# 进入tomcat容器内部
docker exec -it [容器id] /bin/bash  # 中间那个是容器id 就是 CONTAINER_ID
docker exec -it [容器id] /bin/sh
#  -it 表示进入
bash 复制代码
docker exec -it skywalking-oap /bin/sh
docker exec -it skywalking-ui  /bin/sh
bash 复制代码
# 使用 命令别名 开启 ll命令
cat <<EOF >> /etc/profile
alias ll='ls -l --color=tty'
alias grep='grep --color=auto'
EOF

source /etc/profile

查看防火墙【开放端口】

bash 复制代码
# 查询端口是否开放
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

测试

bash 复制代码
#浏览器中服务器
http://虚拟机IP:8080

查看日志

查看 SkyWalking OAP 日志
bash 复制代码
docker logs -f skywalking-oap
查看 SkyWalking UI 日志
bash 复制代码
docker logs -f skywalking-ui

停止并删除容器

停止并删除 OAP 容器
bash 复制代码
docker stop skywalking-oap
docker rm skywalking-oap
停止并删除 UI 容器
bash 复制代码
docker stop skywalking-ui
docker rm skywalking-ui

结论

以上步骤完成后,您已成功配置Apache SkyWalking的OAP服务器和UI。可以选择使用H2、Elasticsearch或MySQL作为存储,通过SkyWalking UI监控系统运行情况。

相关推荐
N 年 后11 分钟前
Docker、Compose、Portainer与K8s详解
docker·容器·kubernetes
lihe7581 小时前
DSM7.2部署可道云+onlyoffice在线办公系统
docker·onlyoffice·群晖·kodbox·docer-compose
君不见,青丝成雪9 小时前
网关整合验签
大数据·数据结构·docker·微服务·系统架构
oneslide13 小时前
Kubernetes环境部署Redis集群
redis·容器·kubernetes
企鹅侠客13 小时前
k8s之Headless浅谈
云原生·容器·kubernetes
SHIPKING39316 小时前
【Docker安装】Windows10专业版安装教程
运维·docker·容器
编程的一拳超人16 小时前
Docker核心概念、常用命令与实战指南
运维·docker·容器
编程的一拳超人16 小时前
Docker 核心命令速查表(精细分类版)
运维·docker·容器
风吹一夏v17 小时前
Docker 部署 GitLab 和 GitLab Runner 指南
docker·容器·gitlab
曦樂~17 小时前
【Docker】网络
docker·容器·php