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.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;這種便利性也帶來了嚴重的版權保護挑戰。數字視頻的易復制性使得盜版和非法傳播成為困擾內容創作者和版權所有者的重大問題。傳統的加密技術雖然能…