当前位置: 首页 > news >正文

SkyWalking + Elasticsearch8 容器化部署指南:国内镜像加速与生产级调优

SkyWalking + Elasticsearch8 Docker 部署文档


本文提供在 Ubuntu 服务器上,使用 Docker Compose 部署 SkyWalking(OAP+UI)与 Elasticsearch 8 的完整步骤,数据/日志落地到 /media/disk2

前置条件

  • Ubuntu,已具备 sudo 权限与公网下载能力
  • 端口:9200(ES)、11800(OAP gRPC)、12800(OAP REST/GraphQL)、8080(UI)
  • 内存建议:ES 堆 2–4G,OAP 堆 1–2G;SSD/NVMe 磁盘,预留 ≥20% 空间

1. 安装 Docker/Compose 与内核参数

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc >/dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin# ES 必需内核参数
echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-elasticsearch.conf
sudo sysctl --system

2. 创建目录与权限

sudo mkdir -p /media/disk2/{elasticsearch/{data,logs},skywalking/{oap-logs,ui-logs},skywalking-docker}
# 赋权给 ES 容器内用户(uid 1000)以避免写权限问题
sudo chown -R 1000:0 /media/disk2/elasticsearch/{data,logs}
sudo chown -R $USER:$USER /media/disk2/skywalking

3. docker-compose.yml

将以下内容保存为 /media/disk2/skywalking-docker/docker-compose.yml(采用镜像:阿里云仓库示例,可换为官方镜像):

version: "3.8"services:elasticsearch:image: registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/elasticsearch:8.14.3container_name: elasticsearchrestart: unless-stoppedenvironment:discovery.type: "single-node"xpack.security.enabled: "true"xpack.security.http.ssl.enabled: "false"xpack.security.transport.ssl.enabled: "false"ELASTIC_PASSWORD: "ChangeMe_Elastic!"   # 请改强密码ES_JAVA_OPTS: "-Xms3g -Xmx3g"TZ: "Asia/Shanghai"ulimits:memlock: { soft: -1, hard: -1 }nofile:  { soft: 65536, hard: 65536 }volumes:- /media/disk2/elasticsearch/data:/usr/share/elasticsearch/data- /media/disk2/elasticsearch/logs:/usr/share/elasticsearch/logs# 注意:如果没有复制镜像默认配置且修正权限,则挂载 config 目录会报错- /media/disk2/elasticsearch/config:/usr/share/elasticsearch/configports:- "9200:9200"healthcheck:test: ["CMD-SHELL","curl -s -u elastic:ChangeMe_Elastic! http://127.0.0.1:9200 >/dev/null || exit 1"]interval: 10stimeout: 5sretries: 30oap:image: registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/skywalking-oap-server:10.2.0container_name: skywalking-oaprestart: unless-stoppeddepends_on:elasticsearch:condition: service_healthyenvironment:SW_STORAGE: elasticsearchSW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200SW_STORAGE_ES_HTTP_PROTOCOL: httpSW_ES_USER: elasticSW_ES_PASSWORD: "ChangeMe_Elastic!"JAVA_OPTS: "-Xms2g -Xmx2g"TZ: "Asia/Shanghai"# 单机/小中规模索引建议SW_STORAGE_ES_INDEX_SHARDS_NUMBER: "1"SW_STORAGE_ES_INDEX_REPLICAS_NUMBER: "0"SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR: "3"SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER: "0"volumes:- /media/disk2/skywalking/oap-logs:/skywalking/logsports:- "11800:11800"- "12800:12800"healthcheck:test: ["CMD-SHELL", "curl -s http://127.0.0.1:12800/graphql -X POST -H 'Content-Type: application/json' -d '{\"query\":\"{ version }\"}' | grep -q data || exit 1"]interval: 15stimeout: 5sretries: 20ui:image: registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/skywalking-ui:10.2.0container_name: skywalking-uirestart: unless-stoppeddepends_on:- oapenvironment:SW_OAP_ADDRESS: "http://oap:12800"TZ: "Asia/Shanghai"volumes:- /media/disk2/skywalking/ui-logs:/skywalking/logsports:- "8080:8080"networks:default:name: skywalking-net

可选:不硬编码密码的启动方式(不使用 .env)

  • 将 compose 中的 ELASTIC_PASSWORD: ${ES_PASSWORD}SW_ES_PASSWORD: ${ES_PASSWORD}
  • 启动时传入:ES_PASSWORD='强密码' docker compose up -d
  • 若密码含 $,需写成 $$ 或用上述传参方式避免转义

4. 启动与验证

cd /media/disk2/skywalking-docker# 预检查渲染
docker compose config | cat# 启动
docker compose up -d
docker compose ps# 验证 ES
curl -s -u elastic:ChangeMe_Elastic! http://127.0.0.1:9200 | jq .# 验证 OAP
curl -s http://127.0.0.1:12800/graphql -X POST -H 'Content-Type: application/json' -d '{"query":"{ version }"}'# 访问 UI
# http://<服务器IP>:8080

