dockercompose快速安装ELK

发布于:2025-06-28 ⋅ 阅读:(14) ⋅ 点赞:(0)

第一步:环境准备
请确保您的机器上已经安装了 Docker 和 Docker Compose。

第二步:创建项目目录和配置文件
为了让 Docker Compose 能够正确地构建和管理容器,我们需要创建一个特定的目录结构。

创建一个主目录,例如 elk-stack。
在 elk-stack 内部,创建 docker-compose.yml 文件。
在 elk-stack 内部,创建一个 logstash 目录,并在其中再创建一个 pipeline 目录。
在 logstash/pipeline 目录中,创建 logstash.conf 文件。
最终的目录结构如下:

elk-stack/
├── docker-compose.yml
└── logstash/
    └── pipeline/
        └── logstash.conf

第三步:编写配置文件
现在,我们将填充这些文件的内容。

  1. docker-compose.yml
    这是最核心的编排文件。它定义了 ELK 的三个服务,并将它们连接在一起。请将以下内容复制到 elk-stack/docker-compose.yml 文件中。

重要提示:Elasticsearch, Kibana, 和 Logstash 的版本号必须完全一致,否则可能会出现兼容性问题。这里我们使用 8.14.0 版本。

version: '3.8'

services:
  elasticsearch:
    image: elasticsearch:8.14.0
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false # 为方便测试,禁用安全功能。生产环境强烈建议开启!
      - ES_JAVA_OPTS=-Xms1g -Xmx1g # 根据您的机器内存调整,建议至少1GB
    volumes:
      - es-data:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elk-net

  kibana:
    image: kibana:8.14.0
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 # 指向 Elasticsearch 容器
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - elk-net

  logstash:
    image: logstash:8.14.0
    container_name: logstash
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro # 挂载 Logstash 管道配置
    ports:
      - "5000:5000/tcp" # 为数据输入开放 TCP 端口
      - "5000:5000/udp"
    depends_on:
      - elasticsearch
    networks:
      - elk-net

volumes:
  es-data:
    driver: local

networks:
  elk-net:
    driver: bridge

配置说明:

discovery.type=single-node: 告知 Elasticsearch 这是一个单节点实例,无需进行集群发现。
xpack.security.enabled=false: 为了简化初次设置,我们禁用了 Elasticsearch 的安全特性(如用户名密码认证)。在生产环境中,请务必将其设置为 true 并配置好密码。
volumes: 我们为 Elasticsearch 的数据创建了一个名为 es-data 的持久化数据卷,这样即使容器被删除,数据也不会丢失。同时,我们将本地的 Logstash 配置文件挂载到了 Logstash 容器中。
networks: 我们创建了一个名为 elk-net 的桥接网络,让三个容器可以通过服务名(elasticsearch, kibana, logstash)相互通信。
depends_on: 确保 Elasticsearch 容器启动后,Kibana 和 Logstash 才会启动。
2. logstash/pipeline/logstash.conf
这个文件定义了 Logstash 的数据处理管道:从哪里接收数据(input),如何处理数据(filter),以及将数据发送到哪里(output)。

将以下内容复制到 elk-stack/logstash/pipeline/logstash.conf 文件中。

input {
  # 通过 TCP 协议监听 5000 端口,接收 JSON 格式的日志
  tcp {
    port => 5000
    codec => json_lines
  }
}

filter {
  # 此处可以添加过滤规则,例如 grok, mutate 等
  # 暂时留空作为示例
}

output {
  # 将处理后的数据输出到 Elasticsearch
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "logstash-%{+YYYY.MM.dd}" # 索引名称格式
  }
  
  # 同时在 Logstash 容器的控制台打印输出,方便调试
  stdout {
    codec => rubydebug
  }
}

这个配置表示 Logstash 会:

Input: 监听 TCP 端口 5000,并期望接收到的每行都是一个独立的 JSON 对象。
Output: 将数据发送到名为 elasticsearch 的主机的 9200 端口,并根据日期创建索引(例如 logstash-2025.06.26)。
第四步:启动和验证 ELK Stack
万事俱备,现在可以启动整个技术栈了。

启动服务
在 elk-stack 目录下,打开终端并运行以下命令:

docker-compose up -d  (有的版本是docker cpmpose)

这个命令会在后台(-d)拉取镜像并启动所有服务。第一次启动可能需要一些时间来下载镜像。

检查容器状态
等待一两分钟后,运行以下命令检查所有容器是否都已正常运行:

docker-compose ps

应该能看到 elasticsearch, kibana, 和 logstash 三个容器的状态都是 Up 或 running。

验证服务

Elasticsearch: 在浏览器或使用 curl 访问 http://localhost:9200。如果看到一个包含版本信息的 JSON 响应,说明 Elasticsearch 已成功运行。
Kibana: 在浏览器中访问 http://localhost:5601。应该能看到 Kibana 的欢迎界面。由于启动需要时间,如果无法访问请稍等片刻再刷新。
第五步:发送并查看测试日志
现在,我们来测试整个数据流是否通畅。

发送日志到 Logstash
打开一个新的终端,使用 netcat (或 nc) 工具向 Logstash 的 5000 端口发送一条 JSON 格式的日志。

echo '{"level": "info", "service": "my-app", "message": "这是一个测试日志"}' | nc localhost 5000

如果您没有 nc,也可以使用 curl:

curl -X POST -H "Content-Type: application/json" -d '{"level": "info", "service": "my-app", "message": "这是另一个测试日志"}' http://localhost:5000

注意:此处的 curl 能否成功取决于您的 input 插件,对于 tcp 插件,nc 是更可靠的测试工具。

在 Kibana 中查看日志

打开 Kibana 界面 (http://localhost:5601)。
点击左上角的汉堡菜单 (☰),进入 Management > Stack Management。
在 Kibana 分类下,选择 Data Views (或旧版中的 Index Patterns)。
点击 Create data view。
在 Name 和 Index pattern 字段中输入 logstash-*,Kibana 应该会自动识别出我们刚刚创建的索引。
点击 Save data view to Kibana。
创建成功后,再次点击左上角的汉堡菜单 (☰),进入 Analytics > Discover。
应该能看到刚刚发送的那条测试日志了!可以展开日志条目查看详细的 JSON 字段。

若是想监控jar包,可以参考

https://blog.csdn.net/CodeTom/article/details/148954231?sharetype=blogdetail&sharerId=148954231&sharerefer=PC&sharesource=CodeTom&spm=1011.2480.3001.8118


网站公告

今日签到

点亮在社区的每一天
去签到