当前位置: 首页 > 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 字段。

相关文章:

  • 广州网站制作公司联系方式站长之家统计
  • 有关做粪污处理设备的企业网站青岛seo推广公司
  • 济南富新网站建设百度搜索引擎
  • 阿里云虚拟主机做2个网站吗百度sem推广
  • 做网站优化的协议书新站优化案例
  • 静态网站怎么维护一手项目对接app平台
  • Elasticsearch索引字段的类型
  • 伏羲微官网企业建站授权证书/防伪查询/三合一应用【前端开源】
  • Java项目:基于SSM框架实现的健康管理系统【ssm+B/S架构+源码+数据库】
  • 什么是Redis?
  • ISP Pipeline(4): Anti Aliasing Noise Filter 抗锯齿与降噪滤波器
  • 第12章:冰箱里的CT扫描仪——计算机视觉如何洞穿食材的“生命密码“
  • OpenCV插值方法详解:原理、应用与代码实践
  • 服务器排查与加固服务详细介绍
  • 《HarmonyOSNext应用崩溃自救指南:零数据丢失的故障恢复黑科技》
  • 【机器学习深度学习】数据预处理
  • kanzi 视频插件
  • FFmpeg音视频同步思路
  • 计算机网络 网络层:控制平面(二)
  • 从零开始理解百度语音识别API的Python实现
  • Milvus中 Collections 级多租户 和 分区级多租户 的区别
  • C# .NET Framework 中的高效 MQTT 消息传递
  • 解密 C++ 中的左值(lvalue)与右值(rvalue)的核心内容
  • 命名数据网络 | 数据包(Data Packet)
  • docker 命令
  • 2-深度学习挖短线股-1-股票范围选择