5. Java Agent 接入(示例)

-javaagent:/path/to/skywalking-agent.jar \
-Dskywalking.agent.service_name=my-service \
-Dskywalking.collector.backend_service=<服务器IP>:11800 \
-Dskywalking.agent.instance_name=$(hostname -s)
  • 容器与 OAP 在同一网络可用 oap:11800

6. 资源与参数建议(约 30+ 微服务)

  • ES 堆内存:-Xms2g -Xmx2g 起步,内存充裕可 3–4g;保持 Xms=Xmx
  • OAP 堆内存:-Xms1g -Xmx2g 起步
  • 单机分片与副本:indexShardsNumber=1indexReplicasNumber=0
  • 超级数据集(trace/log)分片因子:superDatasetIndexShardsFactor=3
  • TTL/采样:根据磁盘与吞吐设置 OAP recordDataTTL/metricsDataTTL,高流量建议下调采样比例至 20%–50%

7. 常见问题与修复

问题:启动报错 “Missing logging config file at /usr/share/elasticsearch/config/log4j2.properties”

原因:挂载空宿主机目录到 /usr/share/elasticsearch/config 覆盖了镜像默认配置

解决方案

  1. 推荐方案:不挂载 config 目录
    编辑 docker-compose.yml,删除以下行:

    - /media/disk2/elasticsearch/config:/usr/share/elasticsearch/config
    

    然后重启:docker compose down && docker compose up -d

  2. 保留挂载:复制默认配置并赋权
    执行以下命令:

    # 使用与 compose 文件中相同的镜像
    IMG=registry.cn-hangzhou.aliyuncs.com/docker_image-ljx/elasticsearch:8.14.3# 创建宿主机配置目录(若不存在)
    sudo mkdir -p /media/disk2/elasticsearch/config# 从镜像中复制默认配置
    docker create --name es-tmp $IMG >/dev/null
    docker cp es-tmp:/usr/share/elasticsearch/config/. /media/disk2/elasticsearch/config/
    docker rm -f es-tmp# 设置权限(容器内 ES 用户 uid 为 1000)
    sudo chown -R 1000:0 /media/disk2/elasticsearch/config
    

    完成后重启:docker compose down && docker compose up -d

简要总结:此问题由空 config 挂载覆盖镜像默认配置引起,解决方法是移除挂载或复制镜像配置到宿主机并设置权限(uid 1000)

// … 文件其余部分保持不变 …

http://www.lryc.cn/news/624474.html

相关文章:

  • 深度解析阿里巴巴国际站商品详情 API:从接口调用到数据结构化处理
  • Vision Master的C#脚本与opencv联合编程
  • 【GM3568JHF】FPGA+ARM异构开发板烧录指南
  • [系统架构设计师]软件可靠性基础知识(九)
  • 蔬菜批发小程序:生产商的数字化转型利器——仙盟创梦IDE
  • 【Linux系统】进程间通信:System V IPC——消息队列和信号量
  • VLN视觉与语言导航(1)——数学与人工智能基础理论
  • 云计算-云上实例部署 RocketChat:Mongodb、主从数据库、Node 环境配置指南
  • 【前端面试题】JavaScript 核心知识点解析(第二十二题到第六十一题)
  • 【运维进阶】部署文件到受管主机
  • Vue2篇——第六章 Vue 路由(VueRouter)全解析
  • 自信息,信息熵,交叉熵,KL散度,JS散度
  • 【自动化测试】Selenium详解-WebUI自动化测试
  • 代理模式深度解析:从静态代理到 Spring AOP 实现
  • MATLAB建模与可视化技术文档:从二维到三维
  • 当使用STL容器去存放数据时,是存放对象合适,还是存放对象指针(对象地址)合适?
  • Centos7使用lamp架构部署wordpress
  • 使用华为显卡训练深度学习模型的步骤
  • 计算机网络技术学习-day3《交换机配置》
  • 像素风球球大作战 HTML 游戏
  • 【opencv-Python学习笔记(6):阈值处理】
  • 如何平衡电竞酒店和高校宿舍对AI云电竞游戏盒子的不同需求?
  • 云计算- KubeVirt 实操指南:VM 创建 、存储挂载、快照、VMI全流程 | 容器到虚拟机(镜像转换/资源调度)
  • AI需要防火墙,云计算需要重新构想
  • 我们为什么需要时序数据库?
  • AI大模型实战:用自然语言处理技术高效处理日常琐事
  • 云计算核心技术之容器技术
  • 网站服务器使用免费SSL证书安全吗?
  • Orange的运维学习日记--45.Ansible进阶之文件部署
  • 公司无公网IP,如何将内网服务,给外面异地连接使用?远程办公可通过什么访问?