ELK + Filebeat + Kafka 分布式日志管理平台搭建
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改动的部分为:
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
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
配置如下:
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容器
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 总结
- 在部署的过程中可能会遇到各种情况,此时根据日志说明都可以百度处理(如部署的过程中不能分配内存的问题)。
- 如果完成后如果数据显示不了,可以先到根据工作流程到各个节点查询数据是否存储和传输成功。如查询filebeat是否成功把数据传输到了kafka,可以进入kafka容器当中使用kafka中如下命令查询:
bin/kafka-console-consumer.sh –zookeeper localhost:2181 –topic
sparksys-log –from-beginning
查看日志filebeat中的数据是否正常在kafka中存储。
docker logs -f --tail=200 filebeat
- 该平台的搭建是比较简便的方式,大家可以更加灵活以及动态的配置该平台。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PythonforResearch | 0_语法基础
- iOS 系统中的视图动画
- 在 Android 的 /data 目录下添加虚拟内存
- 玩转安卓模拟器命令行
- 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?
- Android 应用保存状态
- 2020-8-9日报:修复zip在某些X64机器上的运行崩溃问题
- 专题一:预处理数据(使用sklearn-preprocessing)
- 「Docker」使用 Docker run 覆盖 ENTRYPOINT
- 尝试在 Mono 3.0 下运行 ASP.NET MVC 4
- CentOS7使用yum安装nginx报错:获取 GPG 密钥失败:[Errno 14] curl#60 - "Peer's Certificate has expired."
- iOS 应用使用位置信息
- Silverlight CreateObjectEx 参考
- NHibernate 配置使用 Formula
- Not allowed to navigate top frame to data URL问题