使用 Fluentd 自訂 Google Kubernetes Engine 的 Stackdriver 記錄

本教學課程說明如何為 Google Kubernetes Engine 叢集自訂 Fluentd 記錄。您將瞭解如何託管自己的可設定 Fluentd Daemonset,以將記錄傳送至 Stackdriver,而非在建立 Google Kubernetes Engine (GKE) 叢集時選取雲端記錄選項。後者不允許您設定 Fluentd Daemon。

目標

  • 在設定為將資料記錄至 Stackdriver 的 Google Kubernetes Engine 叢集上,部署您自己的 Fluentd Daemonset。我們假設您已熟悉如何使用 Kubernetes
  • 自訂 GKE 記錄以移除 Stackdriver 記錄中的機密資料。
  • 自訂 GKE 記錄以將節點層級事件新增至 Stackdriver 記錄

費用

本教學課程使用的 Cloud Platform 可計費元件包括:

Pricing Calculator 預估這個環境的費用約為 8 小時 $1.14 美元。

事前準備

  1. 登入您的 Google 帳戶。

    如果您沒有帳戶,請申請新帳戶

  2. 在 GCP Console 的專案選擇器頁面中,選取或建立 GCP 專案。

    前往專案選取器頁面

  3. 請確認您已啟用 Google Cloud Platform 專案的計費功能。瞭解如何確認您已啟用專案的計費功能

  4. 啟用Google Kubernetes Engine, Compute Engine必要的 API。

    啟用 API

初始化常用變數

您必須定義多個變數,以控制基礎架構的元素的部署位置。

  1. 使用文字編輯器編輯下列指令碼。請將 [YOUR_PROJECT_ID] 改成您的專案 ID。指令碼會將地區設為 us-east-1。如果您對指令碼進行了任何變更,請確認區域值會參照您指定的地區。

    region=us-east1
    zone=${region}-b
    project_id=[YOUR_PROJECT_ID]
    
  2. 前往 Cloud Shell。

    開啟 Cloud Shell

  3. 將指令碼複製到 Cloud Shell 視窗,然後執行該指令碼。

  4. 執行下列指令來設定預設區域和專案 ID,這樣您就不必在後續的每個指令中指定這些值:

    gcloud config set compute/zone ${zone}
    gcloud config set project ${project_id}
    

建立 GKE 叢集

除非另有說明,請在電腦的指令列或 Cloud Shell 中輸入本教學課程的所有指令。

  1. 複製範例存放區。範例存放區包含 Fluentd Daemonset 的 Kubernetes 資訊清單,以及您將部署的測試記錄程式:

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-customize-fluentd
    
  2. 將工作目錄變更為複製的存放區:

    cd kubernetes-engine-customize-fluentd
    
  3. 在未開啟 Cloud Logging 的狀態下建立 GKE 叢集:

    gcloud beta container clusters create gke-with-custom-fluentd \
       --zone us-east1-b \
       --no-enable-cloud-logging \
       --tags=gke-cluster-with-customized-fluentd \
       --scopes=logging-write
    

部署測試記錄器應用程式

根據預設,您持續部署的範例應用程式會產生隨機記錄陳述式。您可在 gcr.io/cloud-solutions-images/test-logger 取得它使用的 Docker 容器,而其原始碼則位於 test-logger 子目錄中。

  1. test-logger 應用程式部署至 GKE 叢集:

    kubectl apply -f kubernetes/test-logger.yaml
    
  2. 查看 test-logger pod 的狀態:

    kubectl get pods
    
  3. 重複執行這個指令,直到輸出如下所示,三個 test-logger pod 都在執行中的狀態:

    顯示正在執行的三個 pod 的指令輸出

將 Fluentd Daemonset 部署至您的叢集

接下來,您將設定及部署 Fluentd Daemonset。

  1. 部署 Fluentd 設定:

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    
  2. 部署 Fluentd Daemonset:

    kubectl apply -f kubernetes/fluentd-daemonset.yaml
    
  3. 檢查 Fluentd pod 是否已啟動:

    kubectl get pods --namespace=kube-system
    

    如果 pod 正在執行,您會看到如下輸出:

    顯示正在執行的三個 pod 的指令輸出

  4. 確認您是在 Stackdriver 中查看記錄。在主控台的左側選單中,按一下 [Stackdriver] > [Logging] (記錄) > [Logs] (記錄),然後選取清單中的 [Kubernetes Container] (Kubernetes 容器)

    顯示未篩選資料的 Stackdriver 清單

