本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

採集自建K8s叢集標準輸出-舊版(DaemonSet方式部署Logtail)

更新時間:2025-02-21 19:02

Log Service提供DaemonSet與Sidecar兩種方式部署Logtail以供採集K8s日誌,兩種方式的差異請參考K8s叢集情境Logtail安裝採集指引。本文介紹如何通過DaemonSet方式部署Logtail採集自建K8s叢集標準輸出的流程。

前提條件

  • 已開通Log Service。具體操作,請參見開通Log Service

  • 需要叢集Kubernetes 1.6及以上版本。

  • K8s叢集已經安裝kubectl

注意事項

方案概覽

在使用DaemonSet方式部署Logtail並採集K8s叢集標準輸出時,主要有三個步驟:

  1. 安裝Logtail組件:為您的K8s叢集安裝Logtail組件,包含DaemonSet logtail-ds,ConfigMap alibaba-log-configuration,Deployment alibaba-log-controller等,以供後續Log Service下發採集配置到Logtail並執行日誌採集操作。

  2. 建立Logtail採集配置:Logtail組件會根據採集配置將增量日誌採集並處理後上傳到Logstore中。本文介紹CRD-AliyunPipelineConfig(推薦)、CRD-AliyunLogConfig、控制台和環境變數四種建立採集配置的方式。

  3. 查詢分析日誌:配置成功後會為您自動建立Logstore,您可以查看日誌資料。

步驟一:安裝Logtail

重要
  • 目前,alibaba-log-controller組件只支援Kubernetes 1.6及以上版本。

  • 請確保用於執行指令碼的機器中,已安裝kubectl命令。

  1. 登入Log Service控制台,建立Project。具體操作,請參見建立專案Project

    建議建立一個以k8s-log-開頭的Project,例如k8s-log-${your_k8s_cluster_id}

  2. 登入您的Kubernetes叢集,執行如下命令安裝Logtail及其他相依元件。

    1. 下載安裝包並解壓。

      • 中國地區

        wget https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/0.5.3/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
      • 海外地區

        wget https://logtail-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/kubernetes/0.5.3/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
    2. 修改設定檔./alibaba-cloud-log-all/values.yaml

      # ===================== 必需要補充的內容 =====================
      # 目標Project名稱。
      SlsProjectName: 
      # Project所屬地區。
      Region: 
      # Project所屬阿里雲帳號ID,需使用雙引號("")包裹。
      AliUid: "11**99"
      # 阿里雲帳號或RAM使用者的AccessKey ID和AccessKey Secret,需具備AliyunLogFullAccess許可權。
      AccessKeyID: 
      AccessKeySercret: 
      # 自訂叢集ID,命名只支援大小寫,數字,短劃線(-)。
      ClusterID: 
      # ==========================================================
      # 是否開啟指標採集相關組件,選擇性參數: true、false, 預設true。
      SlsMonitoring: true
      # 網路類型,選擇性參數:Internet、Intranet,預設使用Internet。
      Net: Internet
      # 容器運行時是否為containerd,選擇性參數: true, false, 預設false。
      SLS_CONTAINERD_USED: true

      命令中各參數說明如下所示,請根據實際情況替換。

      參數

      說明

      參數

      說明

      SlsProjectName

      配置為您在上文中建立的Project名稱。

      Region

      您的Project所在的地區ID。例如華東1(杭州)的地區ID為cn-hangzhou。更多資訊,請參見開服地區

      AliUid

      Project所屬帳號的阿里雲帳號(主帳號)ID,需使用雙引號包裹(""),例如AliUid: "11**99"。如何擷取,請參見擷取Log Service所在的阿里雲帳號(主帳號)ID

      AccessKeyID

      Project所屬帳號的阿里雲帳號的AccessKey ID。推薦使用RAM使用者的AccessKey,並授予RAM使用者AliyunLogFullAccess許可權。相關操作,請參見建立RAM使用者及授權

      AccessKeySercret

      Project所屬帳號的阿里雲帳號的AccessKey Secret。推薦使用RAM使用者的AccessKey並授予RAM使用者AliyunLogFullAccess許可權。相關操作,請參見建立RAM使用者及授權

      ClusterID

      自訂叢集ID,命名只支援大小寫字母、數字、短劃線(-)。該參數對應後面操作中的${your_k8s_cluster_id}

      重要

      不同的Kubernetes叢集,請勿配置相同的叢集ID。

      SlsMonitoring

      是否開啟指標採集相關組件,可選項:

      • true(預設值):開啟。

      • false:不開啟。

      Net

      網路類型。可選項:

      • Internet(預設值):公網。

      • Intranet:內網。

      SLS_CONTAINERD_USED

      容器運行時是否為containerd,可選項:

      • true:開啟。

      • false(預設值):不開啟。

      重要

      在使用containerd作為容器運行時的自建Kubernetes叢集中,若未開啟相關參數,可能導致日誌無法被Logtail採集。

    3. 安裝Logtail及其他相依元件。

      bash k8s-custom-install.sh; kubectl apply -R -f result

