日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【官方文档】Fluent Bit 安装在 Kubernetes

發布時間:2023/12/9 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【官方文档】Fluent Bit 安装在 Kubernetes 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 概念
    • 2. 安裝
      • 2.1. Fluent Bit to Elasticsearch
      • 2.2. Fluent Bit to Kafka
      • 2.3. 注意 Kubernetes < v1.16
    • 3. 通過 Helm Chart 安裝
    • 4. 詳情
    • 5. 容器運行時接口(CRI)解析器
    • 6. Windows 部署
      • 6.1. 日志文件概述
      • 6.2. 配置 Fluent Bit
      • 6.3. 減輕 Windows pod 上不穩定的網絡

官方文檔地址: Kubernetes


Kubernetes 生產級日志處理器


Fluent Bit 是一款輕量級的、可擴展的日志處理器,完全支持 Kubernetes:

  • 治理來自文件系統或 Systemd / Journald 的 Kubernetes 容器日志。
  • 用 Kubernetes 元數據豐富日志。
  • 將你的日志集中在第三方存儲服務中,比如 Elasticsearch,inflxdb,HTTP等。

1. 概念

在開始之前,了解 Fluent Bit 將如何部署非常重要。Kubernetes 管理一個節點集群,因此我們的日志代理工具需要在每個節點上運行,以從每個 POD 收集日志,因此將 Fluent Bit 部署為 DaemonSet(在集群的每個節點上運行的 POD)。

當 Fluent Bit 運行時,它將讀取、解析和過濾每個 POD 的日志,并使用以下信息(元數據)豐富每個條目:

  • Pod Name
  • Pod ID
  • Container Name
  • Container ID
  • Labels
  • Annotations

為了獲得這些信息,一個名為 kubernetes 的內置過濾器插件與 kubernetes API Server 對話,以檢索相關信息,如 pod_id、labels 和 annotations,其他字段,如 pod_name、container_id 和 container_name 在本地從日志文件名稱中檢索。所有這些都是自動處理的,不需要從配置方面進行干預。

我們的 Kubernetes 過濾器插件完全是受 Jimmi Dyson 編寫的 Fluentd Kubernetes 元數據過濾器的啟發。

2. 安裝

資源庫地址:https://github.com/fluent/fluent-bit-kubernetes-logging

譯者注

官方網站文檔不全,本節一部分的內容是在這個資源庫的 README.md 找到的。

不一定必須按照下面方法來,也可直接訪問該資源庫,將下面提到的文件下載到服務器上,普通K8S部署的話需要五個 Yaml 文件,然后修改里面的部分內容,再創建 POD,我們就是這么做的。

一般的K8S上的安裝只看這一節基本上就能搞定,具體配置文件的修改稍后會發表一篇博文專門講述。

這個資源庫包含一組用于部署 Fluent Bit 的 Yaml 文件,這些文件里面包括了名稱空間、RBAC、服務帳戶等。

Fluent Bit 必須部署為 DaemonSet,這樣它就可以在 Kubernetes 集群的每個節點上使用。首先運行以下命令來創建命名空間、服務帳戶、角色設置以及賬戶角色綁定:

$ kubectl create namespace logging $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-service-account.yaml $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-role.yaml $ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-role-binding.yaml

如果您在 openshift 上部署 fluent-bit,還需要運行以下命令:

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-openshift-security-context-constraints.yaml

2.1. Fluent Bit to Elasticsearch

創建將由我們的 Fluent Bit DaemonSet 使用的 ConfigMap:

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/elasticsearch/fluent-bit-configmap.yaml

默認的 configmap 假設集群使用了 dockershim。如果使用 CRI 運行時,如 containerd 或 CRI-O,則應該使用 CRI 解析器。更具體地說,將input-kubernetes.conf中Parser的描述從 docker 改為 cri。

Fluent Bit DaemonSet 可與 Elasticsearch 在一個普通的 Kubernetes 集群上一起使用:

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/elasticsearch/fluent-bit-ds.yaml

Minikube 上的 Fluent Bit to Elasticsearch

如果您正在使用 Minikube 進行測試,請使用以下可選的 DaemonSet 清單:

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/elasticsearch/fluent-bit-ds-minikube.yaml

2.2. Fluent Bit to Kafka

創建將由我們的 Fluent Bit DaemonSet 使用的 ConfigMap:

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/kafka/fluent-bit-configmap.yaml

Fluent Bit DaemonSet 可與 Kafka 在一個普通的 Kubernetes 集群上一起使用:

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/kafka/fluent-bit-ds.yaml

Minikube 上的 Fluent Bit to Kafka

如果您正在使用 Minikube 進行測試,請使用以下可選的 DaemonSet 清單:

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/output/kafka/fluent-bit-ds-minikube.yaml

2.3. 注意 Kubernetes < v1.16

對于比 v1.16 更老的 Kubernetes 版本,DaemonSet 資源在apps/v1上不可用,該資源在apiVersion: extensions/v1beta1上可用,我們當前的 Daemonset Yaml 文件使用新的apiVersion。

如果你使用的是舊版本的 Kubernetes,手動獲取你的 Daemonset Yaml 文件的副本,并替換 apiVersion 的值:

apiVersion: apps/v1

apiVersion: extensions/v1beta1

你可以在 Kubernetes v1.14 Changelog 上關于這個棄用的信息:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#deprecations

3. 通過 Helm Chart 安裝

Helm 是 Kubernetes 的包管理器,允許您將應用程序包快速部署到正在運行的集群中。Fluent Bit 通過 Fluent Helm Charts repo 中的 helm chart 進行分布式部署:https://github.com/fluent/helm-charts

