#!/bin/bash
# =============================================
# 🐳 ELK Stack 一键部署脚本(启用认证/无 HTTPS)
# 组件:Elasticsearch + Logstash + Kibana
# 环境:Docker + Docker Compose
#
# 功能说明:
# - Elasticsearch 开启 xpack 安全认证(内置用户 elastic 等)。
# - Kibana 启用安全认证,访问时需登录(默认中文界面)。
# - Logstash 通过 TCP 输入 JSON 数据,并演示中文字段映射。
# - 关闭 HTTP 层 TLS(仅测试环境,不适用于生产)。
# =============================================
# 🔐 设置默认密码(请修改为满足复杂度要求的密码)
ELASTIC_PASSWORD="xxxxx"
KIBANA_PASSWORD="xxxxx"
echo "🚧 正在初始化环境..."
# 检查 Docker 是否安装
if ! command -v docker &> /dev/null; then
echo "🔧 未检测到 Docker,正在安装..."
curl -fsSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker
else
echo "✔️ Docker 已安装"
fi
# 检查 Docker Compose 是否安装
if ! command -v docker-compose &> /dev/null; then
echo "🔧 未检测到 Docker Compose,正在安装..."
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
else
echo "✔️ Docker Compose 已安装"
fi
# 创建目录结构
echo "📁 正在创建 ELK 文件结构..."
mkdir -p elk/{elasticsearch/data,logstash/{config,pipeline},kibana/config}
# 赋予 Elasticsearch 数据目录充分权限,避免写入问题
chmod -R 777 elk/elasticsearch/data
# ✏️ Elasticsearch 配置(启用安全认证,但关闭 HTTPS)
cat > elk/elasticsearch/elasticsearch.yml <<EOF
cluster.name: "docker-cluster"
network.host: "0.0.0.0"
discovery.type: "single-node"
xpack.security.enabled: true
# 关闭 HTTP 层 TLS(仅用于测试环境,不建议生产)
xpack.security.http.ssl.enabled: false
EOF
# ✏️ Logstash 配置
cat > elk/logstash/config/logstash.yml <<EOF
http.host: "0.0.0.0"
EOF
# ✏️ Logstash 管道配置(演示中文字段名映射)
cat > elk/logstash/pipeline/logstash.conf <<EOF
input {
tcp {
port => 5000
codec => json
}
}
filter {
mutate {
rename => {
"message" => "日志内容"
"host" => "主机"
}
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
# 此处 Elasticsearch 启用认证,需要传入用户名和密码(默认内置用户名 elastic)
user => "elastic"
password => "${ELASTIC_PASSWORD}"
index => "日志索引-%{+YYYY.MM.dd}"
}
}
EOF
# ✏️ Kibana 配置(启用安全认证、默认中文界面)
cat > elk/kibana/config/kibana.yml <<EOF
server.name: "kibana"
server.host: "0.0.0.0"
# 指定 Elasticsearch 地址(使用 HTTP 协议,因为已关闭 TLS)
elasticsearch.hosts: ["http://elasticsearch:9200"]
# Kibana 连接 Elasticsearch 时使用内置用户 kibana_system
elasticsearch.username: "kibana_system"
elasticsearch.password: "YourKibanaP@ssw0rd"
# 启用安全认证
xpack.security.enabled: true
# 默认界面中文(需确保浏览器语言或手动配置均可生效)
i18n.locale: "zh-CN"
EOF
# ✏️ docker-compose 文件
cat > docker-compose.yml <<EOF
version: '3.7'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- ES_JAVA_OPTS=-Xms1g -Xmx1g
volumes:
- ./elk/elasticsearch/data:/usr/share/elasticsearch/data
- ./elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- "9200:9200"
- "9300:9300"
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:8.12.0
container_name: logstash
volumes:
- ./elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- "5000:5000"
environment:
- LS_JAVA_OPTS=-Xms512m -Xmx512m
depends_on:
- elasticsearch
networks:
- elk
kibana:
image: docker.elastic.co/kibana/kibana:8.12.0
container_name: kibana
volumes:
- ./elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- elk
networks:
elk:
driver: bridge
EOF
# 启动容器
echo "🚀 正在启动 ELK 服务..."
docker-compose up -d
# 等待容器启动(可根据情况调整等待时间)
sleep 30
# 显示容器状态
docker-compose ps
# 显示访问信息
IP=$(hostname -I | awk '{print $1}')
echo -e "\n✅ 部署完成!"
echo "🔗 Elasticsearch: http://$IP:9200"
echo "🔗 Kibana(登录认证、中文界面): http://$IP:5601"
echo " 默认用户:elastic(登录时输入 elastic 用户密码)"
echo "🔗 Logstash TCP 输入端口: $IP:5000"
echo -e "\n💡 提示:"
echo " - Elasticsearch 默认内置用户:elastic, kibana_system 等"
echo " - 请查看 Elasticsearch 日志获取首次启动时生成的其他内置用户的默认密码,或使用脚本中设置的密码。"
使用说明
将上述脚本保存为 install-elk.sh
给脚本执行权限:chmod +x install-elk.sh
运行脚本:./install-elk.sh
功能说明
自动检测并安装 Docker 和 Docker Compose(如果未安装)
创建必要的目录结构和配置文件
使用 Docker Compose 启动 ELK 服务
显示访问信息
注意事项
脚本会使用最新稳定版的 ELK 组件(当前为 8.12.0)
默认禁用了 Elasticsearch 的安全功能(xpack.security.enabled=false),生产环境请启用
确保服务器有足够的内存(建议至少 4GB)
首次启动可能需要几分钟时间
后续操作
访问 Kibana 界面:http://服务器 IP:5601
可以通过 Logstash 的 TCP 输入(端口 5000)发送日志数据
© 版权声明
博主的文章没有高度、深度和广度,只是凑字数。利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章!如若有侵权,请联系博主删除。
喜欢就点个赞吧