安裝完成後,在該Project下自動建立如下Log Service資源。

重要
  • 在自建Kubernetes叢集上安裝時,預設為Logtail授予privileged許可權,主要是為避免刪除其他Pod時可能出現的container text file busy錯誤。更多資訊,請參見Bug 1468249Bug 1441737issue 34538

資源類型

資源名稱

作用

樣本

資源類型

資源名稱

作用

樣本

機器組

k8s-group-<YOUR_CLUSTER_ID>

logtail-daemonset的機器組,主要用於日誌採集情境。

k8s-group-my-cluster-123

k8s-group-<YOUR_CLUSTER_ID>-statefulset

logtail-statefulset的機器組,主要用於指標採集情境。

k8s-group-my-cluster-123-statefulset

k8s-group-<YOUR_CLUSTER_ID>-singleton

單一實例機器組,主要用於部分單一實例採集配置。

k8s-group-my-cluster-123-singleton

Logstore

config-operation-log

用於儲存Logtail組件中的alibaba-log-controller日誌。建議不要在此Logstore下建立採集配置。該logstore可以刪除,刪除後不會再採集alibaba-log-controller的作業記錄。該Logstore的收費標準和普通的Logstore收費標準是一致的,具體請參見按寫入資料量計費模式計費項目

步驟二:建立Logtail採集配置

這裡為您介紹三種採集配置方式。建議您只使用一種方法管理Logtail採集配置:

配置方式

配置說明

情境適用

配置方式

配置說明

情境適用

(推薦)CRD-AliyunPipelineConfig

通過K8s CRD管理日誌採集配置。

適用於需要複雜採集和處理需求以及在自建叢集中確保日誌與應用版本一致性的情境。

說明

需要logtail組件版本高於0.5.1。升級詳情參見升級Logtail

Log Service控制台

圖形化介面直接管理,快速部署配置。

適合少量Logtail採集配置的建立和管理,部分進階功能和自訂需求無法通過實現。

CRD-AliyunLogConfig

舊版CRD管理方式。

支援已知情境的舊版管理方式。

需要逐漸遷移到新版本CRD-AliyunPipelineConfig以享受更好的擴充性和穩定性。兩類CRD採集方式對比請參見CRD類型

CRD-AliyunPipelineConfig(推薦)
CRD-AliyunLogConfig
Log Service控制台

您只需要建立AliyunPipelineConfig自訂資源即可建立Logtail採集配置,資源建立完成後自動生效。

重要

