先安装docker compose,把下载的 docker compose 拷贝到/opt/software目录下

老版本安装 docker-compose(V1)

# 将二进制文件移动到系统命令目录,重命名为 docker-compose

mv /opt/software/docker-compose-linux-x86_64-5.4.0 /usr/local/bin/docker-compose

# 添加执行权限

chmod +x /usr/local/bin/docker-compose

#查看版本

docker-compose --version

新版本安装 docker-compose(V2插件)当前使用的版本

mkdir -p /usr/local/lib/docker/cli-plugins

mv /opt/software/docker-compose-linux-x86_64 /usr/local/lib/docker/cli-plugins/docker-compose

#查看版本

docker compose version

前提条件:装载ELK版本

docker load -i elasticsearch-docker-8.19.18.tar

docker load -i /opt/software/kibana-docker-8.19.18.tar

docker load -i /opt/software/logstash-docker-8.19.18.tar

镜像都要装载完毕

docker images

一、创建宿主机目录

mkdir -p /opt/elk-compose/elasticsearch/{data,logs,config}

mkdir -p /opt/elk-compose/kibana/{data,config}

mkdir -p /opt/elk-compose/logstash/{config,pipeline,data}

赋予权限

chown -R 1000:1000 /opt/elk-compose/elasticsearch /opt/elk-compose/kibana /opt/elk-compose/logstash

二、创建.env 文件

cat > /opt/elk-compose/.env <<EOF

# elastic 超级管理员密码

ELASTIC_PASSWORD=asdf@1234

# kibana_system 预设密码

KIBANA_SYSTEM_PASSWORD=asdf@1234

# ES JVM堆大小

ES_JAVA_XMS=512m

ES_JAVA_XMX=512m

# Kibana内存

KIBANA_MAX_OLD_SPACE=512

EOF

三、创建 docker-compose.yml

vim /opt/elk-compose/docker-compose.yml

内容如下:

services:

  elasticsearch:

    image: docker.elastic.co/elasticsearch/elasticsearch:8.19.18

    container_name: es-node

    restart: always

    ulimits:

      memlock:

        soft: -1

        hard: -1

      nofile:

        soft: 65535

        hard: 65535

    environment:

      discovery.type: single-node

      ES_JAVA_OPTS: "-Xms${ES_JAVA_XMS} -Xmx${ES_JAVA_XMX}"

      ELASTIC_PASSWORD: "${ELASTIC_PASSWORD}"

    ports:

      - "9200:9200"

      - "9300:9300"

    volumes:

      - /opt/elk-compose/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

      - /opt/elk-compose/elasticsearch/data:/usr/share/elasticsearch/data

      - /opt/elk-compose/elasticsearch/logs:/usr/share/elasticsearch/logs

    networks:

      - elastic-net

  kibana:

    image: docker.elastic.co/kibana/kibana:8.19.18

    container_name: kibana

    restart: always

    environment:

      NODE_OPTIONS: "--max-old-space-size=${KIBANA_MAX_OLD_SPACE}"

      ELASTICSEARCH_HOSTS: "http://elasticsearch:9200"

      ELASTICSEARCH_USERNAME: "kibana_system"

      ELASTICSEARCH_PASSWORD: "${KIBANA_SYSTEM_PASSWORD}"

    ports:

      - "5601:5601"

    volumes:

      - /opt/elk-compose/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml

      - /opt/elk-compose/kibana/data:/usr/share/kibana/data

    depends_on:

      - elasticsearch

    networks:

      - elastic-net

  logstash:

   image: docker.elastic.co/logstash/logstash:8.19.18

   container_name: logstash

   restart: always

   depends_on:

     elasticsearch:

       condition: service_started

   environment:

     LS_JAVA_OPTS: "-Xms512m -Xmx512m"

   ports:

     - "5044:5044"   # beats端口

     - "9600:9600"   # logstash监控api

   volumes:

     - type: bind

       source: /opt/logstash/config/logstash.yml

       target: /usr/share/logstash/config/logstash.yml

       bind:

         #如果宿主机上的source路径不存在,Docker会自动创建文件或目录

         create_host_path: true

     - type: bind

       source: /opt/logstash/pipeline

       target: /usr/share/logstash/pipeline

       bind:

         create_host_path: true

     - type: bind

       source: /opt/logstash/data

       target: /usr/share/logstash/data

       bind:

         create_host_path: true

     - type: bind

       source: /opt/test-logs

       target: /var/log/app-logs

       bind:

         create_host_path: true

   networks:

     - elastic-net

