当前位置: 首页 > news >正文

dockercompose快速安装ELK

第一步:环境准备
请确保您的机器上已经安装了 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.0container_name: elasticsearchenvironment:- discovery.type=single-node- xpack.security.enabled=false # 为方便测试,禁用安全功能。生产环境强烈建议开启!- ES_JAVA_OPTS=-Xms1g -Xmx1g # 根据您的机器内存调整,建议至少1GBvolumes:- es-data:/usr/share/elasticsearch/dataports:- "9200:9200"- "9300:9300"networks:- elk-netkibana:image: kibana:8.14.0container_name: kibanaenvironment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200 # 指向 Elasticsearch 容器ports:- "5601:5601"depends_on:- elasticsearchnetworks:- elk-netlogstash:image: logstash:8.14.0container_name: logstashvolumes:- ./logstash/pipeline:/usr/share/logstash/pipeline:ro # 挂载 Logstash 管道配置ports:- "5000:5000/tcp" # 为数据输入开放 TCP 端口- "5000:5000/udp"depends_on:- elasticsearchnetworks:- elk-netvolumes:es-data:driver: localnetworks: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 => 5000codec => json_lines}
}filter {# 此处可以添加过滤规则,例如 grok, mutate 等# 暂时留空作为示例
}output {# 将处理后的数据输出到 Elasticsearchelasticsearch {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 字段。

http://www.lqws.cn/news/526411.html

相关文章:

  • 设计模式 | 原型模式
  • 分布式I/O在风电行业的应用
  • 向量数据库milvus中文全文检索取不到数据的处理办法
  • Python 惰性求值实战:用生成器重构 Sentence 类
  • Milvus中 Collections 级多租户 和 分区级多租户 的区别
  • kubernetes架构原理
  • 【Docker基础】Docker容器管理:docker rm及其参数详解
  • Axure版TDesign 组件库-免费版
  • Ubuntu中使用netcat发送16进制网络数据包
  • android 11.0 打开ALOGV ALOGI ALOGD日志输出的方法
  • git 多用户管理 跨平台
  • 远程玩3A大作要多少帧?ToDesk、向日葵、UU远程性能对决
  • mysql 安装vc++2013 没有权限问题。
  • 使用 DHTMLX Gantt 添加迷你地图:提升大型项目可视化与导航体验
  • 996引擎-假人系统
  • el-select封装下拉加载组件
  • 《量子计算对加密体系的降维打击:RSA2048在Shor算法下的生存时间预测》的终极解析,结合量子算法推演/后量子加密实战/蒙特卡洛预测模型
  • 编程语言与认知科学:构建理解机器与人类共同语言的桥梁
  • Rust 中的时间处理利器:chrono
  • AI是什么有什么用
  • FFmpeg音视频同步思路
  • 游戏App前端安全加固:利用AI云防护技术抵御恶意攻击
  • 《市梦录》这款游戏的完整商业计划书
  • 16.1 Python应用容器化终极指南:Dockerfile多阶段构建与安全优化实战
  • 《网络攻防技术》《数据分析与挖掘》《网络体系结构与安全防护》这三个研究领域就业如何?
  • MIT 6.824学习心得(1) 浅谈分布式系统概论与MapReduce
  • jina-embeddings-v4
  • Oracle 角色与自定义角色深度解析
  • vllm加载多个Lora部署
  • Linux系统(信号篇):信号的产生