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.pswp.cn/pingmian/93844.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93844.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93844.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有符号和无符号的区别

有符号&#xff08;Signed&#xff09;和无符号&#xff08;Unsigned&#xff09;是计算机编程中用来描述整数数据类型能否表示负数的两个概念。它们的主要区别在于能否表示负数以及数值的表示范围。以下是它们的核心区别&#xff1a;1. 能否表示负数有符号&#xff08;Signed&…

8月21日作业

1、Makefile中头文件发生过修改的解决&#xff1a; 处插入*.h依赖&#xff0c;对.h文件打的时间戳进行检查2、头删和输出//五、头删 void delete_head(seq_p s) {empty(s);for(int i1;i<s->len;i){s->data[i-1]s->data[i];}s->len--; }//六、输出 void output(s…

Lucene 8.5.0 的 `.pos` 文件**逻辑结构**

Lucene 8.5.0 的 .pos 文件**逻辑结构**&#xff08;按真实实现重新整理&#xff09; .pos 文件 ├─ Header (CodecHeader) ├─ TermPositions TermCount ← 每个 term 一段&#xff0c;顺序由词典隐式决定 │ ├─ PackedPosDeltaBlock N ← 仅当 **无 payl…

基于Matlab多技术融合的红外图像增强方法研究

红外图像在低照度、强干扰和复杂环境下具有较强的成像能力&#xff0c;但受传感器噪声、成像条件及大气衰减等因素影响&#xff0c;原始红外图像往往存在对比度低、细节模糊及光照不均等问题。本文针对红外图像质量退化的特点&#xff0c;提出了一种基于多算法融合的红外图像增…

【时时三省】集成测试 简介

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 目录 1,集成测试含义 2,集成测试 验证方法 3,集成测试 用例设计方法 4,集成测试输出物 5,集成测试注意点 1,集成测试含义 单元测试在以V模型的流程中,对应的是架构设计阶段。在 单元测试 和 架构设计…

leetcode 76 最小覆盖子串

一、题目描述二、解题思路整体思路&#xff1a;模拟寻找最小覆盖子集的过程&#xff0c;由于可借助同向双指针且可以做到指针不回退&#xff0c;所以可以用滑动窗口的思想来解决这个问题。具体思路&#xff1a;(1)数组hash1用于统计t中每一个字符出现的频次&#xff0c;变量kin…

阿里云ECS服务器的公网IP地址

文章目录环境背景查询公网IP地址阿里云控制台阿里云客户端工具&#xff08;图形界面&#xff09;阿里云CLI工具&#xff08;命令行&#xff09;其它方法元数据服务器ipinfo.io参考注&#xff1a;本文介绍了如何获取阿里云ECS服务器的公网IP地址&#xff0c;可以顺便了解一下和阿…

IPSec 与 IKE 核心知识点总结

一、IPSec 安全基础IPSec 是保障 IP 数据传输安全的核心协议&#xff0c;其核心围绕密钥管理和安全策略约定展开&#xff0c;具体包括以下关键内容&#xff1a;1. 对称密钥的作用与要求对称密钥是 IPSec 实现加密、验证的基础&#xff0c;主要用于三个场景&#xff1a;加密 / 解…

C2ComponentStore

1. C2ComponentStore这是 Codec 2.0 HAL 的抽象接口&#xff08;frameworks/av/media/codec2/core/include/C2ComponentStore.h&#xff09;。代表一个「组件工厂」&#xff0c;负责&#xff1a;枚举当前可用的 Codec2 组件&#xff08;解码器、编码器&#xff09;。创建组件&a…

AI 在医疗领域的应用与挑战

引言介绍 AI 技术迅猛发展的大背景&#xff0c;引出其在医疗领域的重要应用。阐述研究 AI 医疗应用及挑战对推动医疗行业进步的重要意义。AI 在医疗领域的应用现状疾病诊断辅助&#xff1a;描述 AI 影像识别技术在识别 X 光、CT、MRI 影像中疾病特征的应用&#xff0c;如对肺癌…

【GPT入门】第51课 Conda环境迁移教程:将xxzh环境从默认路径迁移到指定目录

