避坑指南:在Fedora 40上用Docker部署SkyWalking 10.0.1,我遇到的3个典型错误及解决方法
避坑指南在Fedora 40上用Docker部署SkyWalking 10.0.1的实战复盘最近在Fedora 40上部署SkyWalking 10.0.1时遇到了几个让人头疼的问题。作为一款强大的分布式链路追踪系统SkyWalking的部署本应相对简单但在实际环境中总会遇到各种意想不到的情况。本文将分享我在部署过程中遇到的三个典型错误及其解决方法希望能帮助遇到类似问题的开发者少走弯路。1. Too many open files错误分析与解决这个错误通常出现在SkyWalking OAP服务启动后不久日志中会抛出类似io.netty.channel.ChannelException: timerfd_create() failed: Too many open files的异常。这实际上是Linux系统级别的文件描述符限制问题。1.1 问题根源在Linux系统中每个进程能打开的文件数量是有限制的。SkyWalking OAP作为高性能服务会同时维护大量网络连接和文件操作默认情况下Fedora 40对容器的文件描述符限制是1024SkyWalking OAP在处理大量追踪数据时很容易突破这个限制Docker容器继承了宿主机的ulimit设置但可以通过参数覆盖1.2 解决方案在启动OAP容器时显式设置ulimit参数docker run -d --name oap \ -p 11800:11800 -p 12800:12800 \ --ulimit nofile10240:10240 \ apache/skywalking-oap-server:latest提示10240是一个经验值对于生产环境可能需要设置更高如65535。可以通过ulimit -n在宿主机上验证当前设置。1.3 验证方法进入容器检查实际生效的限制docker exec -it oap bash ulimit -n如果输出显示10240说明设置已生效。2. Cannot link to a non running container容器链接问题在Docker环境中使用--link参数连接容器时经常会遇到这个让人困惑的错误。特别是在重启相关容器后问题会更加明显。2.1 问题场景还原典型的错误场景如下先启动BanyanDB容器docker run -d --name banyandb -p 17913:17913 apache/skywalking-banyandb:latest然后启动OAP容器并链接到BanyanDBdocker run -d --name oap --link banyandb:banyandb apache/skywalking-oap-server:latest如果之后重建了BanyanDB容器即使名称相同OAP容器就会报错无法启动2.2 根本原因Docker的--link机制实际上是在容器之间创建了一种硬编码的依赖关系链接信息存储在容器的/etc/hosts和环境变量中当被链接的容器重建后其内部IP会变化但原容器的链接信息不会自动更新2.3 可靠解决方案有两种方法可以彻底解决这个问题方法一使用Docker网络# 创建自定义网络 docker network create skywalking-net # 将容器连接到同一网络 docker run -d --name banyandb --network skywalking-net apache/skywalking-banyandb:latest docker run -d --name oap --network skywalking-net apache/skywalking-oap-server:latest方法二重启Docker服务如果已经使用了--link并且遇到问题systemctl restart docker docker start oap注意方法二只是临时解决方案建议长期使用Docker网络替代--link。3. application.yml not found配置文件缺失问题这是部署SkyWalking OAP时最常见的配置问题之一错误信息通常显示为ERROR org.apache.skywalking.oap.server.starter.OAPServerBootstrap - file not found: application.yml。3.1 问题分析虽然SkyWalking OAP镜像中确实包含默认的application.yml但在某些情况下文件可能不在预期的位置权限问题导致无法读取用户自定义配置时路径错误3.2 标准解决流程最可靠的方式是将配置文件挂载到容器中# 创建配置目录 mkdir -p /data/oap/config # 临时启动容器提取默认配置 docker run -d --name oap-temp apache/skywalking-oap-server:latest docker cp oap-temp:/skywalking/config/application.yml /data/oap/config/ docker rm -f oap-temp # 编辑配置文件根据需要修改 vim /data/oap/config/application.yml # 正式启动容器并挂载配置 docker run -d --name oap \ -v /data/oap/config/application.yml:/skywalking/config/application.yml \ apache/skywalking-oap-server:latest3.3 关键配置项在application.yml中有几个与BanyanDB相关的重要配置storage: selector: ${SW_STORAGE:banyandb} banyandb: host: ${SW_STORAGE_BANYANDB_HOST:banyandb} port: ${SW_STORAGE_BANYANDB_PORT:17912} maxBulkSize: ${SW_STORAGE_BANYANDB_MAX_BULK_SIZE:5000}4. 完整部署流程与优化建议基于上述问题的解决方案下面给出一个完整的优化部署流程。4.1 环境准备确保系统满足以下要求Fedora 40其他Linux发行版也可参考Docker 20.10.0或更高版本至少4GB可用内存磁盘空间建议20GB以上4.2 部署步骤1. 创建专用网络docker network create --driver bridge skywalking-net2. 启动BanyanDBdocker run -d --name banyandb \ --network skywalking-net \ -p 17913:17913 \ apache/skywalking-banyandb:latest \ standalone \ --stream-root-path /tmp/stream-data \ --measure-root-path /tmp/measure-data3. 准备OAP配置mkdir -p /data/skywalking/oap/{config,logs} # 获取默认配置 docker run --rm apache/skywalking-oap-server:latest \ cat /skywalking/config/application.yml /data/skywalking/oap/config/application.yml # 修改配置根据需要 vim /data/skywalking/oap/config/application.yml4. 启动OAP服务docker run -d --name oap \ --network skywalking-net \ -p 11800:11800 -p 12800:12800 \ --ulimit nofile65535:65535 \ -v /data/skywalking/oap/config/application.yml:/skywalking/config/application.yml \ -v /data/skywalking/oap/logs:/skywalking/logs \ -e SW_STORAGEbanyandb \ -e SW_STORAGE_BANYANDB_TARGETSbanyandb:17912 \ -e JAVA_OPTS-Xms2g -Xmx2g \ apache/skywalking-oap-server:latest5. 启动UI界面docker run -d --name skywalking-ui \ --network skywalking-net \ -p 8080:8080 \ -e SW_OAP_ADDRESShttp://oap:12800 \ apache/skywalking-ui:latest4.3 性能调优建议对于生产环境还需要考虑以下优化参数参数推荐值说明JAVA_OPTS-Xms4g -Xmx4g根据机器内存调整SW_STORAGE_MAX_SIZE10000每批最大存储量SW_CORE_GRPC_CHANNEL_SIZE10gRPC通道数量SW_RECEIVER_BUFFER_PATH/tmp/sw缓冲区路径在Fedora 40上实际部署后发现新版SkyWalking 10.0.1的UI确实有了很大改进但配置过程也比之前版本复杂了一些。特别是与BanyanDB的集成需要特别注意版本兼容性和网络连接问题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2445477.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!