networks:

  elastic-net:

    driver: bridge

四、配置文件

4.1、配置elasticsearch文件

cat > /opt/elk-compose/elasticsearch/config/elasticsearch.yml <<EOF

# 集群名称

cluster.name: docker-cluster

# 节点名称

node.name: es-node-1

# 允许外部网络访问

network.host: 0.0.0.0

# 开启跨域,方便 Kibana 或前端可视化工具连接

http.cors.enabled: true

http.cors.allow-origin: "*"

# 自动创建索引

action.auto_create_index: true

# 开启安全认证

xpack.security.enabled: true

xpack.security.enrollment.enabled: false

# 关闭HTTP层SSL

xpack.security.http.ssl.enabled: false

# 节点间通信SSL

xpack.security.transport.ssl.enabled: false

EOF

4.2、配置kibana文件

cat > /opt/elk-compose/kibana/config/kibana.yml <<EOF

# 允许外部网络访问

server.host: "0.0.0.0"

server.port: 5601

elasticsearch.ssl.verificationMode: none

# 中文界面

i18n.locale: "zh-CN"

EOF

4.3、创建 logstash.yml 主配置

cat > /opt/elk-compose/logstash/config/logstash.yml <<EOF

http.host: "0.0.0.0"

xpack.monitoring.elasticsearch.hosts: ["http://192.168.150.99:9200"]

xpack.monitoring.elasticsearch.username: "elastic"

xpack.monitoring.elasticsearch.password: "asdf@1234"

EOF

4.4、创建管道配置文件 (logstash.conf)

cat > /opt/elk-compose/logstash/pipeline/logstash.conf <<EOF

input {

  beats {

    port => 5044

  }

}

filter {

}

output {

  elasticsearch {

    hosts => ["http://192.168.150.99:9200"]

    user => "elastic"

    password => "asdf@1234"

    index => "logstash-test-%{+YYYY.MM.dd}"

  }

  stdout { codec => rubydebug }

}

EOF

4.5、初始化脚本 init-es.sh

vim /opt/elk-compose/init-es.sh

内容如下:

#!/bin/bash

set -e

# 加载环境变量

source .env

ES_URL="http://192.168.150.99:9200"

MARK_FILE="./.init_finished"

# 已经初始化过直接退出

if [ -f "${MARK_FILE}" ]; then

    echo " 检测到已完成初始化,跳过"

    exit 0

fi

echo "等待 Elasticsearch 启动就绪..."

until curl -s -u elastic:${ELASTIC_PASSWORD} "${ES_URL}/_cluster/health" > /dev/null; do

    sleep 3

    echo "ES尚未就绪,继续等待..."

done

echo "ES就绪,开始设置 kibana_system 用户密码"

# REST API 修改 kibana_system 密码(非交互式)

curl -s -X PUT "${ES_URL}/_security/user/kibana_system/_password" \

  -u elastic:${ELASTIC_PASSWORD} \

  -H "Content-Type: application/json" \

  -d "{\"password\":\"${KIBANA_SYSTEM_PASSWORD}\"}"

echo "kibana_system 密码设置完成:${KIBANA_SYSTEM_PASSWORD}"

touch "${MARK_FILE}"

echo " 重启 Kibana 加载认证配置"

