在使用Fluentd进行配置的过程中,由于要采用sidecar的方式将fluentd组件作为docker挂载到微服务的pod上,所以就面临每个微服务的日志名称不同,导致fluentd采集日志文件就需要动态变化,最好使用变量的方式来实现。
经过实践,发现可以采用配置环境变量的方式,将fluentd的配置文件里的动态变化的地方来引用环境变量,这样就实现了,一个配置文件,可以挂载到所有的微服务pod上,不用每个微服务都配置一个单独的fluentd配置文件了。
注:这里说的环境变量,是指K8S里的ENV方式设置的,在docker里是可以直接获取的env环境变量。
简单一句话就是:采用环境变量设置的方式,实现了一个配置文件模板。
fluentd部署模式:
1. fluentd使用环境变量的方式:
两种方式:
- 单独使用环境变量
tag "#{ENV['CONF_INFO']}"
- 拼接字符串
tag "app.#{ENV['CONF_INFO']}"
2.配置文件如下:
<source>
@type tail #### tail方式采集日志
format none
path /data/log/*-info.*.log
pos_file "#{ENV['SERVICE_POS_INFO']}"
tag "#{ENV['CONF_INFO']}"
@label @mainstream_info
</source>
<label @mainstream_info>
<filter **>
@type record_transformer
<record>
host_param "#{Socket.gethostname}"
</record>
</filter>
<match **>
type kafka2
id kafka_output
brokers "#{ENV['KAFKA_BROKER']}"
topic_key "#{ENV['CONF_INFO']}"
default_topic "#{ENV['CONF_INFO']}"
use_event_time true
<format>
@type json
</format>
<buffer topic>
flush_interval 5s
</buffer>
required_acks -1
max_send_retries 1
</match>
</label>