09一、萬能的數據收集器 Fluentd (2019-05-15 週三)

 
前面的ELK 中咱們使用的是 Filebeat 收集Docker日誌,利用的是默認的logging driver json-file。本節咱們將使用 fluentd 來收集容器的日誌。
 
Fluentd 是一個開源的數據收集器,他目前有超過500中的plugin,能夠鏈接各類數據源和數據輸出組件。在下面的實踐中,Fluentd會負責收集容器日誌,而後發送給Elasticsearch。日誌的處理流程以下:
 
這裏咱們用 Filebeat 將 Fluentd 收集到的日誌轉發給 Elasticsearch。這固然不是惟一的方案,Fluentd有一個 plugin 「fluent-plugin-elasticsearch」能夠直接將日誌發送給Elasticsearch。條條大路通羅馬,開源世界給了咱們不少可能性,能夠根據須要選擇合適的方案。
 
安裝 Fluentd
 
一樣,最高效的時間方式是運行一個 fluentd 容器
 
root@host1:/var/log# docker run -d -p 24224:24224 -p 24224:24224/udp -v /data:/fluentd/log fluent/fluentd
 
Fluentd會在tcp和udp 的24224 端口上接收日誌數據,日誌將保存在Host 的 /data 目錄中。
 
從新配置 Filebeat ,添加對 /data目錄的監控
 
root@host1:~# vim /etc/filebeat/filebeat.yml
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
  enabled: true
  paths:
     - /data/*.log
 
root@host1:~# systemctl restart filebeat.service
 
啓動測試容器
 
docker run --name log-test-container-A -d \
    --log-driver=fluentd \
    --log-opt fluentd-address=localhost:24224 \
    --log-opt tag="log-test-container-A" \
    busybox sh -c 'while true; do echo "This is a log message from container A"; sleep 10; done;'
 
docker run --name log-test-container-B -d \
    --log-driver=fluentd \
    --log-opt fluentd-address=localhost:24224 \
    --log-opt tag="log-test-container-B" \
    busybox sh -c 'while true; do echo "This is a log message from container B"; sleep 10; done;'
 
--log-driver=fluentd
    告訴容器使用fluentd的logging driver
 
--log-opt fluentd-address=localhost:24224
    將容器的日誌發送到Fluentd的數據接收端口
 
--log-opt tag="log-test-container-A"
    在日誌中添加tag,用於區分不一樣的容器
 
在Kibana中查詢容器日誌
 
相關文章
相關標籤/搜索