前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ELK + Filebeat + Kafka 分布式日志管理平台搭建

ELK + Filebeat + Kafka 分布式日志管理平台搭建

作者头像
用户5546570
发布2020-08-21 10:04:53
2.5K0
发布2020-08-21 10:04:53
举报
文章被收录于专栏:以Java架构赢天下

GitHub地址:https://github.com/abel-max/Java-Study-Note/tree/master

1 工作流程

在这之前,我写了三篇文章关于日志系统平台的搭建,我这边现简单列出这几种的工作流程

1.1 ELK

Docker整合ELK实现日志收集

ELK + Filebeat + Kafka 分布式日志管理平台搭建

1.2 ELFK

docker 安装ELFK 实现日志统计

ELK + Filebeat + Kafka 分布式日志管理平台搭建

1.3 架构演进

  • ELK缺点:ELK架构,并且Spring Boot应用使用 logstash-logback-encoder 直接发送给 Logstash,缺点就是Logstash是重量级日志收集server,占用cpu资源高且内存占用比较高
  • ELFK缺点:一定程度上解决了ELK中Logstash的不足,但是由于Beats 收集的每秒数据量越来越大,Logstash 可能无法承载这么大量日志的处理

1.4 ****日志****新贵ELK + Filebeat + Kafka

随着 Beats 收集的每秒数据量越来越大,Logstash 可能无法承载这么大量日志的处理。虽然说,可以增加 Logstash 节点数量,提高每秒数据的处理速度,但是仍需考虑可能 Elasticsearch 无法承载这么大量的日志的写入。此时,我们可以考虑 引入消息队列 ,进行缓存:

  • Beats 收集数据,写入数据到消息队列中。
  • Logstash 从消息队列中,读取数据,写入 Elasticsearch 中

如下就是其工作流程

ELK + Filebeat + Kafka 分布式日志管理平台搭建

2. ELK + Filebeat + Kafka 分布式日志管理平台搭建

2.1 ELFK的搭建

docker 安装ELFK 实现日志统计

2.1.1 Filebeat变动

由于我们架构演变,在filebeat中原来由传输到logstash改变为发送到kafka,我们这边filebeat.yml改动的部分为:

代码语言:javascript
复制
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/logs/springboot/sparksys-authorization.log # 配置我们要读取的 Spring Boot 应用的日志
  fields:
      #定义日志来源,添加了自定义字段
    log_source: authorization
- type: log
  enabled: true
  paths:
    - /var/logs/springboot/sparksys-gateway.log
  fields:
    log_source: gateway
- type: log
  enabled: true
  paths:
    - /var/logs/springboot/sparksys-file.log
  fields:
    log_source: file
- type: log
  enabled: true
  paths:
    - /var/logs/springboot/sparksys-oauth.log
  fields:
    log_source: oauth
#================================ Outputs =====================================
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
  # hosts: ["192.168.3.3:9200"]

#----------------------------- Logstash output --------------------------------
#output.logstash:
  # The Logstash hosts
#  hosts: ["logstash:5044"]


#----------------------------- kafka output --------------------------------
output.kafka:
  enabled: true
  hosts: ["192.168.3.3:9092"]
  topic: sparksys-log

添加kafka输出的配置,将logstash输出配置注释掉。hosts表示kafka的ip和端口号,topic表示filebeat将数据输出到topic为sparksys-log的主题下,此处也根据自己情况修改

2.1.2 Logstash变动

logstash.conf配置input由原来的输入源beat改为kafka

代码语言:javascript
复制
input {
  kafka {
    codec => "json"
    topics => ["sparksys-log"]
    bootstrap_servers => "192.168.3.3:9092"
    auto_offset_reset => "latest"
    group_id => "logstash-g1"
  }
}

output {
  elasticsearch {
    hosts => "es:9200"
    index => "filebeat_%{[fields][log_source]}-%{+YYYY.MM.dd}"
  }
}