對於通過自訂資源建立的Logtail採集配置,其修改只能通過更新相應的自訂資源來實現,在Log Service控制台上對Logtail採集配置的修改不會同步到自訂資源中。

  1. 登入您的Kubernetes叢集。

  2. 建立名為example-k8s-file.yaml的檔案。

    以下樣本YAML檔案以多行文字模式採集default命名空間下,標籤為app: ^(.*test.*)$的Pod中的標準輸出,並將其發送到名為k8s-log-test的Project中的名為k8s-file(自動建立)的Logstore。您需根據實際情況修改YAML中的以下參數:

    1. project,樣本:k8s-log-test

      登入Log Service控制台確定您安裝的Logtail產生的Project的名稱,通常格式為k8s-log-<YOUR_CLUSTER_ID>

    2. IncludeK8sLabel,樣本:app: ^(.*test.*)$。用於篩選目標Pod的標籤,當前條件指定標籤鍵為app,值中包含test的Pod會被採集。

      說明

      如果需要採集叢集中名稱包含test的所有Pod,可以將IncludeK8sLabel替換為K8sContainerRegex,並使用萬用字元配置值,如:K8sContainerRegex: ^(.test.)$

    3. EndpointRegion,樣本:cn-hangzhou.log.aliyuncs.comcn-hangzhou

    有關YAML檔案中config項的詳情,包括支援的輸入、輸出、處理外掛程式類型和容器過濾方式,請參見PipelineConfig。完整的YAML參數詳情請參見CR參數說明

    apiVersion: telemetry.alibabacloud.com/v1alpha1
    # 建立一個 ClusterAliyunPipelineConfig
    kind: ClusterAliyunPipelineConfig
    metadata:
      # 設定資源名,在當前Kubernetes叢集內唯一。該名稱也是建立出的Logtail採集配置名。如果名稱重複則不會生效。
      name: example-k8s-file
    spec:
      # 指定目標project
      project:
        name: k8s-log-test
      # 建立用於儲存日誌的 Logstore
      logstores:
        - name: k8s-stdout
      # 定義Logtail採集配置
      config:
        # 日誌範例(可不填寫)
        sample: |
          2024-06-19 16:35:00 INFO test log
          line-1
          line-2
          end
        # 定義輸入外掛程式
        inputs:
              # 使用service_docker_stdout外掛程式採集容器內文本日誌
          - Type: service_docker_stdout
            Stdout: true
            Stderr: true
            # 配置容器資訊過濾條件,多個選項之間為“且”的關係。
            # 指定待採集容器所在 Pod 所屬的命名空間,支援正則匹配。
            K8sNamespaceRegex: "^(default)$"
            # 啟用容器中繼資料預覽
            CollectContainersFlag: true
            # 採集Pod標籤合格容器。多個條目之間為或的關係
            IncludeK8sLabel:
              app: ^(.*test.*)$
            # 配置多行切分配置,單行日誌採集無效配置
            # 配置行首Regex
            BeginLineRegex: \d+-\d+-\d+.*
        # 定義輸出外掛程式
        flushers:
          # 使用flusher_sls外掛程式輸出到指定Logstore。
          - Type: flusher_sls
            # 需要確保該 Logstore 存在
            Logstore: k8s-stdout
            # 需要確保 endpoint 正確
            Endpoint: cn-hangzhou.log.aliyuncs.com
            Region: cn-hangzhou
            TelemetryType: logs
  3. 執行kubectl apply -f example.yaml,其中example.yaml替換為您建立的 YAML 檔案名稱,Logtail開始採集容器內的標準輸出,並發送到Log Service中。

您只需要建立AliyunLogConfig自訂資源即可建立Logtail採集配置,建立完成後自動生效。

重要

