ELK 日志采集系统搭建

ELK 日志采集系统搭建

file

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。
常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

1. 架构

ELK是Elasticsearch+Logstash+Kibana简称.

  • Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一。
  • Logstash 简单来说就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端,与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供了很多功能强大的滤网以满足你的各种应用场景。
  • Kibana 是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图标、表格、地图等,kibana能够很轻易的展示高级数据分析与可视化。

一个简单的 ELK 架构图如下:

file

在这种架构中,Logstash 通过输入插件从多种数据源(比如日志文件、标准输入 Stdin 等)获取数据,再经过滤插件加工数据,然后经 Elasticsearch 输出插件输出到 Elasticsearch,通过 Kibana 进行可视化展示。

这种架构非常简单,使用场景也有限。初学者可以搭建这个架构,了解 ELK 工作模式, 但是生产环境中并不推荐. 如要有以下问题:

  • Logstash 依赖 java、在数据量大的时候,Logstash 进程会消耗过多的系统资源,这将严重影响业务系统的性能。因此官网现已经推荐通过 filebeat 代替 Logstash Agent。
  • Logstash 将资源耗尽系统或者其自身出故障的问题时,日志数据将会出现丢失等问题,因此引入 Kafka 集群作为消息缓冲队列以提高数据传输的可靠性和稳定性。

如此一来, 此架构特别适合大型集群、海量数据的业务场景,它通过将前端 Logstash Agent 替换成 filebeat,有效降低了收集日志对业务系统资源的消耗。同时,消息队列使用kafka集群架构,有效保障了收集数据的安全性和稳定性,而后端Logstash和Elasticsearch均采用集群模式搭建,从整体上提高了ELK系统的高效性、扩展性和吞吐量。
推荐的架构图如下:

file

2. 环境搭建

本文首先采用最简单的架构方式进行搭建, 后续博文将一步一步完善到生产环境集成消息队列的架构方式.
本次环境采用 Docker 或者 DockerCompose 搭建, 如果还不能熟练使用麻溜去看帅帅之前发布的 Docker 全家桶系列视频教程:

版本如下:

  • Elasticsearch: 6.8.16
  • Logstash: 6.8.16
  • Kibana: 6.8.16

2.1 拉取镜像创建网络

docker pull elasticsearch:6.8.16
docker pull kibana:6.8.16
docker pull docker.elastic.co/logstash/logstash:6.8.16
# 创建 ELK 运行的网络
docker network create elastic

2.2 ElasticSearch

  • 配置 elasticsearch.yml
cluster.name: "es-docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
  • 安装与启动

通过如下 Docker 命令:

docker run -d --name elasticsearch --network elastic \
-p 9200:9200 -p 9300:9300 \
-e node.name=esNode -e cluster.name=es-docker-cluster -e discovery.type=single-node \
-e bootstrap.memory_lock=true -e "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" \
-v ${CONF_DIR}/es:/usr/share/elasticsearch/config \
-v ${VOLUME_DATA_DIR}/es:/usr/share/elasticsearch/data \
-v ${LOGS_DIR}/es:/usr/share/elasticsearch/logs \
elasticsearch:6.8.16

其中, CONF_DIR, VOLUME_DATA_DIR, LOGS_DIR 是我本地配置的环境变量, 指向一个固定的文件夹用于挂载 Docker 容器的配置文件, 数据卷和日志文件.

  • 测试

访问 http://localhost:9200/ 看到如下界面就表示 Elasticsearch 启动成功.

file

2.3 K

<think> 我们根据引用内容可知,ELK包括Elasticsearch、Logstash和Kibana三个组件,使用Docker部署可以简化环境配置。下面将详细描述使用Docker搭建ELK日志监控平台的步骤。注意,这里假设你已经安装了Docker和Docker Compose。 ### 1. 准备工作 - 安装Docker和Docker 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. 环境准备** - 安装Docker和Docker 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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值