KubernetesでFluent Bitを使用したログ収集

9900 ワード

Fluent BitはFluentdと同様にTreasure Dataが支援する収集ツールであり、両者の比較は以下の通りである.
Fluentd
FluentBit
範囲
サーバ
組み込み機器とIoT機器
メモリ
約20 MB
約150 KB
言語
Cとルビー
C
パフォーマンス
高い
高い
に頼る
一連のGemに依存してRuby Gemで構築
依存はゼロです.一部のプラグインに依存する可能性があります.
プラグイン
300個を超える
現在15個くらい
権限
Apache License v2.0
Apache License v2.0
上の表から分かるように、Fluentdは多くのプラグインを持っていて、それに伴って良い弾力性があります.Fluent Bitは、組み込み機器などのリソースが制限されているシーンに適しています.また、両者は反発関係ではなく、Fluent Bitは出力プラグインを提供し、Fluentdにデータを送ることができるので、システム内で独立したサービスとして協力することができます.
Fluent Bitはまた、Kubernetes Filterプラグインを提供し、収集したログをKubernetes APIのクエリーに結合し、Pod情報、コンテナ情報、ネーミングスペース、ラベル、注釈などのKubernetesに関するデータをログに追加します.
これだけで、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で、具体的なバージョンの更新はDocker Hubに問い合わせることができ、デフォルトの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ページを開くと、Flauentdと一致するログ収集結果が表示されます.
本文は中国語のコミュニティから転載します-Kubernetesの中でFluent Bitを使ってログの採集を行います