對於通過自訂資源建立的Logtail採集配置,其修改只能通過更新相應的自訂資源來實現,在Log Service控制台上對Logtail採集配置的修改不會同步到自訂資源中。

  1. 登入您的Kubernetes叢集。

  2. 建立名為example-k8s-file.yaml的檔案。

    該YAML指令碼將建立名為simple-stdout-example的Logtail採集配置,並對叢集內名稱開頭為app的所有容器,以多行模式採集標準輸出,發送到名為k8s-log-<your_cluster_id>的Project中的名為k8s-stdout的Logstore。

    有關YAML檔案中的logtailConfig項提供的Logtail的詳情,如支援的輸入,輸出,處理外掛程式類型與容器過濾方式等,請參見AliyunLogConfigDetail,完整的YAML參數詳情請參見CR參數說明

    # 標準輸出配置
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 設定資源名,在當前Kubernetes叢集內唯一。
      name: simple-stdout-example
    spec:
      # 設定目標project名稱(可不填寫,預設為k8s-log-<your_cluster_id>)
      # project: k8s-log-test
      # 設定Logstore名稱。如果您所指定的Logstore不存在,Log Service會自動建立。
      logstore: k8s-stdout
      # 設定Logtail採集配置。
      logtailConfig:
        # 設定採集的資料來源類型。採集標準輸出時,需設定為plugin。
        inputType: plugin
        # 設定Logtail採集配置的名稱,必須與資源名(metadata.name)相同。
        configName: simple-stdout-example
        inputDetail:
          plugin:
            inputs:
              - type: service_docker_stdout
                detail:
                  # 指定採集stdout和stderr。
                  Stdout: true
                  Stderr: true
                  # 指定待採集容器所在 Pod 所屬的命名空間,支援正則匹配。
                  K8sNamespaceRegex: "^(default)$"
                  # 指定待採集容器的名稱,支援正則匹配。
                  K8sContainerRegex: "^(app.*)$"
                  # 配置多行切分配置
                  # 配置行首Regex
                  BeginLineRegex: \d+-\d+-\d+.*
                  
  3. 執行kubectl apply -f example.yaml,其中example.yaml替換為您建立的 YAML 檔案名稱,Logtail開始採集容器內的標準輸出,並發送到Log Service中。

  1. 登入Log Service控制台

  2. 選擇Project列表中您在安裝Logtail組件時所使用的Project,如k8s-log-<your_cluster_id>。在Project頁面中點擊目標Logstore的Logtail配置,添加Logtail配置,並單擊Kubernetes-標準輸出-舊版的立即接入。image

  3. 由於上一步驟中已為ACK叢集安裝Logtail組件,請單擊使用現有機器組image

  4. 機器組配置頁面K8s情境的ACK Daemonset方式下勾選k8s-group-${your_k8s_cluster_id}機器組並單擊>添加到應用機器組中,點擊下一步。image

  5. 建立Logtail採集配置,按下文填寫必須配置後點擊下一步即可,Logtail採集配置生效大概需要1分鐘,請耐心等待。

    此處僅介紹必須配置,詳細配置請參見Logtail採集配置

    • 全域配置

      全域配置中輸入配置名稱。

      image

  6. 建立索引預覽資料:Log Service預設開啟全文索引,此時查詢會索引日誌中所有欄位。您也可以根據採集到的日誌,手動建立欄位索引,或者單擊自動產生索引,Log Service將產生欄位索引,通過此索引針對特定欄位進行精確查詢,從而減少索引費用和提高查詢效率。更多資訊請參見建立索引image

步驟三:查詢分析日誌

  1. 登入Log Service控制台

  2. Project列表中,單擊目標Project,進入對應的Project詳情頁面。

    image

  3. 在對應的日誌庫右側的表徵圖表徵圖,選擇查詢分析,查看Kubernetes叢集輸出的日誌。

    image

容器標準輸出預設欄位

每個容器標準輸出預設包含的欄位如下表所示。

欄位名稱

說明

欄位名稱

說明

_time_

日誌採集時間。

_source_

日誌源類型,stdout或stderr。

_image_name_

鏡像名

_container_name_

容器名

_pod_name_

Pod名

_namespace_

Pod所在的命名空間

_pod_uid_

Pod的唯一標識

相關文檔

  • 當您完成日誌內容的採集後,您可以在Log Service中使用查詢與分析功能,來協助您瞭解日誌情況,請參考查詢與分析快速指引

  • 當您完成日誌內容的採集後,您可以在Log Service中使用可視化功能, 來協助您直觀地統計與瞭解日誌情況,請參考快速建立儀錶盤

  • 當您完成日誌內容的採集後,您可以在Log Service中使用警示功能, 來自動提醒您日誌中的異常情況,請參考快速設定日誌警示

  • Log Service僅採集增量日誌,歷史記錄檔採集請參見匯入歷史記錄檔

  • 容器採集異常排查思路:

  • 本頁導讀 (1, M)
  • 前提條件
  • 注意事項
  • 方案概覽
  • 步驟一:安裝Logtail
  • 步驟二:建立Logtail採集配置
  • 步驟三:查詢分析日誌
  • 容器標準輸出預設欄位
  • 相關文檔
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare