跳到內容

記錄

您可以使用 Fluent Bit,一個日誌處理器和轉發器,將 Kubernetes 日誌收集到中央目錄中。這不是執行 Knative 的必要條件,但對於 Knative Serving 可能很有幫助,它會在不再需要時自動刪除 Pod 和相關日誌。

Fluent Bit 支援匯出到許多其他日誌提供者。如果您已經有現有的日誌提供者,例如 Splunk、Datadog、ElasticSearch 或 Stackdriver,您可以按照 FluentBit 文件來設定日誌轉發器。

設定記錄元件

設定日誌收集需要兩個步驟

  1. 在每個節點上執行日誌轉發 DaemonSet。
  2. 在叢集中的某處執行收集器。

提示

在以下範例中,使用 StatefulSet,它將日誌儲存在 Kubernetes PersistentVolumeClaim 上,但您也可以使用 HostPath。

設定收集器

fluent-bit-collector.yaml 檔案定義了 StatefulSet,以及一個 Kubernetes Service,允許從叢集內部存取和讀取日誌。提供的設定會在名為 logging 的命名空間中建立監控設定。

重要

在設定轉發器之前,請先設定收集器。在設定轉發器時,您需要收集器的位址,並且轉發器可能會將日誌排隊,直到收集器準備就緒。

System diagram: forwarders and co-located collector and nginx

步驟

  1. 輸入命令以套用設定

    kubectl apply -f https://github.com/knative/docs/raw/main/docs/serving/observability/logging/fluent-bit-collector.yaml
    
    預設設定會將日誌分類為

    • Knative 服務,或具有 app=Knative 標籤的 Pod。
    • 非 Knative 應用程式。

    注意

    日誌預設使用 Pod 名稱記錄;這可以在安裝之前或之後更新 log-collector-config ConfigMap 來變更。

    警告

    更新 ConfigMap 後,您必須重新啟動 Fluent Bit。您可以透過刪除 Pod 並讓 StatefulSet 重新建立它來完成此操作。

  2. 若要透過網頁瀏覽器存取日誌,請輸入命令

    kubectl port-forward --namespace logging service/log-collector 8080:80
    
  3. 導覽至 http://localhost:8080/

  4. 選用:您可以開啟 nginx Pod 中的 Shell 並使用 Unix 工具搜尋日誌,方法是輸入命令

    kubectl exec --namespace logging --stdin --tty --container nginx log-collector-0
    

設定轉發器

請參閱 Fluent Bit 文件,以設定 Fluent Bit DaemonSet,預設會將日誌轉發到 ElasticSearch。

當您在安裝步驟中建立 ConfigMap 時,您必須

  • 將 ElasticSearch 設定取代為 fluent-bit-configmap.yaml,或
  • 將下列區塊新增至 ConfigMap,並更新 @INCLUDE output-elasticsearch.conf@INCLUDE output-forward.conf

    output-forward.conf: |
      [OUTPUT]
          Name            forward
          Host            log-collector.logging
          Port            24224
          Require_ack_response  True
    

設定本機收集器

警告

此程序描述開發環境設定,不適合用於生產環境。

如果您使用本機 Kubernetes 叢集進行開發,您可以建立 hostPath PersistentVolume,將日誌儲存在您的桌面作業系統上。這允許您在檔案上使用您常用的桌面工具,而無需 Kubernetes 特定的工具。

PersistentVolumeClaim 看起來會類似於以下

apiVersion: v1
kind: PersistentVolume
metadata:
  name: shared-logs
  labels:
    app: logs-collector
spec:
  accessModes:
    - "ReadWriteOnce"
  storageClassName: manual
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: logs-log-collector-0
    namespace: logging
  capacity:
    storage: 5Gi
  hostPath:
    path: <see below>

注意

hostPath 會根據您的 Kubernetes 軟體和主機作業系統而有所不同。

您必須更新 StatefulSet volumeClaimTemplates 以參考 shared-logs 磁碟區,如下列範例所示

volumeClaimTemplates:
  metadata:
    name: logs
  spec:
    accessModes: ["ReadWriteOnce"]
    volumeName: shared-logs

Kind

建立叢集時,您必須使用 kind-config.yaml 並為每個節點指定 extraMounts,如下列範例所示

apiversion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
  - role: control-plane
    extraMounts:
      - hostPath: ./logs
        containerPath: /shared/logs
  - role: worker
    extraMounts:
      - hostPath: ./logs
        containerPath: /shared/logs

然後您可以在 PersistentVolume 中使用 /shared/logs 作為 spec.hostPath.path。請注意,目錄路徑 ./logs 相對於建立 Kind 叢集的目錄。

Docker Desktop

Docker Desktop 會自動在主機和客體作業系統之間建立一些共用掛載,因此您只需要知道您的主目錄路徑。以下是一些適用於不同作業系統的範例

主機作業系統 hostPath
Mac OS /Users/${USER}
Windows /run/desktop/mnt/host/c/Users/${USER}/
Linux /home/${USER}

Minikube

Minikube 需要明確的命令,才能將 目錄掛載到執行 Kubernetes 的虛擬機器 (VM) 中。

下列命令會將目前目錄內的 logs 目錄掛載到 VM 中的 /mnt/logs

minikube mount ./logs:/mnt/logs

您也必須在 PersistentVolume 中參考 /mnt/logs 作為 hostPath.path

我們使用分析和 Cookie 來瞭解網站流量。您使用我們網站的相關資訊會與 Google 分享以達到此目的。 瞭解更多。