我们需要做的,就是将监控的日志输出到kafka里面,这个里面监控的是多级目录。这个地方,需要安装kafka的插件,fluent 收集日志到kafka里面。
实验准备
Fluentd的安装与简单实用(第一章)-yellowcong
插件安装
安装kafka插件
#输出文件到kafka的插件
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-kafka
#安装最新的kafka
/opt/td-agent/embedded/bin/fluent-gem install ruby-kafka
查看安装的插件
/opt/td-agent/embedded/bin/fluent-gem list |grep kafka
删除插件
/opt/td-agent/embedded/bin/fluent-gem uninstall ruby-kafka
kafka输出配置
1 不带缓存
这种,是没有添加kafka的方式
<source>
@type tail
pos_file /gluster/logs/yellowcong/yellowcong_temp.pos
path /gluster/logs/yellowcong/**/*.log
format none
tag yellowcong.temp
</source>
<match yellowcong.temp>
@type kafka
brokers 192.168.112.12:9092
default_topic test
output_data_type json
</match>
2 加缓存的配置
日志的目录/gluster/logs/yellowcong/2018/06/23-fasfaf.log
<source>
@type tail
pos_file /gluster/logs/yellowcong/yellowcong_temp.pos
path /gluster/logs/yellowcong/**/*.log
format none
tag yellowcong.temp
</source>
<match yellowcong.temp>
@type kafka_buffered
brokers 192.168.112.12:9092
# buffer settings
buffer_type file
buffer_path /var/log/td-agent/buffer/yellowcong.*.log
flush_interval 60s
buffer_chunk_limit 256m
buffer_queue_limit 128
#topic settings
default_topic test
#thread setting 根据线程数目
num_threads 4
#data type sessint
output_data_type json
compression_codec gzip
# producer settings
max_send_retries 1
required_acks -1
# 重试策略
disable_retry_limit false
retry_limit 17
retry_wait 1s
#超时设定,默认是20.0
slow_flush_log_threshold 250.0
</match>
参数说明
这个地方,我说一些重要的参数。
1 buffer_type
这个地方缓存有三种,
类型 | 特点 |
---|---|
memory | 基于内存 |
file | 基于文件的缓存,如果用了这个类型的方式,就需要配置 buffer_path |
2 flush_interval
默认是60s,刷新到目标,我们可以使用 “s” (seconds), “m” (minutes), and “h” (hours) 这些后缀
3 default_topic
设定发送到kafka的哪一个topic里面
4 flush_interval
刷buffer的间隔时间,每隔多长时间,就将buffer刷到kafka中,默认是60s钟,写一次buffer到目标服务。
5 buffer_chunk_limit
fluent传递日志的chunk默认是8MB,当数据满8MB后,就会被丢到queue中,每隔flush_interval
6 buffer_queue_limit
fluent的输出队列默认的显示是256
7 num_threads
刷新缓冲区的线程数。此选项可用于将写入并行到输出插件指定的输出中。增加线程数可提高刷新吞吐量,以隐藏写入/网络延迟。默认值为1。这个缓冲器的线程数,建议设定为物理机cpu的核心数目。
8 disable_retry_limit
消息自动重发策略,默认为false
9 retry_limit
重试的次数,默认17次
10 retry_wait
重试的等待时间,默认为1s
参考文档
https://www.jianshu.com/p/c8a5cd7f7f70
常见问题
1. Could not connect to any of the seed brokers
2018-06-27 17:22:26 +0800 [warn]: Send exception occurred: Could not connect to any of the seed brokers:
- kafka://192.168.112.12:9002: Connection refused - connect(2) for 192.168.112.12:9002
没有连接到kafka服务器。我查看了一下,是我的端口有问题啊,尴尬了
2. BufferOverflow occurred: Cannot produce to test, max buffer size (1000 messages) reached
由于不加缓存的这种方式,在消息队列比较大的情况下,就爆掉了,导致一些日志丢失。
3. buffer flush took longer time than slow_flush_log_threshold: plugin_id=“object:1d8281c” elapsed_time=227.446416143 slow_flush_log_threshold=20.0
刷新日志的时间太长了,解决办法,就是减小 flush_interval的时间。
参考文章
https://my.oschina.net/u/239075/blog/474296
https://wenku.baidu.com/view/66bf6577a8114431b80dd824.html
https://docs.fluentd.org/v0.12/articles/out_kafka