kafka客户端工具_日志从Kafka到Loki的N种方式

本文介绍了如何使用Vector、Fluentd和Logstash将日志从Kafka迁移到Loki。分别阐述了各工具的优缺点、安装配置方法,并提供了性能对比。Vector以其轻量级和低资源消耗成为一种选择,而Fluentd和Logstash则更成熟,但资源消耗相对较高。
摘要由CSDN通过智能技术生成
ee0d4c4fbb3a37e5a1c582048afad79f.png 52859684f6f3e69b670f529cc6fba491.png

云原生小白

看到上面蓝色字了么?关注下吧!

最近群里有小伙伴有说到自己的日志存储路径先是从客户端到Kafka,再通过消费kafka到ElasticSearch。现在要将ES换成Loki面临需要同时支持Kafka和Loki插件的工具。小白查了下当前市面上满足需求且足够可靠的工具分别为FluentdLogstash以及Vector

  • Fluentd

CNCF已毕业的云原生日志采集客户端。与kubernetes结合比较紧密,插件丰富且有大厂背书。不足之处在于受ruby限制,在日志量大(建议使用FluentBit)时本身的资源消耗不小。

  • Logstash

ELK栈中老牌的日志采集和聚合工具,使用广泛且插件丰富,不足之处在于资源消耗整体比较高,单机日志并发处理效率不高。

  • Vector

刚开源不久的轻量级日志客户端,产品集成度比较高,资源消耗极低。不足之处就是当下产品似乎没有还没有广泛的最佳实践。

官方性能报告 https://vector.dev/#performance

以下是vector分别对上述产品做的一个性能测试对比,大家可以参考下:

TestVectorFluentBitFluentDLogstash
TCP to Blackhole86mib/s64.4mib/s27.7mib/s40.6mib/s
File to TCP76.7mib/s35mib/s26.1mib/s3.1mib/s
Regex Parsing13.2mib/s20.5mib/s2.6mib/s4.6mib/s
TCP to HTTP26.7mib/s19.6mib/s<1mib/s2.7mib/s
TCP to TCP69.9mib/s67.1mib/s3.9mib/s10mib/s

那么接下来进入主题吧,当我们需要将Kafka里的日志存进Loki时,我们有哪些方法实现,先来看个简单的?

Vector

Vector内部已经集成好了kafka和loki方法,我们只需下载vector和配置就能直接用起来。

ef7d64ab957b0a4d3844a459cb11c0c0.png

安装vector

curl --proto '=https' --tlsv1.2 -sSf https://sh.vector.dev | sh

或者你可以直接使用docker镜像

docker pull timberio/vector:0.10.0-alpine
vector配置
[sources.in]
  bootstrap_servers = ""
  group_id = ""
  topics = ["^(prefix1|prefix2)-.+", "topic-1", "topic-2"]  \\topic名字,支持正则
  type = "kafka"

[sinks.out]
  endpoint = "http://" 
  inputs = ["in"]      \\source.in 
  type = "loki"
  labels.key = "value"  \\自定义key
  labels.key = "{{ event_field }}" \\event的动态值

关于vector-loki更多参数可以参考:https://vector.dev/docs/reference/sinks/loki/

Fluentd

Input - fluent-plugin-kafka

fluent-plugin-kafka插件是fluent的官方处理kafka的插件,可同时用于input和output两个阶段。它的安装方式如下:

gem install fluent-plugin-kafka

当它用于input阶段时,这时fluentd就会作为一个kafka的消费者,从指定的topic中取出消息并做相关处理,它的配置如下:


  @type kafka

  brokers  borker地址>topics format message_key add_prefix add_suffix 

如果你想指定从不同topic的偏移量开始消费消息的话,就需要如下配置:


  @type kafka

  brokers   borker地址>format   topic     partition offset    topic     partition offset    

熟悉fluentd的同学可能知道,在fluentd中是以tag名来处理pipeline的,默认情况下kafka插件会用topic名来做你tag名,如果你想做一些全局的filter可以添加tag前缀/后缀来全局匹配实现。

Output - fluent-plugin-grafana-loki

fluent-plugin-grafana-loki是grafana lab贡献的一个从fluentd发送日志到loki的插件。之前小白在《Loki和Fluentd的那点事儿》里介绍过,这里不过多展开。

配置直接从以前的文章中copy过来,主要的区别在于tag的匹配,参考如下:

 $kafka.topic>  \\此处为kafka的topic@type loki@id loki.outputurl "http://loki:3100"key1          \\如果你的日志json格式,那么你可以将需要提取key2          \\的字段作为你的loki labels label>@type filepath /var/log/fluentd-buffers/loki.bufferflush_mode intervalflush_thread_count 4flush_interval 3sretry_type exponential_backoffretry_wait 2sretry_max_interval 60sretry_timeout 12hchunk_limit_size 8Mtotal_limit_size 5Gqueued_chunks_limit_size 64overflow_action drop_oldest_chunk

Logstash

Input - logstash-input-kafka

logstash-input-kafka是elastic官方提供的kafka消费端插件,对于input阶段的配置也比较简单。

input {
    kafka {
        bootstrap_servers => ""
        topics => ""
        codec => ""
        tags => ""
        }
    }

更多的参数参考https://www.elastic.co/guide/en/logstash/7.10/plugins-inputs-kafka.html

Output - logstash-output-loki

logstash-output-loki也是由grafana lab贡献的用于处理往loki输出的logstash插件。安装时直接执行下列命令即可:

logstash-plugin install logstash-output-loki

logstash输出到loki的参数不多,小白捡主要的几个说明如下:

output {
  loki {
    url => "http:///loki/api/v1/push"
    batch_size => 112640 #单次push的日志包大小
    retries => 5
    min_delay => 3
    max_delay => 500
    message_field => ""
  }
}

总结

以上三个工具均没有做filter和解析,仅仅只是充当管道将日志从kafka里转存到loki,实际环境可能比较复杂,需要对日志做进一步分析。不过从小白的体验来看vector对于日志从kafka到loki的配置算是比较简单直接,fluentd和logstash整体差不多,就看大家自己的顺手程度了。

11d803c496349676c74e35ec8037133b.png

END

往期推荐

Loki监控指标远比你我想象中的细

Tempo - 分布式Loki链路追踪利器

Loki迎来2.0重大更新,LogQL语法大幅增强!

五分钟了解LogQL用法

Loki告警的正确姿势

Loki最佳实践(译)

听说,你的Loki还是单体?(下篇)

听说,你的Loki还是单体?(上篇)

Loki和Fluentd的那点事儿

巧用缓存加速Loki查询

今日实践:Loki丝滑般的数据切换

今日实践:利用Grafana为你的Loki添加告警

46c9ddf69bf62449a39b7cfe0c72f65b.gif

体验更好的云原生日志查询系统?请关注我们的开源项目Dagger

78a9f7fdcf0d5cc524a6342a9b7c46d0.png

我们开源了一个日志查询的小工具 - Dagger

欢迎关注我的公众号【云原生小白】,回复「入群」加入Loki学习群

3f7911942e2fe5d7aa23583566074ecc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值