使用Docker一键部署ELK

 

#!/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)发送日志数据

 

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
评论 抢沙发
  • 武穆逸仙

    昵称

  • 取消回复

    请填写用户信息:

图片正在生成中,请稍后...