docker compose restart kibana

echo "全部初始化流程结束!"

echo " Kibana网页登录账号:elastic / ${ELASTIC_PASSWORD}"

#添加执行权限:

chmod +x /opt/elk-compose/init-es.sh

五、删除原来的容器(若没用启动过容器,可忽略)

docker rm -v -f kibana es-node logstash

六、校验配置文件

若文件原样输出,表示没用错误

cd /opt/elk-compose

docker compose config

七、一键启动:

docker compose up -d

八、查看运行状态:

docker compose ps

# 实时跟踪全部日志

docker compose logs -f

此时kibana还无法访问,需要执行./init-es.sh初始化密码

cd /opt/elk-compose

./init-es.sh

重启 kibana 服务加载配置

docker compose restart kibana

# 查看日志

docker compose logs -f elasticsearch

docker compose logs -f kibana

docker compose logs -f logstash

九、验证

9.1、验证ES

访问 http://192.168.150.99:9200/

9.2、验证kibana

访问http://192.168.150.99:5601/

用户名:elastic  密码:asdf@1234

9.3、验证logstash

访问:http://192.168.150.99:9600/_node/pipelines

9.4、ELK验证

写入数据到ES

curl -X POST "http://192.168.150.99:9200/test-logs/_doc" \

-H "Content-Type: application/json" \

-u elastic:asdf@1234 \

-d '{

  "message": "这是一条直接写入ES的测试日志,我爱北京",

  "level": "INFO",

  "app": "my-test-app",

  "@timestamp": "2026-08-15T16:50:00.000Z"

}'

在kibana中查看

get /test-logs/_search

在 Kibana 界面中查看

  1. 浏览器打开 http://192.168.150.99:5601,使用 elastic / asdf@1234 登录。
  2. 在左侧导航栏点击 Stack Management(堆栈管理)。
  3. 在左侧菜单找到 Kibana -> Data Views(旧版本叫 Index Patterns / 索引模式)。
  4. 点击右上角 Create data view(创建数据视图)。
  5. Name 填写:test-logs-view。
  6. Index pattern 填写:test-logs*(注意带星号,表示匹配所有以 test-logs 开头的索引)。
  7. Timestamp field 选择:@timestamp,然后点击 Save data view to Kibana
  8. 创建成功后,点击左侧导航栏的 Discover(发现),您就能在左侧看到刚刚创建的视图,右侧会直接展示您写入的那条 JSON 数据!

十、其他命令

启停相关

# 后台启动所有服务(最常用)

docker compose up -d

# 前台启动,打印日志(调试用,Ctrl+C停止)

docker compose up

# 启动指定单个服务

docker compose up -d elasticsearch

# 正常停止容器(保留数据、网络、卷)

docker compose stop

# 只停止单个服务

docker compose stop kibana

# 重启全部服务

docker compose restart

# 重启指定服务

docker compose restart kibana

# 停止并删除【容器+网络】,宿主机挂载目录不会删除

docker compose down

# down同时一并删除命名数据卷(慎用!会清空ES数据)

docker compose down -v

日志查看

# 实时跟踪全部日志

docker compose logs -f

# 只跟踪 kibana 日志

docker compose logs -f kibana

# 只看es最近100行并持续刷新

docker compose logs --tail=100 -f elasticsearch

# 查看历史日志,不阻塞

docker compose logs elasticsearch

信息查看

# 校验yml语法,输出解析后的完整配置(你之前用过)

docker compose config

# 列出当前运行的容器

docker compose ps

# 查看所有状态(包含已停止)

docker compose ps -a

# 查看项目内镜像列表

docker compose images

进入容器交互终端

# 进入es容器

docker compose exec elasticsearch bash

# 进入kibana容器

docker compose exec kibana bash

删除清理

# 删除已停止的容器

docker compose rm

# 强制删除,不需要交互确认

docker compose rm -f

更多推荐