Elasticsearch 容器化部署(单机版):从零搭建你的搜索和分析引擎
实时搜索 + 容器化运维,10 分钟搭建属于你的数据洞察平台。
一、为什么选择容器化部署 Elasticsearch?
1.1 单机版的适用场景
单机版本在个人学习或者小型团队的时候,非常容易上手。常用的场景如下:
- 开发测试环境:快速搭建用于功能验证和调试
- 个人博客/小型网站:为站内搜索提供支持
- 学习实验:熟悉 Elasticsearch 的 API 和查询语法
- 边缘节点:数据量不大但需要搜索能力的场景
#mermaid-svg-UG9y5rYcScKcd7fT{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UG9y5rYcScKcd7fT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UG9y5rYcScKcd7fT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UG9y5rYcScKcd7fT .error-icon{fill:#552222;}#mermaid-svg-UG9y5rYcScKcd7fT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UG9y5rYcScKcd7fT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UG9y5rYcScKcd7fT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UG9y5rYcScKcd7fT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UG9y5rYcScKcd7fT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UG9y5rYcScKcd7fT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UG9y5rYcScKcd7fT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UG9y5rYcScKcd7fT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UG9y5rYcScKcd7fT .marker.cross{stroke:#333333;}#mermaid-svg-UG9y5rYcScKcd7fT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UG9y5rYcScKcd7fT p{margin:0;}#mermaid-svg-UG9y5rYcScKcd7fT .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UG9y5rYcScKcd7fT .cluster-label text{fill:#333;}#mermaid-svg-UG9y5rYcScKcd7fT .cluster-label span{color:#333;}#mermaid-svg-UG9y5rYcScKcd7fT .cluster-label span p{background-color:transparent;}#mermaid-svg-UG9y5rYcScKcd7fT .label text,#mermaid-svg-UG9y5rYcScKcd7fT span{fill:#333;color:#333;}#mermaid-svg-UG9y5rYcScKcd7fT .node rect,#mermaid-svg-UG9y5rYcScKcd7fT .node circle,#mermaid-svg-UG9y5rYcScKcd7fT .node ellipse,#mermaid-svg-UG9y5rYcScKcd7fT .node polygon,#mermaid-svg-UG9y5rYcScKcd7fT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UG9y5rYcScKcd7fT .rough-node .label text,#mermaid-svg-UG9y5rYcScKcd7fT .node .label text,#mermaid-svg-UG9y5rYcScKcd7fT .image-shape .label,#mermaid-svg-UG9y5rYcScKcd7fT .icon-shape .label{text-anchor:middle;}#mermaid-svg-UG9y5rYcScKcd7fT .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UG9y5rYcScKcd7fT .rough-node .label,#mermaid-svg-UG9y5rYcScKcd7fT .node .label,#mermaid-svg-UG9y5rYcScKcd7fT .image-shape .label,#mermaid-svg-UG9y5rYcScKcd7fT .icon-shape .label{text-align:center;}#mermaid-svg-UG9y5rYcScKcd7fT .node.clickable{cursor:pointer;}#mermaid-svg-UG9y5rYcScKcd7fT .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UG9y5rYcScKcd7fT .arrowheadPath{fill:#333333;}#mermaid-svg-UG9y5rYcScKcd7fT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UG9y5rYcScKcd7fT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UG9y5rYcScKcd7fT .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UG9y5rYcScKcd7fT .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UG9y5rYcScKcd7fT .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UG9y5rYcScKcd7fT .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UG9y5rYcScKcd7fT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UG9y5rYcScKcd7fT .cluster text{fill:#333;}#mermaid-svg-UG9y5rYcScKcd7fT .cluster span{color:#333;}#mermaid-svg-UG9y5rYcScKcd7fT div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UG9y5rYcScKcd7fT .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UG9y5rYcScKcd7fT rect.text{fill:none;stroke-width:0;}#mermaid-svg-UG9y5rYcScKcd7fT .icon-shape,#mermaid-svg-UG9y5rYcScKcd7fT .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UG9y5rYcScKcd7fT .icon-shape p,#mermaid-svg-UG9y5rYcScKcd7fT .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UG9y5rYcScKcd7fT .icon-shape .label rect,#mermaid-svg-UG9y5rYcScKcd7fT .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UG9y5rYcScKcd7fT .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UG9y5rYcScKcd7fT .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UG9y5rYcScKcd7fT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 核心价值
单机 ES 适用场景
开发测试环境
功能验证与调试
个人博客/小型网站
站内搜索
学习实验
API 与查询语法
边缘节点
轻量搜索能力
快速搭建 ✅
低成本 ✅
易上手 ✅
1.2 容器化带来的核心优势
#mermaid-svg-tX6dIC8qwPFsolEv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-tX6dIC8qwPFsolEv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tX6dIC8qwPFsolEv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tX6dIC8qwPFsolEv .error-icon{fill:#552222;}#mermaid-svg-tX6dIC8qwPFsolEv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tX6dIC8qwPFsolEv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tX6dIC8qwPFsolEv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tX6dIC8qwPFsolEv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tX6dIC8qwPFsolEv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tX6dIC8qwPFsolEv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tX6dIC8qwPFsolEv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tX6dIC8qwPFsolEv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tX6dIC8qwPFsolEv .marker.cross{stroke:#333333;}#mermaid-svg-tX6dIC8qwPFsolEv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tX6dIC8qwPFsolEv p{margin:0;}#mermaid-svg-tX6dIC8qwPFsolEv .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tX6dIC8qwPFsolEv .cluster-label text{fill:#333;}#mermaid-svg-tX6dIC8qwPFsolEv .cluster-label span{color:#333;}#mermaid-svg-tX6dIC8qwPFsolEv .cluster-label span p{background-color:transparent;}#mermaid-svg-tX6dIC8qwPFsolEv .label text,#mermaid-svg-tX6dIC8qwPFsolEv span{fill:#333;color:#333;}#mermaid-svg-tX6dIC8qwPFsolEv .node rect,#mermaid-svg-tX6dIC8qwPFsolEv .node circle,#mermaid-svg-tX6dIC8qwPFsolEv .node ellipse,#mermaid-svg-tX6dIC8qwPFsolEv .node polygon,#mermaid-svg-tX6dIC8qwPFsolEv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tX6dIC8qwPFsolEv .rough-node .label text,#mermaid-svg-tX6dIC8qwPFsolEv .node .label text,#mermaid-svg-tX6dIC8qwPFsolEv .image-shape .label,#mermaid-svg-tX6dIC8qwPFsolEv .icon-shape .label{text-anchor:middle;}#mermaid-svg-tX6dIC8qwPFsolEv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tX6dIC8qwPFsolEv .rough-node .label,#mermaid-svg-tX6dIC8qwPFsolEv .node .label,#mermaid-svg-tX6dIC8qwPFsolEv .image-shape .label,#mermaid-svg-tX6dIC8qwPFsolEv .icon-shape .label{text-align:center;}#mermaid-svg-tX6dIC8qwPFsolEv .node.clickable{cursor:pointer;}#mermaid-svg-tX6dIC8qwPFsolEv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tX6dIC8qwPFsolEv .arrowheadPath{fill:#333333;}#mermaid-svg-tX6dIC8qwPFsolEv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tX6dIC8qwPFsolEv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tX6dIC8qwPFsolEv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tX6dIC8qwPFsolEv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tX6dIC8qwPFsolEv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tX6dIC8qwPFsolEv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tX6dIC8qwPFsolEv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tX6dIC8qwPFsolEv .cluster text{fill:#333;}#mermaid-svg-tX6dIC8qwPFsolEv .cluster span{color:#333;}#mermaid-svg-tX6dIC8qwPFsolEv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tX6dIC8qwPFsolEv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tX6dIC8qwPFsolEv rect.text{fill:none;stroke-width:0;}#mermaid-svg-tX6dIC8qwPFsolEv .icon-shape,#mermaid-svg-tX6dIC8qwPFsolEv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tX6dIC8qwPFsolEv .icon-shape p,#mermaid-svg-tX6dIC8qwPFsolEv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tX6dIC8qwPFsolEv .icon-shape .label rect,#mermaid-svg-tX6dIC8qwPFsolEv .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tX6dIC8qwPFsolEv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tX6dIC8qwPFsolEv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tX6dIC8qwPFsolEv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 容器化部署
传统部署
安装 JDK ❌
配置系统参数 ❌
管理进程 ❌
版本冲突 ❌
Docker 一键启动 ✅
环境隔离 ✅
快速重置 ✅
版本灵活切换 ✅
- 一键启动:不需要手动安装 Java、配置系统参数,Docker 镜像开箱即用
- 环境隔离:与宿主机其他应用互不干扰,避免版本冲突
- 快速重置:损坏或测试完毕可随时删除重建
- 版本灵活:轻松切换 7.x/8.x 不同版本进行兼容性测试
二、部署前准备
2.1 环境要求
- Docker Engine 20.10+
- 可用内存 8GB
- 宿主机需调整
vm.max_map_count参数(见下面部署实战)
2.2 拉取镜像
选择一个稳定的版本,减少使用过程中的不友好情况。elasticsearch:8.12.0 是一个常见的稳定版本:
bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0
三、单节点生产级部署步骤
#mermaid-svg-RV7pzXlSte5UnjdL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RV7pzXlSte5UnjdL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RV7pzXlSte5UnjdL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RV7pzXlSte5UnjdL .error-icon{fill:#552222;}#mermaid-svg-RV7pzXlSte5UnjdL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RV7pzXlSte5UnjdL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RV7pzXlSte5UnjdL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RV7pzXlSte5UnjdL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RV7pzXlSte5UnjdL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RV7pzXlSte5UnjdL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RV7pzXlSte5UnjdL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RV7pzXlSte5UnjdL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RV7pzXlSte5UnjdL .marker.cross{stroke:#333333;}#mermaid-svg-RV7pzXlSte5UnjdL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RV7pzXlSte5UnjdL p{margin:0;}#mermaid-svg-RV7pzXlSte5UnjdL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RV7pzXlSte5UnjdL .cluster-label text{fill:#333;}#mermaid-svg-RV7pzXlSte5UnjdL .cluster-label span{color:#333;}#mermaid-svg-RV7pzXlSte5UnjdL .cluster-label span p{background-color:transparent;}#mermaid-svg-RV7pzXlSte5UnjdL .label text,#mermaid-svg-RV7pzXlSte5UnjdL span{fill:#333;color:#333;}#mermaid-svg-RV7pzXlSte5UnjdL .node rect,#mermaid-svg-RV7pzXlSte5UnjdL .node circle,#mermaid-svg-RV7pzXlSte5UnjdL .node ellipse,#mermaid-svg-RV7pzXlSte5UnjdL .node polygon,#mermaid-svg-RV7pzXlSte5UnjdL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RV7pzXlSte5UnjdL .rough-node .label text,#mermaid-svg-RV7pzXlSte5UnjdL .node .label text,#mermaid-svg-RV7pzXlSte5UnjdL .image-shape .label,#mermaid-svg-RV7pzXlSte5UnjdL .icon-shape .label{text-anchor:middle;}#mermaid-svg-RV7pzXlSte5UnjdL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RV7pzXlSte5UnjdL .rough-node .label,#mermaid-svg-RV7pzXlSte5UnjdL .node .label,#mermaid-svg-RV7pzXlSte5UnjdL .image-shape .label,#mermaid-svg-RV7pzXlSte5UnjdL .icon-shape .label{text-align:center;}#mermaid-svg-RV7pzXlSte5UnjdL .node.clickable{cursor:pointer;}#mermaid-svg-RV7pzXlSte5UnjdL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RV7pzXlSte5UnjdL .arrowheadPath{fill:#333333;}#mermaid-svg-RV7pzXlSte5UnjdL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RV7pzXlSte5UnjdL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RV7pzXlSte5UnjdL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RV7pzXlSte5UnjdL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RV7pzXlSte5UnjdL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RV7pzXlSte5UnjdL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RV7pzXlSte5UnjdL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RV7pzXlSte5UnjdL .cluster text{fill:#333;}#mermaid-svg-RV7pzXlSte5UnjdL .cluster span{color:#333;}#mermaid-svg-RV7pzXlSte5UnjdL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RV7pzXlSte5UnjdL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RV7pzXlSte5UnjdL rect.text{fill:none;stroke-width:0;}#mermaid-svg-RV7pzXlSte5UnjdL .icon-shape,#mermaid-svg-RV7pzXlSte5UnjdL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RV7pzXlSte5UnjdL .icon-shape p,#mermaid-svg-RV7pzXlSte5UnjdL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RV7pzXlSte5UnjdL .icon-shape .label rect,#mermaid-svg-RV7pzXlSte5UnjdL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RV7pzXlSte5UnjdL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RV7pzXlSte5UnjdL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RV7pzXlSte5UnjdL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 网络暴露
宿主机挂载
Docker 容器内部
挂载
挂载
挂载
暴露
暴露
Elasticsearch 进程
8.12.0
索引存储
/usr/share/elasticsearch/data
SSL 证书
/config/certs
运行日志
/logs
/data/elasticsearch/data
/data/elasticsearch/config
/data/elasticsearch/config/certs
/data/elasticsearch/logs
9200
HTTP API
9300
节点通信
3.1 调整系统参数(Linux/macOS)
Elasticsearch 依赖 vm.max_map_count,需设为至少 262144:
bash
# 临时生效
sudo sysctl -w vm.max_map_count=262144
# 永久生效
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
Windows WSL2 用户:在 %userprofile% 下创建 .wslconfig 文件:
ini
[wsl2]
kernelCommandLine = "sysctl.vm.max_map_count=262144"
然后执行 wsl --shutdown 重启 WSL。
3.2 创建持久化目录
bash
mkdir -p /data/elasticsearch/{data,logs,config,backup}
chmod 755 /data/elasticsearch/data
3.3 准备配置文件
创建 /data/elasticsearch/config/elasticsearch.yml:
yaml
# 集群配置(单节点)
cluster.name: dev-cluster
node.name: single-node
network.host: 0.0.0.0
http.port: 9200
# 单节点发现
discovery.type: single-node
# 安全配置(8.x 默认启用)
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
enabled: true
keystore.path: /usr/share/elasticsearch/config/certs/http.p12
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: /usr/share/elasticsearch/config/certs/transport.p12
truststore.path: /usr/share/elasticsearch/config/certs/transport.p12
3.4 生成安全证书
Elasticsearch 8.x 需要证书启用 HTTPS。使用官方镜像生成:
bash
mkdir -p /data/elasticsearch/config/certs
docker run --rm \
-v /data/elasticsearch/config/certs:/certs \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0 \
bash -c "bin/elasticsearch-certutil http --silent --pem --out /certs/bundle.zip && \
unzip /certs/bundle.zip -d /certs && \
cp /certs/elasticsearch/*.pem /certs/ && \
cp /certs/elasticsearch/*.p12 /certs/"
3.5 启动容器
bash
# 生成随机密码(首次启动时会自动生成,也可通过环境变量指定)
export ES_ROOT_PWD=$(openssl rand -base64 16)
docker run -d \
--name elasticsearch-single \
--restart always \
-p 9200:9200 \
-p 9300:9300 \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
-e "ELASTIC_PASSWORD=${ES_ROOT_PWD}" \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data/elasticsearch/config/certs:/usr/share/elasticsearch/config/certs \
--memory="4g" \
--cpus="2" \
--ulimit nofile=65535:65535 \
--ulimit memlock=-1:-1 \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0
3.6 验证部署
bash
# 查看启动日志(会输出 elastic 用户密码,务必保存)
docker logs elasticsearch-single
# 测试连接(使用生成的证书)
curl --cacert /data/elasticsearch/config/certs/ca/ca.crt \
-u elastic:${ES_ROOT_PWD} \
https://localhost:9200
# 输出应包含 cluster_name 等基本信息
四、部署流程图
#mermaid-svg-gMTeLo1noIJzCF1p{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gMTeLo1noIJzCF1p .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gMTeLo1noIJzCF1p .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gMTeLo1noIJzCF1p .error-icon{fill:#552222;}#mermaid-svg-gMTeLo1noIJzCF1p .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gMTeLo1noIJzCF1p .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gMTeLo1noIJzCF1p .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gMTeLo1noIJzCF1p .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gMTeLo1noIJzCF1p .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gMTeLo1noIJzCF1p .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gMTeLo1noIJzCF1p .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gMTeLo1noIJzCF1p .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gMTeLo1noIJzCF1p .marker.cross{stroke:#333333;}#mermaid-svg-gMTeLo1noIJzCF1p svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gMTeLo1noIJzCF1p p{margin:0;}#mermaid-svg-gMTeLo1noIJzCF1p .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gMTeLo1noIJzCF1p .cluster-label text{fill:#333;}#mermaid-svg-gMTeLo1noIJzCF1p .cluster-label span{color:#333;}#mermaid-svg-gMTeLo1noIJzCF1p .cluster-label span p{background-color:transparent;}#mermaid-svg-gMTeLo1noIJzCF1p .label text,#mermaid-svg-gMTeLo1noIJzCF1p span{fill:#333;color:#333;}#mermaid-svg-gMTeLo1noIJzCF1p .node rect,#mermaid-svg-gMTeLo1noIJzCF1p .node circle,#mermaid-svg-gMTeLo1noIJzCF1p .node ellipse,#mermaid-svg-gMTeLo1noIJzCF1p .node polygon,#mermaid-svg-gMTeLo1noIJzCF1p .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gMTeLo1noIJzCF1p .rough-node .label text,#mermaid-svg-gMTeLo1noIJzCF1p .node .label text,#mermaid-svg-gMTeLo1noIJzCF1p .image-shape .label,#mermaid-svg-gMTeLo1noIJzCF1p .icon-shape .label{text-anchor:middle;}#mermaid-svg-gMTeLo1noIJzCF1p .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gMTeLo1noIJzCF1p .rough-node .label,#mermaid-svg-gMTeLo1noIJzCF1p .node .label,#mermaid-svg-gMTeLo1noIJzCF1p .image-shape .label,#mermaid-svg-gMTeLo1noIJzCF1p .icon-shape .label{text-align:center;}#mermaid-svg-gMTeLo1noIJzCF1p .node.clickable{cursor:pointer;}#mermaid-svg-gMTeLo1noIJzCF1p .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gMTeLo1noIJzCF1p .arrowheadPath{fill:#333333;}#mermaid-svg-gMTeLo1noIJzCF1p .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gMTeLo1noIJzCF1p .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gMTeLo1noIJzCF1p .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gMTeLo1noIJzCF1p .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gMTeLo1noIJzCF1p .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gMTeLo1noIJzCF1p .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gMTeLo1noIJzCF1p .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gMTeLo1noIJzCF1p .cluster text{fill:#333;}#mermaid-svg-gMTeLo1noIJzCF1p .cluster span{color:#333;}#mermaid-svg-gMTeLo1noIJzCF1p div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gMTeLo1noIJzCF1p .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gMTeLo1noIJzCF1p rect.text{fill:none;stroke-width:0;}#mermaid-svg-gMTeLo1noIJzCF1p .icon-shape,#mermaid-svg-gMTeLo1noIJzCF1p .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gMTeLo1noIJzCF1p .icon-shape p,#mermaid-svg-gMTeLo1noIJzCF1p .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gMTeLo1noIJzCF1p .icon-shape .label rect,#mermaid-svg-gMTeLo1noIJzCF1p .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gMTeLo1noIJzCF1p .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gMTeLo1noIJzCF1p .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gMTeLo1noIJzCF1p :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 启动与验证
配置与证书
环境准备
调整 vm.max_map_count
sysctl -w 262144
创建目录结构
data/logs/config/backup
编写 elasticsearch.yml
集群/安全/网络
生成安全证书
elasticsearch-certutil
docker run 启动
挂载配置 + 数据卷
验证连接
五、搭配 Kibana 可视化
#mermaid-svg-kva9MORAOKpkaT3H{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kva9MORAOKpkaT3H .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kva9MORAOKpkaT3H .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kva9MORAOKpkaT3H .error-icon{fill:#552222;}#mermaid-svg-kva9MORAOKpkaT3H .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kva9MORAOKpkaT3H .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kva9MORAOKpkaT3H .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kva9MORAOKpkaT3H .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kva9MORAOKpkaT3H .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kva9MORAOKpkaT3H .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kva9MORAOKpkaT3H .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kva9MORAOKpkaT3H .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kva9MORAOKpkaT3H .marker.cross{stroke:#333333;}#mermaid-svg-kva9MORAOKpkaT3H svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kva9MORAOKpkaT3H p{margin:0;}#mermaid-svg-kva9MORAOKpkaT3H .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kva9MORAOKpkaT3H .cluster-label text{fill:#333;}#mermaid-svg-kva9MORAOKpkaT3H .cluster-label span{color:#333;}#mermaid-svg-kva9MORAOKpkaT3H .cluster-label span p{background-color:transparent;}#mermaid-svg-kva9MORAOKpkaT3H .label text,#mermaid-svg-kva9MORAOKpkaT3H span{fill:#333;color:#333;}#mermaid-svg-kva9MORAOKpkaT3H .node rect,#mermaid-svg-kva9MORAOKpkaT3H .node circle,#mermaid-svg-kva9MORAOKpkaT3H .node ellipse,#mermaid-svg-kva9MORAOKpkaT3H .node polygon,#mermaid-svg-kva9MORAOKpkaT3H .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kva9MORAOKpkaT3H .rough-node .label text,#mermaid-svg-kva9MORAOKpkaT3H .node .label text,#mermaid-svg-kva9MORAOKpkaT3H .image-shape .label,#mermaid-svg-kva9MORAOKpkaT3H .icon-shape .label{text-anchor:middle;}#mermaid-svg-kva9MORAOKpkaT3H .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kva9MORAOKpkaT3H .rough-node .label,#mermaid-svg-kva9MORAOKpkaT3H .node .label,#mermaid-svg-kva9MORAOKpkaT3H .image-shape .label,#mermaid-svg-kva9MORAOKpkaT3H .icon-shape .label{text-align:center;}#mermaid-svg-kva9MORAOKpkaT3H .node.clickable{cursor:pointer;}#mermaid-svg-kva9MORAOKpkaT3H .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kva9MORAOKpkaT3H .arrowheadPath{fill:#333333;}#mermaid-svg-kva9MORAOKpkaT3H .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kva9MORAOKpkaT3H .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kva9MORAOKpkaT3H .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kva9MORAOKpkaT3H .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kva9MORAOKpkaT3H .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kva9MORAOKpkaT3H .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kva9MORAOKpkaT3H .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kva9MORAOKpkaT3H .cluster text{fill:#333;}#mermaid-svg-kva9MORAOKpkaT3H .cluster span{color:#333;}#mermaid-svg-kva9MORAOKpkaT3H div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kva9MORAOKpkaT3H .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kva9MORAOKpkaT3H rect.text{fill:none;stroke-width:0;}#mermaid-svg-kva9MORAOKpkaT3H .icon-shape,#mermaid-svg-kva9MORAOKpkaT3H .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kva9MORAOKpkaT3H .icon-shape p,#mermaid-svg-kva9MORAOKpkaT3H .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kva9MORAOKpkaT3H .icon-shape .label rect,#mermaid-svg-kva9MORAOKpkaT3H .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kva9MORAOKpkaT3H .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kva9MORAOKpkaT3H .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kva9MORAOKpkaT3H :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 认证
Docker 容器
用户端
用户访问
ES_HOSTS + SSL
浏览器
https://localhost:5601
Kibana
8.12.0
端口 5601
Elasticsearch
8.12.0
端口 9200
kibana_system 用户
证书认证
5.1 启动 Kibana 容器
bash
docker run -d \
--name kibana \
--restart always \
-p 5601:5601 \
-e "ELASTICSEARCH_HOSTS=https://elasticsearch-single:9200" \
-e "ELASTICSEARCH_USERNAME=kibana_system" \
-e "ELASTICSEARCH_PASSWORD=YourKibanaPassword" \
-e "ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=/usr/share/kibana/config/certs/ca/ca.crt" \
-v /data/elasticsearch/config/certs:/usr/share/kibana/config/certs \
--network host \
docker.elastic.co/kibana/kibana:8.12.0
5.2 创建 Kibana 用户
在 Elasticsearch 中为 Kibana 创建用户:
bash
# 进入 ES 容器
docker exec -it elasticsearch-single bash
# 创建 kibana_system 用户(如果尚未创建)
bin/elasticsearch-reset-password -u kibana_system -a
六、企业实战案例:小型应用日志分析
6.1 背景
某创业公司有 3 个微服务应用,每天产生约 5GB 日志,希望快速搭建日志查看平台,便于排查线上问题。
6.2 需求
- 实时采集应用日志
- 支持关键字搜索
- 能够按时间、级别过滤
- 运维成本低,预算有限
6.3 实施方案
6.3.1 数据流架构
#mermaid-svg-ex1v8GbYIIVtmoQD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ex1v8GbYIIVtmoQD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ex1v8GbYIIVtmoQD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ex1v8GbYIIVtmoQD .error-icon{fill:#552222;}#mermaid-svg-ex1v8GbYIIVtmoQD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ex1v8GbYIIVtmoQD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ex1v8GbYIIVtmoQD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ex1v8GbYIIVtmoQD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ex1v8GbYIIVtmoQD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ex1v8GbYIIVtmoQD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ex1v8GbYIIVtmoQD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ex1v8GbYIIVtmoQD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ex1v8GbYIIVtmoQD .marker.cross{stroke:#333333;}#mermaid-svg-ex1v8GbYIIVtmoQD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ex1v8GbYIIVtmoQD p{margin:0;}#mermaid-svg-ex1v8GbYIIVtmoQD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ex1v8GbYIIVtmoQD .cluster-label text{fill:#333;}#mermaid-svg-ex1v8GbYIIVtmoQD .cluster-label span{color:#333;}#mermaid-svg-ex1v8GbYIIVtmoQD .cluster-label span p{background-color:transparent;}#mermaid-svg-ex1v8GbYIIVtmoQD .label text,#mermaid-svg-ex1v8GbYIIVtmoQD span{fill:#333;color:#333;}#mermaid-svg-ex1v8GbYIIVtmoQD .node rect,#mermaid-svg-ex1v8GbYIIVtmoQD .node circle,#mermaid-svg-ex1v8GbYIIVtmoQD .node ellipse,#mermaid-svg-ex1v8GbYIIVtmoQD .node polygon,#mermaid-svg-ex1v8GbYIIVtmoQD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ex1v8GbYIIVtmoQD .rough-node .label text,#mermaid-svg-ex1v8GbYIIVtmoQD .node .label text,#mermaid-svg-ex1v8GbYIIVtmoQD .image-shape .label,#mermaid-svg-ex1v8GbYIIVtmoQD .icon-shape .label{text-anchor:middle;}#mermaid-svg-ex1v8GbYIIVtmoQD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ex1v8GbYIIVtmoQD .rough-node .label,#mermaid-svg-ex1v8GbYIIVtmoQD .node .label,#mermaid-svg-ex1v8GbYIIVtmoQD .image-shape .label,#mermaid-svg-ex1v8GbYIIVtmoQD .icon-shape .label{text-align:center;}#mermaid-svg-ex1v8GbYIIVtmoQD .node.clickable{cursor:pointer;}#mermaid-svg-ex1v8GbYIIVtmoQD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ex1v8GbYIIVtmoQD .arrowheadPath{fill:#333333;}#mermaid-svg-ex1v8GbYIIVtmoQD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ex1v8GbYIIVtmoQD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ex1v8GbYIIVtmoQD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ex1v8GbYIIVtmoQD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ex1v8GbYIIVtmoQD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ex1v8GbYIIVtmoQD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ex1v8GbYIIVtmoQD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ex1v8GbYIIVtmoQD .cluster text{fill:#333;}#mermaid-svg-ex1v8GbYIIVtmoQD .cluster span{color:#333;}#mermaid-svg-ex1v8GbYIIVtmoQD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ex1v8GbYIIVtmoQD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ex1v8GbYIIVtmoQD rect.text{fill:none;stroke-width:0;}#mermaid-svg-ex1v8GbYIIVtmoQD .icon-shape,#mermaid-svg-ex1v8GbYIIVtmoQD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ex1v8GbYIIVtmoQD .icon-shape p,#mermaid-svg-ex1v8GbYIIVtmoQD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ex1v8GbYIIVtmoQD .icon-shape .label rect,#mermaid-svg-ex1v8GbYIIVtmoQD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ex1v8GbYIIVtmoQD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ex1v8GbYIIVtmoQD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ex1v8GbYIIVtmoQD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 应用服务器 1
Filebeat
应用服务器 2
Filebeat
应用服务器 3
Filebeat
Elasticsearch 单节点
8.12.0
Kibana
可视化
6.3.2 Filebeat 配置
#mermaid-svg-VjGruqMNl176YNuB{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VjGruqMNl176YNuB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VjGruqMNl176YNuB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VjGruqMNl176YNuB .error-icon{fill:#552222;}#mermaid-svg-VjGruqMNl176YNuB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VjGruqMNl176YNuB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VjGruqMNl176YNuB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VjGruqMNl176YNuB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VjGruqMNl176YNuB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VjGruqMNl176YNuB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VjGruqMNl176YNuB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VjGruqMNl176YNuB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VjGruqMNl176YNuB .marker.cross{stroke:#333333;}#mermaid-svg-VjGruqMNl176YNuB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VjGruqMNl176YNuB p{margin:0;}#mermaid-svg-VjGruqMNl176YNuB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VjGruqMNl176YNuB .cluster-label text{fill:#333;}#mermaid-svg-VjGruqMNl176YNuB .cluster-label span{color:#333;}#mermaid-svg-VjGruqMNl176YNuB .cluster-label span p{background-color:transparent;}#mermaid-svg-VjGruqMNl176YNuB .label text,#mermaid-svg-VjGruqMNl176YNuB span{fill:#333;color:#333;}#mermaid-svg-VjGruqMNl176YNuB .node rect,#mermaid-svg-VjGruqMNl176YNuB .node circle,#mermaid-svg-VjGruqMNl176YNuB .node ellipse,#mermaid-svg-VjGruqMNl176YNuB .node polygon,#mermaid-svg-VjGruqMNl176YNuB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VjGruqMNl176YNuB .rough-node .label text,#mermaid-svg-VjGruqMNl176YNuB .node .label text,#mermaid-svg-VjGruqMNl176YNuB .image-shape .label,#mermaid-svg-VjGruqMNl176YNuB .icon-shape .label{text-anchor:middle;}#mermaid-svg-VjGruqMNl176YNuB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VjGruqMNl176YNuB .rough-node .label,#mermaid-svg-VjGruqMNl176YNuB .node .label,#mermaid-svg-VjGruqMNl176YNuB .image-shape .label,#mermaid-svg-VjGruqMNl176YNuB .icon-shape .label{text-align:center;}#mermaid-svg-VjGruqMNl176YNuB .node.clickable{cursor:pointer;}#mermaid-svg-VjGruqMNl176YNuB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VjGruqMNl176YNuB .arrowheadPath{fill:#333333;}#mermaid-svg-VjGruqMNl176YNuB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VjGruqMNl176YNuB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VjGruqMNl176YNuB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VjGruqMNl176YNuB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VjGruqMNl176YNuB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VjGruqMNl176YNuB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VjGruqMNl176YNuB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VjGruqMNl176YNuB .cluster text{fill:#333;}#mermaid-svg-VjGruqMNl176YNuB .cluster span{color:#333;}#mermaid-svg-VjGruqMNl176YNuB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VjGruqMNl176YNuB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VjGruqMNl176YNuB rect.text{fill:none;stroke-width:0;}#mermaid-svg-VjGruqMNl176YNuB .icon-shape,#mermaid-svg-VjGruqMNl176YNuB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VjGruqMNl176YNuB .icon-shape p,#mermaid-svg-VjGruqMNl176YNuB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VjGruqMNl176YNuB .icon-shape .label rect,#mermaid-svg-VjGruqMNl176YNuB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VjGruqMNl176YNuB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VjGruqMNl176YNuB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VjGruqMNl176YNuB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 存储与展示
Filebeat 采集
日志来源
Container 日志
/var/lib/docker/containers/*.log
应用日志文件
/var/log/app/*.log
Filebeat Agent
容器部署
filebeat.inputs
type: container
output.elasticsearch
https + SSL
Elasticsearch
索引: filebeat-*
Kibana
日志搜索与过滤
在应用服务器上部署 Filebeat 容器:
yaml
filebeat.inputs:
- type: container
paths:
- /var/lib/docker/containers/*/*.log
output.elasticsearch:
hosts: ["https://your-es-server:9200"]
username: "filebeat_user"
password: "yourpassword"
ssl.certificate_authorities: ["/etc/filebeat/ca.crt"]
6.3.3 创建索引模板
通过 Kibana Dev Tools 创建:
json
PUT _index_template/logs-template
{
"index_patterns": ["filebeat-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"message": { "type": "text" },
"log.level": { "type": "keyword" }
}
}
}
}
6.3.4 效果
- 开发人员可通过 Kibana 实时查看日志
- 故障定位时间从小时级缩短到分钟级
- 硬件成本:1 台 4 核 8GB 云服务器
七、常见问题排查
#mermaid-svg-MjCB4oBRcf6KimxB{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-MjCB4oBRcf6KimxB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MjCB4oBRcf6KimxB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MjCB4oBRcf6KimxB .error-icon{fill:#552222;}#mermaid-svg-MjCB4oBRcf6KimxB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MjCB4oBRcf6KimxB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MjCB4oBRcf6KimxB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MjCB4oBRcf6KimxB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MjCB4oBRcf6KimxB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MjCB4oBRcf6KimxB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MjCB4oBRcf6KimxB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MjCB4oBRcf6KimxB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MjCB4oBRcf6KimxB .marker.cross{stroke:#333333;}#mermaid-svg-MjCB4oBRcf6KimxB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MjCB4oBRcf6KimxB p{margin:0;}#mermaid-svg-MjCB4oBRcf6KimxB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MjCB4oBRcf6KimxB .cluster-label text{fill:#333;}#mermaid-svg-MjCB4oBRcf6KimxB .cluster-label span{color:#333;}#mermaid-svg-MjCB4oBRcf6KimxB .cluster-label span p{background-color:transparent;}#mermaid-svg-MjCB4oBRcf6KimxB .label text,#mermaid-svg-MjCB4oBRcf6KimxB span{fill:#333;color:#333;}#mermaid-svg-MjCB4oBRcf6KimxB .node rect,#mermaid-svg-MjCB4oBRcf6KimxB .node circle,#mermaid-svg-MjCB4oBRcf6KimxB .node ellipse,#mermaid-svg-MjCB4oBRcf6KimxB .node polygon,#mermaid-svg-MjCB4oBRcf6KimxB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MjCB4oBRcf6KimxB .rough-node .label text,#mermaid-svg-MjCB4oBRcf6KimxB .node .label text,#mermaid-svg-MjCB4oBRcf6KimxB .image-shape .label,#mermaid-svg-MjCB4oBRcf6KimxB .icon-shape .label{text-anchor:middle;}#mermaid-svg-MjCB4oBRcf6KimxB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MjCB4oBRcf6KimxB .rough-node .label,#mermaid-svg-MjCB4oBRcf6KimxB .node .label,#mermaid-svg-MjCB4oBRcf6KimxB .image-shape .label,#mermaid-svg-MjCB4oBRcf6KimxB .icon-shape .label{text-align:center;}#mermaid-svg-MjCB4oBRcf6KimxB .node.clickable{cursor:pointer;}#mermaid-svg-MjCB4oBRcf6KimxB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MjCB4oBRcf6KimxB .arrowheadPath{fill:#333333;}#mermaid-svg-MjCB4oBRcf6KimxB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MjCB4oBRcf6KimxB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MjCB4oBRcf6KimxB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MjCB4oBRcf6KimxB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MjCB4oBRcf6KimxB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MjCB4oBRcf6KimxB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MjCB4oBRcf6KimxB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MjCB4oBRcf6KimxB .cluster text{fill:#333;}#mermaid-svg-MjCB4oBRcf6KimxB .cluster span{color:#333;}#mermaid-svg-MjCB4oBRcf6KimxB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MjCB4oBRcf6KimxB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MjCB4oBRcf6KimxB rect.text{fill:none;stroke-width:0;}#mermaid-svg-MjCB4oBRcf6KimxB .icon-shape,#mermaid-svg-MjCB4oBRcf6KimxB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MjCB4oBRcf6KimxB .icon-shape p,#mermaid-svg-MjCB4oBRcf6KimxB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MjCB4oBRcf6KimxB .icon-shape .label rect,#mermaid-svg-MjCB4oBRcf6KimxB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MjCB4oBRcf6KimxB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MjCB4oBRcf6KimxB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MjCB4oBRcf6KimxB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
是
否
是
否
是
否
ES 容器异常
容器无法启动?
检查 vm.max_map_count
sysctl -w 262144
无法连接 ES?
检查证书权限
certs 目录 chmod 755
Kibana 连不上?
创建 kibana_system 用户
reset-password
内存不足?
调低 ES_JAVA_OPTS
-Xms1g -Xmx1g
磁盘只读?
清理旧索引
或扩容磁盘
✅ 检查其他配置
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 容器启动失败 | vm.max_map_count 不足 |
执行 sysctl -w vm.max_map_count=262144 |
| 无法连接 ES | 证书路径错误或权限不足 | 检查挂载的 certs 目录权限为 755 |
| Kibana 无法连接 | kibana_system 用户未创建 |
执行 elasticsearch-reset-password |
| 内存不足 | JVM 堆内存设置过大 | 调低 ES_JAVA_OPTS |
| 磁盘只读 | 磁盘使用率超过 95% | 清理旧索引或扩容磁盘 |
八、总结
#mermaid-svg-t5SY5TmvnlZn9COD{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-t5SY5TmvnlZn9COD .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-t5SY5TmvnlZn9COD .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-t5SY5TmvnlZn9COD .error-icon{fill:#552222;}#mermaid-svg-t5SY5TmvnlZn9COD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-t5SY5TmvnlZn9COD .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-t5SY5TmvnlZn9COD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-t5SY5TmvnlZn9COD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-t5SY5TmvnlZn9COD .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-t5SY5TmvnlZn9COD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-t5SY5TmvnlZn9COD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-t5SY5TmvnlZn9COD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-t5SY5TmvnlZn9COD .marker.cross{stroke:#333333;}#mermaid-svg-t5SY5TmvnlZn9COD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-t5SY5TmvnlZn9COD p{margin:0;}#mermaid-svg-t5SY5TmvnlZn9COD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-t5SY5TmvnlZn9COD .cluster-label text{fill:#333;}#mermaid-svg-t5SY5TmvnlZn9COD .cluster-label span{color:#333;}#mermaid-svg-t5SY5TmvnlZn9COD .cluster-label span p{background-color:transparent;}#mermaid-svg-t5SY5TmvnlZn9COD .label text,#mermaid-svg-t5SY5TmvnlZn9COD span{fill:#333;color:#333;}#mermaid-svg-t5SY5TmvnlZn9COD .node rect,#mermaid-svg-t5SY5TmvnlZn9COD .node circle,#mermaid-svg-t5SY5TmvnlZn9COD .node ellipse,#mermaid-svg-t5SY5TmvnlZn9COD .node polygon,#mermaid-svg-t5SY5TmvnlZn9COD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-t5SY5TmvnlZn9COD .rough-node .label text,#mermaid-svg-t5SY5TmvnlZn9COD .node .label text,#mermaid-svg-t5SY5TmvnlZn9COD .image-shape .label,#mermaid-svg-t5SY5TmvnlZn9COD .icon-shape .label{text-anchor:middle;}#mermaid-svg-t5SY5TmvnlZn9COD .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-t5SY5TmvnlZn9COD .rough-node .label,#mermaid-svg-t5SY5TmvnlZn9COD .node .label,#mermaid-svg-t5SY5TmvnlZn9COD .image-shape .label,#mermaid-svg-t5SY5TmvnlZn9COD .icon-shape .label{text-align:center;}#mermaid-svg-t5SY5TmvnlZn9COD .node.clickable{cursor:pointer;}#mermaid-svg-t5SY5TmvnlZn9COD .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-t5SY5TmvnlZn9COD .arrowheadPath{fill:#333333;}#mermaid-svg-t5SY5TmvnlZn9COD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-t5SY5TmvnlZn9COD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-t5SY5TmvnlZn9COD .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-t5SY5TmvnlZn9COD .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-t5SY5TmvnlZn9COD .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-t5SY5TmvnlZn9COD .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-t5SY5TmvnlZn9COD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-t5SY5TmvnlZn9COD .cluster text{fill:#333;}#mermaid-svg-t5SY5TmvnlZn9COD .cluster span{color:#333;}#mermaid-svg-t5SY5TmvnlZn9COD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-t5SY5TmvnlZn9COD .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-t5SY5TmvnlZn9COD rect.text{fill:none;stroke-width:0;}#mermaid-svg-t5SY5TmvnlZn9COD .icon-shape,#mermaid-svg-t5SY5TmvnlZn9COD .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-t5SY5TmvnlZn9COD .icon-shape p,#mermaid-svg-t5SY5TmvnlZn9COD .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-t5SY5TmvnlZn9COD .icon-shape .label rect,#mermaid-svg-t5SY5TmvnlZn9COD .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-t5SY5TmvnlZn9COD .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-t5SY5TmvnlZn9COD .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-t5SY5TmvnlZn9COD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 适用场景
配套工具
部署流程
环境准备
vm.max_map_count
配置 + 证书
启动容器
验证连接
Kibana 可视化
Filebeat 日志采集
个人博客/站内搜索
开发测试环境
小型团队日志分析
通过容器化部署 Elasticsearch 单节点,我们可以在 15 分钟内拥有一个功能完整的搜索和分析引擎。
它不仅能满足个人博客、小型应用的搜索需求,还能作为学习分布式搜索的起点,小型团队也能满足。下一个文章我们将探讨 Elasticsearch 集群容器化部署,带你构建生产级高可用平台。