Fluent Bit 和 Fluentd 一樣,是 Treasure Data 資助的采集工具,二者對比如下:
Fluentd | FluentBit | |
---|---|---|
範圍 | 伺服器 | 嵌入裝置和 IoT 裝置 |
記憶體 | 約 20 MB | 約 150 KB |
語言 | C 和 Ruby | C |
性能 | 高 | |
依賴 | 以 Ruby Gem 建構,依賴一系列的 Gem | 零依賴,可能有些插件會有依賴。 |
插件 | 超過三百個 | 目前15個左右 |
授權 | Apache License v2.0 |
從上表可以看出,Fluentd 具有衆多插件,随之而來的是很好的彈性。而 Fluent Bit 則更适用于嵌入裝置等資源受限的場景。另外二者并非互斥關系,Fluent Bit 提供了輸出插件,可以把資料發給 Fluentd,是以他們可以在系統中作為獨立服務互相協作。
Fluent Bit 也提供了 Kubernetes Filter 插件,用于将采集到的日志結合對 Kubernetes API 的查詢,為日志加入 Kubernetes 的相關資料,例如 Pod 資訊、容器資訊、命名空間以及标簽和注解等内容。
僅就此來說,Fluent Bit 是可以替代 Kubernetes 預設推薦的 Fluentd 進行
日志采集工作的,經過筆者測試,可以直接使用他替代原有的 Fluentd,使用 DaemonSet 運作,結合 Elastic Search 進行日志歸集工作。
詳情參見:http://fluentbit.io/documentation/0.11/filter/kubernetes.html
簡單的使用如下指令就可以運作:
kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-daemonset/master/fluent-bit-daemonset-elasticsearch.yaml
這一 YAML 檔案中的鏡像版本為 0.11,具體版本更新可以到
DockerHub 進行查詢,其中包含的預設 elasticsearch 位址為 elasticsearch-logging,端口為 9200,如上配置如果不符,可以下載下傳檔案自行修改運作。
另外目前 RBAC 的通路控制模式已經成為預設,在啟用了 RBAC 模式的叢集中,該 Pod 的運作是無法成功的,具體表現是日志中出現無法擷取 Pod 中繼資料的資訊,這是因為預設情況下,這一 YAML 中使用的是 kube-system 中的 default Service Account,這一服務賬号并不具備擷取 Pod 資訊的授權,要成功運作,就必須按照
RBAC的規矩,讓 Fluent Bit 的 Service Account 能夠擷取 Pod 資訊,可以用如下方式來解決:
首先為 Fluent bit 建立專門的 Service Account:
kubectl create sa logging -n kube-system
然後為日志收集器建立角色,讓該角色可以讀取 Pod 資訊。
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: pod-reader
rules: - apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
接下來建立 ClusterRoleBinding,把建立的角色和 Service Account 綁定在一起:
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: read-pods-global
subjects: - kind: ServiceAccount
name: logging
namespace: kube-system
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: pod-reader
apiGroup: rbac.authorization.k8s.io
最後在 Fluent Bit 的 yaml 中加入 Service Account 的指派:
# 省略若幹
spec: template:
metadata:
labels:
k8s-app: fluent-bit-logging
version: v1
kubernetes.io/cluster-service: "true"
spec:
serviceAccountName: logging
# 省略若幹
經過這一番折騰之後,Fluent Bit 就可以在開啟 RBAC 的
1.6/
1.7叢集上運作了。打開相應的 Kibana 頁面,會看到和标配 Fluentd 一緻的日志搜集結果。
本文轉自中文社群-
在 Kubernetes 中使用 Fluent Bit 進行日志采集