在使用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>

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