基于docker搭建单机版ELK日志采集系统

1. 说明

ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成

Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。在elasticsearch中,所有节点的数据是均等的。

Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据 Elasticsearch、Logstash、Kibana 安装的版本必须保持一致,防止出现莫名情况

基于dokcer搭建单机版的ELK日志采集系统(基于6.4.1版本),主要是熟悉ELK架构和日志采集展示效果,并用简单的springboot项目展示配置过程

2. 安装docker和docker-compose。链接:docker安装​​​​​​​

3. 修改linux文件句柄数:因为es集群默认的进程句柄数需要至少为262144个,系统默认的是65535, 这里将默认的进程句柄数调大到262144个

[root@VM-4-9-centos home]# echo vm.max_map_count=262144  >>  /etc/sysctl.conf
[root@VM-4-9-centos home]# sysctl -p 
<think> 我们根据引用内容可知,ELK包括Elasticsearch、Logstash和Kibana三个组件,使用Docker部署可以简化环境配置。下面将详细描述使用Docker搭建ELK日志监控平台的步骤。注意,这里假设你已经安装了DockerDocker Compose。 ### 1. 准备工作 - 安装DockerDocker Compose(如果尚未安装)。 - 确保系统资源足够(尤其Elasticsearch需要较多内存,建议分配至少4GB内存)。 ### 2. 创建Docker网络 为了让ELK各容器在同一个网络内互通,需要创建一个自定义网络: ```bash docker network create elk-net ``` ### 3. 创建`docker-compose.yml`文件 使用Docker Compose可以方便地管理多容器。创建一个目录(如`elk-docker`),并在其中创建`docker-compose.yml`文件。 以下是一个基本的`docker-compose.yml`配置示例,参考引用[1]和[3]: ```yaml version: '3.7' services: # Elasticsearch elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0 container_name: elasticsearch environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms1g -Xmx1g" volumes: - es-data:/usr/share/elasticsearch/data ports: - "9200:9200" - "9300:9300" networks: - elk-net # Logstash logstash: image: docker.elastic.co/logstash/logstash:7.14.0 container_name: logstash volumes: - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml - ./logstash/pipeline:/usr/share/logstash/pipeline ports: - "5000:5000" # 接收日志的端口(如TCP/UDP) environment: - LS_JAVA_OPTS=-Xmx512m -Xms512m networks: - elk-net depends_on: - elasticsearch # Kibana kibana: image: docker.elastic.co/kibana/kibana:7.14.0 container_name: kibana ports: - "5601:5601" environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 networks: - elk-net depends_on: - elasticsearch volumes: es-data: driver: local networks: elk-net: external: true ``` ### 4. 配置文件初始化 在`elk-docker`目录下,为Logstash创建配置文件和管道配置。 #### (1) Logstash配置文件 创建目录`logstash/config`,并在其中创建`logstash.yml`(通常为空,使用默认配置,或根据需要配置)。 #### (2) Logstash管道配置 创建目录`logstash/pipeline`,在其中创建`logstash.conf`,配置输入、过滤和输出。以下是一个简单示例,监听TCP端口5000并输出到Elasticsearch: ```conf input { tcp { port => 5000 codec => json } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "logstash-%{+YYYY.MM.dd}" } } ``` ### 5. 部署和启动 在`docker-compose.yml`所在目录执行: ```bash docker-compose up -d ``` ### 6. 验证 - **Elasticsearch**: 访问`http://localhost:9200`,返回JSON信息则成功。 - **Kibana**: 访问`http://localhost:5601`,进入Kibana界面。首次使用可能需要配置索引模式(如`logstash-*`)。 - **Logstash**: 可通过发送日志到5000端口测试。例如使用`nc`命令: ```bash echo '{"message":"test log"}' | nc localhost 5000 ``` 然后在Kibana中查看日志是否被索引。 ### 注意事项 1. 版本一致性:确保Elasticsearch、Logstash和Kibana版本一致(这里使用7.14.0)。 2. 数据持久化:Elasticsearch的数据目录已挂载到卷`es-data`,确保数据持久化。 3. 资源限制:可根据机器性能调整Java堆大小(如`-Xms1g -Xmx1g`)。 ### 扩展说明 - 如果需要监控Docker容器日志,可配置Filebeat收集日志并发送给Logstash[^2]。 - 安全配置:生产环境需要配置安全选项(如X-Pack安全功能)。 以上步骤提供了一个单机版ELK日志监控平台搭建方法,适用于开发和测试环境。生产环境需要考虑集群部署和高可用性配置。 §§相关问题§§ 1. 如何配置Filebeat将Docker容器日志发送到ELK? 2. ELK平台如何实现高可用性? 3. 在ELK中如何设置用户认证和权限控制? </think> ### 使用Docker搭建ELK日志监控平台的详细步骤 以下流程基于引用[1][2][3]整合,部署单机版ELK平台(Elasticsearch + Logstash + Kibana),适用于开发和测试环境: #### **1. 环境准备** - 安装DockerDocker Compose(要求Docker 19.03+) - 分配至少4GB内存(Elasticsearch需要) #### **2. 创建Docker网络** 启用容器间通信: ```bash docker network create elk-net ``` #### **3. 初始化`docker-compose.yml`** 创建文件并写入以下配置(版本建议7.x保持一致): ```yaml version: '3.7' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 container_name: elasticsearch environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms1g -Xmx1g volumes: - es-data:/usr/share/elasticsearch/data ports: - "9200:9200" networks: - elk-net logstash: image: docker.elastic.co/logstash/logstash:7.17.3 container_name: logstash volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf ports: - "5000:5000" # 日志接收端口 depends_on: - elasticsearch networks: - elk-net kibana: image: docker.elastic.co/kibana/kibana:7.17.3 container_name: kibana ports: - "5601:5601" environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 depends_on: - elasticsearch networks: - elk-net volumes: es-data: driver: local networks: elk-net: external: true ``` #### **4. Logstash配置文件** 创建`logstash.conf`: ```conf input { tcp { port => 5000 codec => json } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "logstash-%{+YYYY.MM.dd}" } } ``` #### **5. 启动容器** ```bash docker-compose up -d ``` #### **6. 验证部署** 1. **Elasticsearch**: ```bash curl http://localhost:9200 ``` 返回JSON信息即成功[^1] 2. **Kibana**: 访问 `http://localhost:5601` 进入可视化界面 3. **Logstash测试**: ```bash echo '{"message":"test log"}' | nc localhost 5000 ``` 在Kibana的`Discover`菜单查看日志 --- ### **关键配置说明** 1. **数据持久化**: - Elasticsearch数据存储在`es-data`卷中,避免容器重启丢失[^1] 2. **日志收集**: - 应用可通过TCP/UDP将JSON日志发送到Logstash的5000端口 - 支持Filebeat、Syslog等多种输入源(需修改`logstash.conf`)[^3] 3. **安全加固建议**: ```yaml # 在elasticsearch环境变量中添加 - xpack.security.enabled=true ``` 启用基础认证[^2] --- ### **生产环境优化** - **集群部署**:Elasticsearch配置多节点 - **资源限制**:在`docker-compose.yml`中设置`mem_limit` - **日志轮转**:配置Elasticsearch的索引生命周期管理(ILM) - **容器日志收集**:添加Filebeat容器采集Docker日志[^3]
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值