filebeat采集慢日志

公司在做数据库慢日志的采集,大体逻辑是,用户在对应主机部署filebeat监控数据库,把产生的慢日志写入到kafka的topic中。
遇到个问题就是topic默认是有3个分区的,导致filebeat采集到的数据会被随机发送到任意分区。需求是希望同一个filebeat发送的数据保存的时候,默认都只会写入到一个分区里。研究半天好像只能手动创建一个单分区的topic,但是这样肯定不太行,这个有什么办法可以做到吗 万分感谢!

可以使用Kafka的分区器函数来解决这个问题。分区器函数确定消息被分配到哪个分区,因此,您可以编写一个自定义分区器函数来确保来自相同filebeat的所有消息都被分配到同一个分区。为此,您需要从Kafka的Partitioner接口中创建一个新的分区器,然后在配置文件中将其设置为您的主题的分区器。这样,每个filebeat都会将其消息发送到同一个分区,确保数据保存在一个分区中。

回答引自chatgpt
可以使用Kafka的消息键(Key)的方式来实现同一个Filebeat发送的数据被保存到同一个分区的需求。
Kafka的消息键,是指在发送消息时,可以携带一个键值对,键是一段二进制数据,值是消息体。Kafka通过对键值对中键的哈希值进行计算,将同一个键的消息保存到同一个分区中。因此,只要在Filebeat发送消息时,为每个消息携带相同的键值对,就可以实现同一个Filebeat发送的数据保存的时候,默认都只会写入到一个分区里的需求。
具体实现方法可以在Filebeat的配置文件中配置output.kafka.key配置项,指定消息键的值,例如

output.kafka:
  hosts: ["kafka:9092"]
  topic: "my-topic"
  key: "my-key"

在上述配置中,key的值设置为"my-key",这样Filebeat发送的所有消息都会携带"my-key"作为消息键,从而实现同一个Filebeat发送的数据保存到同一个分区的需求。需要注意的是,为了确保同一个Filebeat发送的所有消息都保存到同一个分区,需要在Kafka的目标主题中创建只有一个分区的主题。

  • 这篇文章讲的很详细,请看:Filebeat采集多个日志
  • 除此之外, 这篇博客: Filebeat采集日志讲解(二)中的 发送到不同topic 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 经过上面的测试,我们已经知道我们已经把日志成功发送到kafka集群中了。不过上节课我们提到了,我们有很多种类的日志,有些时候我们并不想把所有日志都发送到同一个topic上,不便于分析处理也不便于日志的维护。所以我们一般会选择不同类别的日志写到不同的topic中。

    首先,要在input中加入filed字段,上一节课字段分类已经讲述了。

    fields:
      log_type: system
    

    然后,在配置topic输出:

    topic: '%{[fields.log_topic]}'
    

    这样就会根据新增加的字段log_type的值来决定发送到哪个topic中了。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632