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