当前位置: 代码网 > 服务器>服务器>云虚拟主机 > Docker搭建Skywalking的实现示例

Docker搭建Skywalking的实现示例

2025年02月13日 云虚拟主机 我要评论
docker搭建skywalking虚拟机ip:192.168.0.109nacos服务地址:http://192.168.0.109:8848/nacosmysql服务:ip:192.168.0.1

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服务:
    • 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扩展库目录,用于添加插件或依赖库。
licenseskywalking 项目的开源许可证文件。
licenses项目中使用的所有依赖库的许可证集合。
oap-libsoap 组件所需的依赖库文件夹。
readme.txt项目介绍文件,包含操作指南。
tools工具目录,包含与 skywalking 相关的实用工具。
zipkin-licensezipkin 集成相关的许可证信息。

核心目录说明

  • 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'
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

# 查看已经开发那些端口
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监控系统运行情况。

到此这篇关于docker搭建skywalking的实现示例的文章就介绍到这了,更多相关docker搭建skywalking内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com