從記錄檔中篩選資訊

下一步是指定 Fluentd 篩選出某些資料,讓系統不要記錄這些資料。針對本教學課程,您將篩選出身分證字號、信用卡號碼和電子郵件地址。如要進行這項更新,請將 Daemonset 變更為使用包含這些篩選條件的 ConfigMap。您將使用 Kubernetes 滾動式更新功能,並保留舊版 ConfigMap。

  1. 在編輯器中開啟 kubernetes/fluentd-configmap.yaml 檔案。

  2. 取消 ### sample log scrubbing filters### end sample log scrubbing filters 之間幾行的註解,不要包含這幾行:

    ############################################################################################################
    #  ### sample log scrubbing filters
    #  #replace social security numbers
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #     log ${record["log"].gsub(/[0-9]{3}-*[0-9]{2}-*[0-9]{4}/,"xxx-xx-xxxx")}
    #   </record>
    # </filter>
    # # replace credit card numbers that appear in the logs
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #      log ${record["log"].gsub(/[0-9]{4} *[0-9]{4} *[0-9]{4} *[0-9]{4}/,"xxxx xxxx xxxx xxxx")}
    #   </record>
    # </filter>
    # # replace email addresses that appear in the logs
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #     log ${record["log"].gsub(/[\w+\-]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+/i,"user@email.tld")}
    #   </record>
    # </filter>
    # ### end sample log scrubbing filters
    #############################################################################################################
  3. 編輯 metadata.name 欄位,將 ConfigMap 的名稱從 fluentd-gcp-config 改為 fluentd-gcp-config-filtered

    name: fluentd-gcp-config
    namespace: kube-system
    labels:
      k8s-app: fluentd-gcp-custom
  4. 儲存並關閉檔案。

將 Fluentd Daemonset 更新為使用新設定

現在,您可以將 kubernetes/fluentd-daemonset.yaml 變更為掛接 ConfigMap fluentd-gcp-config-filtered,而非 fluentd-gcp-config

  1. 在編輯器中開啟 kubernetes/fluentd-daemonset.yaml 檔案。

  2. 透過編輯 configMap.name 欄位,將 ConfigMap 的名稱從 fluentd-gcp-config 變更為 fluentd-gcp-config-filtered

    - configMap:
        defaultMode: 420
        name: fluentd-gcp-config
      name: config-volume
  3. 將新版 ConfigMap 部署至叢集:

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    
  4. 推出新版 Daemonset:

    kubectl apply -f kubernetes/fluentd-daemonset.yaml
  5. 推出更新,並等候該程序完成:

    kubectl rollout status ds/fluentd-gcp-v3.2.0 --namespace=kube-system
    

    顯示 3 個 pod 的「等待中」以及成功訊息的指令輸出

  6. 推出完成後,請重新整理 Stackdriver 記錄,確認系統已篩選出身分證字號、信用卡號碼和電子郵件地址資料。

    顯示相同資料但已經過篩選的 Stackdriver 清單

記錄節點層級事件

如果您想讓 GKE 節點中發生的事件也顯示在 Stackdriver 中,請將以下指令列新增至 ConfigMap,並按照最後一節中所述的操作說明進行操作:

<source>
  type systemd
  filters [{ "SYSLOG_IDENTIFIER": "sshd" }]
  pos_file /var/log/journal/gcp-journald-ssh.pos
  read_from_head true
  tag sshd
</source>

<source>
  type systemd
  filters [{ "SYSLOG_IDENTIFIER": "sudo" }]
  pos_file /var/log/journal/gcp-journald-sudo.pos
  read_from_head true
  tag sudo
</source>

清除所用資源

完成本教學課程後,您可以清除在 GCP 上建立的資源,這樣日後就不需再為這些資源付費。

刪除專案

如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。

如要刪除專案,請執行以下操作:

  1. 前往 GCP Console 中的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源) 頁面

  2. 在專案清單中選取您要刪除的專案,然後按一下「Delete」(刪除) 圖示
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

刪除 GKE 叢集

如果您不想刪除整個專案,請執行下列指令以刪除 GKE 叢集:

gcloud container clusters delete gke-with-custom-fluentd --zone us-east1-b

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
解決方案