要添加 Fluent Helm Charts repo,請使用以下命令:

helm repo add fluent https://fluent.github.io/helm-charts

要驗證是否添加了 repo,您可以運行helm search repo fluent,以確保圖表已添加。然后可以通過運行以下程序安裝默認圖表:

helm install fluent-bit fluent/fluent-bit

默認值

默認的圖表值包括讀取容器日志的配置,使用 Docker 解析,systemd 日志應用 Kubernetes 元數據充實并最終輸出到 Elasticsearch 集群。您可以修改https://github.com/fluent/helm-charts/blob/master/charts/fluent-bit/values.yaml文件包含的值,以指定其他輸出、運行狀況檢查、監視端點或其他配置選項。

4. 詳情

Fluent Bit 的默認配置確保了以下功能:

  • 消費運行節點的所有容器日志。
  • Tail 輸入插件將不會追加超過 5MB 到引擎,直到他們刷新到 Elasticsearch 后端。這個限制的目的是為反壓情況提供一個解決方案。
  • Kubernetes 過濾器將使用 Kubernetes 元數據(特別是 labels 和 annotations)豐富日志。過濾器只在找不到緩存的信息時才轉到 API 服務器,否則它將使用緩存。
  • 配置中的默認后端是 Elasticsearch 輸出插件設置的 Elasticsearch。它使用 Logstash 格式來攝取日志。如果你需要一個不同的索引和類型,請參考插件選項并自行調整。
  • 有一個名為 Retry_Limit 的選項設置為 False,這意味著如果 Fluent Bit 不能將記錄刷新到 Elasticsearch,它將無限期地重新嘗試,直到成功。

5. 容器運行時接口(CRI)解析器

Fluent Bit 默認假設日志是按照 Docker 接口標準格式化的。但是,在使用 CRI 時,如果不修改所使用的解析器,就會遇到格式不正確的 JSON 問題。Fluent Bit 包括一個 CRI 日志解析器可以用來代替。下面是解析器的一個示例:

# CRI Parser [PARSER]# http://rubular.com/r/tjUt3Awgg4Name criFormat regexRegex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$Time_Key timeTime_Format %Y-%m-%dT%H:%M:%S.%L%z

要使用此解析器,請將配置的 Input 部分從docker更改為cri。

[INPUT]Name tailPath /var/log/containers/*.logParser criTag kube.*Mem_Buf_Limit 5MBSkip_Long_Lines On

6. Windows 部署

從 v1.5.0 開始,Fluent Bit 支持部署到 Windows pod。

6.1. 日志文件概述

在將 Fluent Bit 部署到 Kubernetes 時,需要注意三個日志文件。

C:\k\kubelet.err.log

  • 這是 kubelet 守護進程在主機上運行的錯誤日志文件。
  • 您將需要保留這個文件,以便將來進行故障排除(調試部署失敗等)。

C:\var\log\containers\<pod>_<namespace>_<container>-<docker>.log

  • 這是您需要查看的主要日志文件。配置 Fluent Bit 以遵循此文件。
  • 它實際上是指向C:\ProgramData\中的 Docker 日志文件的符號鏈接,文件名上有一些額外的元數據。

C:\ProgramData\Docker\containers\<docker>\<docker>.log

  • Docker 生成的日志文件。
  • 通常不直接從該文件讀取,但需要確保該文件在 Fluent Bit 中可見。

通常,您的部署 yaml 包含以下卷配置:

spec:containers:- name: fluent-bitimage: my-repo/fluent-bit:1.5.0volumeMounts:- mountPath: C:\kname: k- mountPath: C:\var\logname: varlog- mountPath: C:\ProgramDataname: progdatavolumes:- name: khostPath:path: C:\k- name: varloghostPath:path: C:\var\log- name: progdatahostPath:path: C:\ProgramData

6.2. 配置 Fluent Bit

假設有上面描述的基本卷配置,您可以應用以下配置來開始日志記錄。你可以設想這個構型:

fluent-bit.conf: |[SERVICE]Parsers_File C:\\fluent-bit\\parsers.conf[INPUT]Name tailTag kube.*Path C:\\var\\log\\containers\\*.logParser dockerDB C:\\fluent-bit\\tail_docker.dbMem_Buf_Limit 7MBRefresh_Interval 10[INPUT]Name tailTag kubelet.errPath C:\\k\\kubelet.err.logDB C:\\fluent-bit\\tail_kubelet.db[FILTER]Name kubernetesMatch kube.*Kube_URL https://kubernetes.default.svc.cluster.local:443[OUTPUT]Name stdoutMatch *parsers.conf: |[PARSER]Name dockerFormat jsonTime_Key timeTime_Format %Y-%m-%dT%H:%M:%S.%LTime_Keep On

6.3. 減輕 Windows pod 上不穩定的網絡

Windows pod 經常在啟動后立即缺少工作的 DNS(#78479)。為了緩解這個問題,filter_kubernetes提供了一個內置的機制來等待網絡啟動:

  • DNS_Retries - 重試 N 次,直到網絡開始工作(6)
  • DNS_Wait_Time - 網絡狀態檢查之間的查找間隔(30)

默認情況下,Fluent Bit 等待3分鐘(30秒x 6次)。如果對您來說還不夠,可以按如下方式調整配置。

[filter]Name kubernetes...DNS_Retries 10DNS_Wait_Time 30

總結

以上是生活随笔為你收集整理的【官方文档】Fluent Bit 安装在 Kubernetes的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。