Filebeat 日志输出至 Kafka

本文介绍如何使用Filebeat收集日志并输出至Kafka集群,实现日志的实时传输与处理。通过配置filebeat.yml文件,指定日志来源及Kafka输出参数,实现日志的高效采集。此外,通过调整Kafka主题分区数,优化负载均衡,确保日志处理的高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Filebeat 是一款轻量级的日志采集器,可以用来收集日志,并将日志汇总起来处理。

Filebeat 的工具原理如下图所示:


图片来源:
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html

通过 filebeat 配置文件 filebeat.yml 指定需要收集的日志,并可以指定日志输出至 elasticsearch,logstash,kafka,redis 等下游接收系统。

本文讲述如何配置 filebeat,将日志输出至 kafka 集群。

安装 filebeat

为方便使用,我们采用 docker 方式安装 filebeat。

采用 filebea 官方镜像 docker.elastic.co/beats/filebeat:7.7.1docker-compose.yml 配置如下:

version: '3'
services:
  filebeat:
    image: docker.elastic.co/beats/filebeat:7.7.1
    container_name: filebeat
    restart: always
    volumes:
      - /home/lihao/code/server/logs:/home/lihao/code/server/logs
      - /home/lihao/docker/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro

其中 volumes 的配置,第一行是指定需要收集日志的目录,第二行是指定 filebeat 的配置文件,第三、第四行是参考官方文档添加的配置,详细可参考 https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html

配置 filebeat

配置 filebeat 的输出,以便收集日志:

- type: log
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /home/lihao/code/server/logs/*.log

上述配置中,指定收集的日志文件为 /home/lihao/code/server/logs 目录下的 .log 文件。

配置日志输出至 kafka 集群:

output.kafka:
  hosts: ["10.88.115.137:9095", "10.88.115.137:9096", "10.88.115.137:9097"]
  topic: kafka_log
  partition.round_robin:
    reachable_only: true

kafka 集群地址为10.88.115.137:9095, 10.88.115.137:9096, 10.88.115.137:9097 ,kafka 和 topic 名称为 kafka_log

Filebeat 提供多种输出至 kafka 分区的策略,包括 randomround_robinhash,默认是 hash。上面的配置中,我们指定 round_robin 的策略,并指定 reachable_onlytrue,这表示仅将日志发布到可用分区。
设置好 kafka 分区策略后,后面我们可以通过设置 kafka topic 和 consumer 的数量,以实现负载均衡。

完成 filebeat.yml 配置后,我们使用命令启动 filebeat 容器。

docker-compose up -d

测试

启动 kafka consumer 测试程序,以测试从 kafka 接收日志。

from kafka import KafkaConsumer

consumer = KafkaConsumer('kafka_log', group_id="monitor_group1", bootstrap_servers=["10.88.115.137:9095", '10.88.115.137:9096', '10.88.115.137:9097'])

for msg in consumer:
    print(msg.value)

然后往目录 /home/lihao/code/server/logs 写入日志,命令:

cd /home/lihao/code/server/logs
echo "hello" >> ksb.log

可以看到 consumer 程序输出:

… “message”:“hello” …

使用 kafka 命令可以查看到 topic 的 partition 数量(有关命令可以参考文章
Kafka 生产者和消费者学习笔记》
):

bin/kafka-topics.sh --describe --zookeeper 10.88.115.137:2181 --topic kafka_log

Topic kafka_log 的 partition 数量为 1。为实现负载均衡,设置 kafka_log 的 partition 数量为 2:

bin/kafka-topics.sh --zookeeper 10.88.115.137:2181 --alter --topic kafka_log --partitions 2

打开终端,同时启动两个 kafka consumer 测试程序。然后,修改 partition 数量后,再次执行:

cd /home/lihao/code/server/logs
echo "hello1" >> ksb.log
echo "hello2" >> ksb.log

可以看到其中一个 kafka consumer 测试程序输出:

… “message”:“hello1” …

另一个 kafka consumer 测试程序输出:

… “message”:“hello2” …

不断执行上面的 echo 命令,可以看到 kafka consumer 测试程程序交替地输出接收到的日志。

在我们的生产环境,通过 prometheus 收集 kafka consumer 的 cpu 占用情况,可以看到生产环境上 3 个 kafka consumer 的负载基本一致,这也验证了 filebeat 的 partition.round_robin: 配置在实现负载均衡的作用。

参考资料

  • https://www.elastic.co/cn/beats/filebeat
  • https://www.elastic.co/guide/en/beats/filebeat/current/kafka-output.html
  • https://www.jianshu.com/p/229c01447e54
  • https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html
  • https://www.zhihu.com/question/28925721
### Filebeat 配置将日志发送到 Kafka 的方法 Filebeat 是一个轻量级的日志数据收集器,可以将日志文件中的数据发送到指定的目标系统,例如 Kafka。以下是配置 Filebeat日志发送到 Kafka 的详细方法: #### 1. 安装和配置 Filebeat 首先需要安装 Filebeat,并确保其版本与 Kafka 版本兼容[^5]。可以通过 Elastic 官方网站下载适合的版本并解压。安装完成后,需要编辑 Filebeat 的配置文件 `filebeat.yml`。 #### 2. 编写 Filebeat 配置文件 在配置文件中,定义输入源(日志文件路径)和输出目标(Kafka)。以下是一个示例配置文件: ```yaml filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/access.log # 替换为实际的日志文件路径 fields: type: "nginx-access" # 自定义字段,标识日志类型 fields_under_root: true exclude_files: [".gz$"] # 排除压缩文件 output.kafka: hosts: ["192.168.202.129:9092", "192.168.202.130:9092", "192.168.202.131:9092"] # Kafka Broker 地址 topic: "filebeat" # 指定 Kafka 主题 codec.json: pretty: false # 可选:是否格式化 JSON 输出 ``` 上述配置中: - `filebeat.inputs` 部分定义了要收集的日志文件路径,支持通配符匹配多个文件[^2]。 - `output.kafka` 部分指定了 Kafka 的主机地址和主题名称[^3]。 #### 3. 启动 Filebeat 完成配置后,启动 Filebeat 以开始收集日志并发送到 Kafka: ```bash ./filebeat -e -c filebeat.yml ``` 如果一切配置正确,Filebeat 将读取指定的日志文件并将数据发送到 Kafka[^4]。 #### 注意事项 - 确保 Kafka 服务正常运行,并且 Filebeat 能够访问 Kafka Broker。 - 如果使用的是 Kubernetes 环境,可以考虑使用 Sidecar 模式部署 Filebeat,以便更方便地收集容器日志[^2]。 - 根据实际需求调整日志路径、Kafka 主机地址和主题名称。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值