昨天成功初步把 Fluentd 給跑了起來,
今天來更深入地閱讀 Fluentd 的文件,以更全面地瞭解它的用法,Let's go!
在昨天的範例中,我們用了官方提供的簡易範例給 Fluentd container 讀取,
<source>
@type http
port 9880
bind 0.0.0.0
</source>
<match **>
@type stdout
</match>
而官方文件在 Life of a Fluentd event 中介紹了設定檔的主要概念,在 Config File Syntax 則有對每個關鍵字做詳細說明,
我目前先簡單分成了三類,或說三個階段:
首先定義 Fluentd 開放的輸入方式,
source
關鍵字定義了寫入 Log 給 Fluentd 的方式,像是在昨天的範例是建立一個 http
的 API,另一種我認為會很常見的是 tail
一個檔案,持續追蹤該檔案新增的內容,
接著定義是否要過濾內容,例如需要包含 xxx 字串、或是去除包含 ooo 字串的內容,
最後定義這些 log 內容要輸出到哪裡,可能是檔案、資料庫、或上傳到雲端平台的 Log 服務。
Docker 預設會把 Log 寫入到指定的路徑,並以 JSON 的方式把時間、內容儲存下來,
根據 Docker 的文件 Configure logging drivers,我們也可以設定為其他的 Logging Driver,更改一個 Container 對於 stdout、stderr 輸出時的行為,可以發現 fluentd 也在支援的清單上,
Fluentd 的文件也有專門的一頁在介紹他們的 Logging driver: Docker Logging Driver。
接著來到 Fluentd 的下一份文件 Docker Compose,
範例闡述了如何透過 Docker compose 來加入 Fluentd 來做 Log,
其中 web container 可以當作是我們要提供出去的服務,例如前端網頁或 API:
version: "3"
services:
# 提供 Web 服務的 apache container
web:
image: httpd
ports:
- "80:80"
# 舊版的 network 設定,用來連接到 fluentd container
links:
- fluentd
# 修改 Logging driver 為 fluentd
logging:
driver: "fluentd"
options:
fluentd-address: localhost:24224
tag: httpd.access
# Fluentd container
fluentd:
build: ./fluentd
volumes:
- ./fluentd/conf:/fluentd/etc
links:
- "elasticsearch"
ports:
- "24224:24224"
- "24224:24224/udp"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.13.1
container_name: elasticsearch
environment:
- "discovery.type=single-node"
expose:
- "9200"
ports:
- "9200:9200"
kibana:
image: docker.elastic.co/kibana/kibana:7.13.1
links:
- "elasticsearch"
ports:
- "5601:5601"
不過,雖然官方提供了範例,但並沒有馬上就成功跑起來,
那就下回待續吧,明天見。