上述配置说明如下:

  • topics后面的sparksys-log表示从kafka中topic为sparksys-log的主题中获取数据,此处的配置根据自己的具体情况去配置。
  • bootstrap_servers表示配置kafka的ip与端口。

到此,ELFK的变动部分结束,接下来就是kafka的搭建

2.2 kafka搭建

2.2.1 新建docker-compose.yaml

配置如下:

代码语言:javascript
复制
version: '3'
services:
  zookeeper:
    image: zookeeper:latest
    container_name: zookeeper
    volumes:
      - /Users/zhouxinlei/docker/kafka/zookeeper/data:/data
      - /Users/zhouxinlei/docker/kafka/zookeeper/datalog:/datalog
    ports:
      - 2181:2181
    restart: always
  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    volumes: 
        - /Users/zhouxinlei/docker/kafka/data:/kafka
    ports:
      - 9092:9092
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.3.3
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_LOG_RETENTION_HOURS: 120
      KAFKA_MESSAGE_MAX_BYTES: 10000000
      KAFKA_REPLICA_FETCH_MAX_BYTES: 10000000
      KAFKA_GROUP_MAX_SESSION_TIMEOUT_MS: 60000
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DELETE_RETENTION_MS: 1000
    restart: always
  kafka-manager:  
    image: kafkamanager/kafka-manager
    container_name: kafka-manager
    environment:
        ZK_HOSTS: 192.168.3.3
    ports:  
      - 9001:9000
    restart: always

2.2.3 创建并启动kafka容器

代码语言:javascript
复制
docker-compose up -d

2.2.2 访问 http://192.168.3.3:9001

  • 进入kafka-manager web页面新建cluster

ELK + Filebeat + Kafka 分布式日志管理平台搭建

  • 列表展示

ELK + Filebeat + Kafka 分布式日志管理平台搭建

  • 进入kafka01

ELK + Filebeat + Kafka 分布式日志管理平台搭建

  • 新建topic

ELK + Filebeat + Kafka 分布式日志管理平台搭建

ELK + Filebeat + Kafka 分布式日志管理平台搭建

到此kafka的简单使用完成

3 ELK + Filebeat + Kafka 分布式日志管理平台使用测试

  • Filebeat发送日志到kafka

ELK + Filebeat + Kafka 分布式日志管理平台搭建

  • lofstash 消费kafka消息,输入日志到es中

ELK + Filebeat + Kafka 分布式日志管理平台搭建

  • kabana查看日志

ELK + Filebeat + Kafka 分布式日志管理平台搭建

3 总结

  1. 在部署的过程中可能会遇到各种情况,此时根据日志说明都可以百度处理(如部署的过程中不能分配内存的问题)。
  2. 如果完成后如果数据显示不了,可以先到根据工作流程到各个节点查询数据是否存储和传输成功。如查询filebeat是否成功把数据传输到了kafka,可以进入kafka容器当中使用kafka中如下命令查询:
代码语言:javascript
复制
bin/kafka-console-consumer.sh –zookeeper localhost:2181 –topic 
sparksys-log –from-beginning

查看日志filebeat中的数据是否正常在kafka中存储。

代码语言:javascript
复制
docker logs -f --tail=200 filebeat
  1. 该平台的搭建是比较简便的方式,大家可以更加灵活以及动态的配置该平台。

来源:https://www.tuicool.com/articles/rA3aAfj

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 工作流程
  • 1.1 ELK
  • 1.2 ELFK
  • 1.3 架构演进
  • 1.4 ****日志****新贵ELK + Filebeat + Kafka
  • 2. ELK + Filebeat + Kafka 分布式日志管理平台搭建
  • 2.1 ELFK的搭建
  • 2.1.1 Filebeat变动
  • 2.1.2 Logstash变动
  • 2.2 kafka搭建
  • 2.2.1 新建docker-compose.yaml
  • 2.2.3 创建并启动kafka容器
  • 2.2.2 访问 http://192.168.3.3:9001
  • 3 ELK + Filebeat + Kafka 分布式日志管理平台使用测试
  • 3 总结
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档