【GPT入门】第51课 Conda环境迁移教程&#xff1a;将xxzh环境从默认路径迁移到指定目录步骤1&#xff1a;创建目标目录&#xff08;若不存在&#xff09;步骤2&#xff1a;克隆环境到新路径步骤3&#xff1a;验证新环境可用性步骤4&#xff1a;删除旧环境&#xff08;可选&…

应急响应-模拟服务器挂马后的应急相关操作

工具&#xff1a;攻击机&#xff1a; kail:192.168.108.131 kail下载地址&#xff1a;https://mirrors.aliyun.com/kali-images/kali-2021.3/kali-linux-2021.3-live-i386.iso靶机&#xff1a;windows 7: 192.168.108.1321、在kali中制作木马文件&#xff1a;vhost.exe&#xf…

记一次 .NET 某光谱检测软件 内存暴涨分析

一&#xff1a;背景 1. 讲故事 训练营里的一位学员找到我&#xff0c;说他们的系统会出现内存暴涨的情况&#xff0c;看了下也不是托管堆的问题&#xff0c;让我协助一下到底怎么回事&#xff1f;既然有dump了&#xff0c;那就开始分析之旅吧。 二&#xff1a;内存暴涨分析 1. …

基于OpenCV的物体识别与计数

在计算机视觉领域&#xff0c;利用图像处理技术进行物体识别和计数是一项基础且重要的任务。本文将介绍一种使用OpenCV库实现的高效物体识别与计数方法&#xff0c;并提供一些代码片段以帮助理解各个步骤。 这是前几年做过传统图像处理计数的项目&#xff0c;通过传统图像处理之…

算法题打卡力扣第34题:在排序数组中查找元素的第一个和最后一个位置(mid)

题目描述提示&#xff1a; 0 < nums.length < 105 -109 < nums[i] < 109 nums 是一个非递减数组 -109 < target < 109 解题思路一 暴力解 头到尾遍历整个数组。 用一个变量 first 记录第一次遇到 target 的索引。 继续遍历&#xff0c;用另一个变量 last 不断…

虚幻基础:曲线

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录曲线&#xff1a;数值变化的曲线动画曲线动画曲线get curve value只有curve所在动画被播放才返回曲线数值没播放时 返回0一个曲线可以在多个动画中使用 且可以设置曲线的不同值曲线&#xff1a;数值变化的曲线 动画…

MFC随笔—不使用对话框资源模板创建对话框

在MFC程序中使用对话框时一般都是首先在资源模版里创建对话框资源,然后DoModal()或者Create显示出模式对话框或者非模式对话框。然而采用该方式创建出的对话框移植性差,从一个工程移动到另一个工程比较麻烦。 在MFC中还有另一种创建对话框的方法,即利用DLGTEMPLATE、DLGITEM…

第八十六章:实战篇:文本生成脚本 → TTS + 镜头 → 视频整合——让你的文字“动听”又“好看”!

AI导演链路前言&#xff1a;AI的“智能制片人”——文本 → 视频&#xff0c;你的想法“一键出片”&#xff01;第一章&#xff1a;痛点直击——传统视频制作&#xff0c;累到“吐血”&#xff01;第二章&#xff1a;探秘“智能制片厂”&#xff1a;流水线上的四大核心模块&…

Linux内核源码详解--缺页异常(Page Fault)处理的核心函数handle_pte_fault

handle_pte_fault 是 Linux 内核中处理缺页异常&#xff08;Page Fault&#xff09;的核心函数&#xff0c;负责根据页表项&#xff08;PTE&#xff09;的状态和访问权限&#xff0c;分发到不同的子处理逻辑&#xff08;如匿名页映射、文件页映射、写时复制、NUMA 迁移等&#…

基于混合注意力网络和深度信念网络的鲁棒视频水印技术基础理论深度解析

1. 引言随着数字媒体技术的迅猛发展和互联网的普及&#xff0c;视频内容的创作、传播和分享变得前所未有的便捷。然而&#xff0c;这种便利性也带来了严重的版权保护挑战。数字视频的易复制性使得盗版和非法传播成为困扰内容创作者和版权所有者的重大问题。传统的加密技术虽然能…