日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過DaemonSet方式采集Kubernetes容器文本日志

重要

本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。

如果您需要采集ACK集群的容器文本日志,可以通過DaemonSet的方式進行采集,以在每個節點上自動運行一個日志代理,提升運維效率。在ACK集群中,您可以安裝日志組件Logtail,該組件會在節點上部署一個Logtail實例,用于收集節點上所有容器的日志,便于后續的管理和分析。

工作原理

image

DaemonSet模式

  • 在DaemonSet模式中,Kubernetes集群確保每個節點(Node)只運行一個Logtail容器,用于采集當前節點內所有容器(Containers)的日志。

  • 當新節點加入集群時,Kubernetes集群會自動在新節點上創建Logtail容器;當節點退出集群時,Kubernetes集群會自動銷毀當前節點上的Logtail容器。通過DaemonSet的自動擴縮容機制以及標識型機器組,無需您手動管理Logtail實例。

容器發現

  • Logtail容器采集其他容器的日志,必須發現和確定哪些容器正在運行,這個過程稱為容器發現。在容器發現階段,Logtail容器不與Kubernetes集群的kube-apiserver進行通信,而是直接和節點上的容器運行時守護進程(Container Runtime Daemon)進行通信,從而獲取當前節點上的所有容器信息,避免容器發現對集群kube-apiserver產生壓力。

  • Logtail支持通過Namespace名稱、Pod名稱、Pod標簽、容器環境變量等條件指定或排除采集相應容器的日志。

容器文件路徑映射

在Kubernetes集群中,因為Pod之間資源隔離,所以Logtail容器無法直接訪問其他Pod中的容器的文件。但是,容器內的文件系統都是由宿主機的文件系統掛載形成,通過將宿主機根目錄所在的文件系統掛載到Logtail容器,就可以訪問宿主機上的任意文件,從而間接采集業務容器文件系統的文件。容器內文件路徑與宿主機文件路徑之間的關系被稱為文件路徑映射。

日志文件在當前容器內的路徑是/log/app.log,假設映射后的宿主機路徑是/var/lib/docker/containers/<container-id>/log/app.log。Logtail默認將宿主機根目錄所在的文件系統掛載到自身的/logtail_host目錄下,因此Logtail實際采集的文件路徑為/logtail_host/var/lib/docker/containers/<container-id>/log/app.log

步驟一:安裝Logtail組件

Logtail是SLS提供的日志采集Agent,支持無侵入式采集ACK集群中產生的日志。您無需修改應用程序代碼,Logtail采集日志時不會影響您的應用程序運行。您可以在ACK集群中安裝Logtail組件,安裝完成后,Logtail會自動部署logtail-ds DaemonSet,用于采集節點的日志。

重要
  • 請確保僅使用一款日志采集工具例如Logtail,來采集并發送容器日志到SLS。同時使用這兩個組件可能會導致容器日志被重復采集和發送,帶來額外的費用和資源消耗。

  • 升級Logtail、查看Logtail版本及IP地址、查看Logtail的運行日志等操作步驟,請參見安裝Logtail組件(阿里云Kubernetes集群)

創建集群時安裝

  1. 登錄容器服務管理控制臺

  2. 在控制臺左側導航欄,單擊集群

  3. 集群列表頁面中,單擊頁面右上角的創建集群

    以下僅介紹開啟日志服務的關鍵步驟。關于創建集群的具體操作,請參見創建ACK托管集群

  4. 組件配置配置項頁中,選中使用日志服務,表示在新建的Kubernetes集群中安裝日志插件。

    當選中使用日志服務后,會出現創建項目(Project)的提示。關于日志服務管理日志的組織結構,請參見項目(Project)。有以下兩種創建Project的方式。

    • 單擊使用已有Project,選擇一個現有的Project來管理采集的日志。

      image..png

    • 單擊創建新Project,自動創建一個新的Project來管理采集的日志,Project會自動命名為k8s-log-{ClusterID},其中,ClusterID是您新建的Kubernetes集群的唯一標識。

      image..png

  5. 配置完成后,單擊右下角的創建集群,在彈出的窗口中單擊確定,完成創建。

    完成創建后,您可在集群列表頁面查看開啟了Logtail的ACK集群。

為已有集群安裝

  1. 登錄容器服務管理控制臺

  2. 在控制臺左側導航欄,單擊集群

  3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

  4. 在集群管理頁左側導航欄中,選擇運維管理>組件管理,并在日志與監控區域找到logtail-ds

  5. logtail-ds組件右側,單擊安裝,并在安裝組件對話框中單擊確定

如果您已安裝的日志服務組件為舊版本,可以在logtail-ds組件右側,單擊升級

重要

升級logtail-ds組件后,會重置組件參數。如果您曾自定義logtail-ds或alibaba-log-controller的配置和環境變量,參數將被覆蓋,請重新配置。具體操作,請參見手動升級

步驟二:配置Logtail采集配置

  1. 建議您只選擇以下一種方式配置Logtail采集配置。

    • CRD:可以通過Kubernetes的工具進行批量配置和版本控制,適合集中管理多個Logtail采集配置。通過CRD創建的Logtail采集配置不會同步到控制臺,因此如需修改這些配置,必須直接修改CRD資源,不要直接在控制臺操作,否則導致Logtail采集配置不一致。

    • 日志服務控制臺:適合少量Logtail采集配置的創建和管理,無需登錄Kubernetes集群,操作步驟簡單但無法批量配置,配置的優先級低于CRD。

    • 環境變量:只支持單行文本,如果要配置多行文本或其他日志格式,必須使用CRD或在日志服務控制臺配置。

  2. Logtail采集配置項包括:是否過濾某些容器、是否忽略指定的目錄或文件(采集黑名單)、是否允許文件多次采集等。

(推薦)CRD-AliyunPipelineConfig

創建Logtail采集配置

警告

使用AliyunPipelineConfig,需要日志組件版本最低為0.5.1。

您只需要創建AliyunPipelineConfig CR即可創建iLogtail采集配置,創建完成后自動生效。對于通過CR創建的iLogtail采集配置,其修改只能通過更新相應的CR來實現。

  1. 獲取集群KubeConfig并通過kubectl工具連接集群

  2. 執行如下命令創建一個YAML文件。

    cube.yaml為文件名,請根據實際情況替換。

    vim cube.yaml
  3. 在YAML文件輸入如下腳本,并根據實際情況設置其中的參數。

    重要
    • 請確保configName字段值在安裝Logtail組件的Project中唯一。

    • 每個iLogtail采集配置必須單獨設置一個對應的CR,如果多個CR關聯同一個Logtail配置,后配置的CR將不會生效。

    • AliyunPipelineConfig的參數,請參見【推薦】使用AliyunPipelineConfig管理采集配置。本文的iLogtail采集配置樣例包含基礎的文本日志采集功能,參數說明參見CreateLogtailPipelineConfig - 創建Logtail流水線配置

    • 請確保config.flushers.Logstore參數配置的Logstore已存在,可以通過配置spec.logstore參數自動創建Logstore。

    采集指定容器內的單行文本日志

    創建名為example-k8s-file的iLogtail采集配置,對于集群內名稱包含app的所有容器,以單行文本模式采集/data/logs/app_1路徑下的test.LOG文件,

    直接發送到名稱為k8s-file的Logstore,該Logstore屬于名稱為k8s-log-test的Project。

    apiVersion: telemetry.alibabacloud.com/v1alpha1
    # 創建一個 ClusterAliyunPipelineConfig
    kind: ClusterAliyunPipelineConfig
    metadata:
      # 設置資源名,在當前Kubernetes集群內唯一。該名稱也是創建出的iLogtail采集配置名
      name: example-k8s-file
    spec:
      # 指定目標project
      project:
        name: k8s-log-test
      # 創建用于存儲日志的 Logstore
      logstores:
        - name: k8s-file
      # 定義iLogtail采集配置
      config:
        # 定義輸入插件
        inputs:
          # 使用input_file插件采集容器內文本日志
          - Type: input_file
            # 容器內的文件路徑
            FilePaths:
              - /data/logs/app_1/**/test.LOG
            # 啟用容器發現功能。
            EnableContainerDiscovery: true
            # 添加容器信息過濾條件,多個選項之間為“且”的關系。
            ContainerFilters:
              # 指定待采集容器所在 Pod 所屬的命名空間,支持正則匹配。
              K8sNamespaceRegex: default
              # 指定待采集容器的名稱,支持正則匹配。
              K8sContainerRegex: ^(.*app.*)$
        # 定義輸出插件
        flushers:
          # 使用flusher_sls插件輸出到指定Logstore。
          - Type: flusher_sls
            # 需要確保該 Logstore 存在
            Logstore: k8s-file
            # 需要確保 endpoint 正確
            Endpoint: cn-hangzhou.log.aliyuncs.com
            Region: cn-hangzhou
            TelemetryType: logs

    采集所有容器內的多行文本日志并正則解析

    創建名為example-k8s-file的iLogtail采集配置,以多行文本模式采集集群內所有容器內的/data/logs/app_1路徑下的test.LOG文件,對采集到的數據進行JSON解析,直接發送到名稱為k8s-file的Logstore,該Logstore屬于名稱為k8s-log-test的Project。

    下面樣例中的日志原文通過input_file插件讀取后格式為{"content": "2024-06-19 16:35:00 INFO test log\nline-1\nline-2\nend"},會被正則解析插件解析為{"time": "2024-06-19 16:35:00", "level": "INFO", "msg": "test log\nline-1\nline-2\nend"}

    apiVersion: telemetry.alibabacloud.com/v1alpha1
    # 創建一個 ClusterAliyunPipelineConfig
    kind: ClusterAliyunPipelineConfig
    metadata:
      # 設置資源名,在當前Kubernetes集群內唯一。該名稱也是創建出的iLogtail采集配置名
      name: example-k8s-file
    spec:
      # 指定目標project
      project:
        name: k8s-log-test
      # 創建用于存儲日志的 Logstore
      logstores:
        - name: k8s-file
      # 定義iLogtail采集配置
      config:
        # 日志樣例(可不填寫)
        sample: |
          2024-06-19 16:35:00 INFO test log
          line-1
          line-2
          end
        # 定義輸入插件
        inputs:
          # 使用input_file插件采集容器內多行文本日志
          - Type: input_file
            # 容器內的文件路徑
            FilePaths:
              - /data/logs/app_1/**/test.LOG
            # 啟用容器發現功能。
            EnableContainerDiscovery: true
            # 開啟多行能力
            Multiline:
              # 選擇自定義行首正則表達式模式
              Mode: custom
              # 配置行首正則表達式
              StartPattern: \d+-\d+-\d+.*
        # 定義處理插件
        processors:
          # 使用正則解析插件解析日志
          - Type: processor_parse_regex_native
            # 源字段名
            SourceKey: content
            # 解析用的正則表達式,用捕獲組"()"捕獲待提取的字段
            Regex: (\d+-\d+-\d+\s*\d+:\d+:\d+)\s*(\S+)\s*(.*)
            # 提取的字段列表
            Keys: ["time", "level", "msg"]
        # 定義輸出插件
        flushers:
          # 使用flusher_sls插件輸出到指定Logstore。
          - Type: flusher_sls
            # 需要確保該 Logstore 存在
            Logstore: k8s-file
            # 需要確保 endpoint 正確
            Endpoint: cn-hangzhou.log.aliyuncs.com
            Region: cn-hangzhou
            TelemetryType: logs
  4. 執行如下命令使iLogtail采集配置生效。iLogtail采集配置生效后,Logtail開始采集各個容器上的文本日志,并發送到日志服務中。

    cube.yaml為文件名,請根據實際情況替換。

    kubectl apply -f cube.yaml
    重要

    采集到日志后,您需要先創建索引,才能在Logstore中查詢和分析日志。具體操作,請參見創建索引

CRD-AliyunLogConfig

您只需要創建AliyunLogConfig CR即可創建iLogtail采集配置,創建完成后自動生效。對于通過CR創建的iLogtail采集配置,其修改只能通過更新相應的CR來實現。

  1. 獲取集群KubeConfig并通過kubectl工具連接集群

  2. 執行如下命令創建一個YAML文件。

    cube.yaml為文件名,請根據實際情況替換。

    vim cube.yaml
  3. 在YAML文件輸入如下腳本,并根據實際情況設置其中的參數。

    重要
    • 請確保configName字段值在安裝Logtail組件的Project中唯一。

    • 如果多個CR關聯同一個iLogtail采集配置,則刪除或修改任意一個CR均會影響到該iLogtail采集配置,導致其他關聯該iLogtail采集配置的CR狀態與日志服務中iLogtail采集配置的狀態不一致。

    • CR字段的格式請參見使用AliyunLogConfig管理采集配置。本文的iLogtail采集配置樣例包含基礎的文本日志采集功能,具體參數參見CreateConfig - 創建Logtail采集配置

    采集指定容器內的單行文本日志

    “創建名為example-k8s-file的iLogtail采集配置,以單行文本模式采集集群內所有名稱開頭為app的Pod的容器內的/data/logs/app_1路徑下的test.LOG文件,直接發送到名稱為k8s-file的Logstore,該Logstore屬于名稱為k8s-log-test的Project。”

    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 設置資源名,在當前Kubernetes集群內唯一。
      name: example-k8s-file
      namespace: kube-system
    spec:
      # 設置目標project名稱(可不填寫,默認為k8s-log-<your_cluster_id>)
      project: k8s-log-test
      # 設置Logstore名稱。如果您所指定的Logstore不存在,日志服務會自動創建。
      logstore: k8s-file
      # 設置iLogtail采集配置。
      logtailConfig:
        # 設置采集的數據源類型。采集文本日志時,需設置為file。
        inputType: file
        # 設置iLogtail采集配置的名稱。
        configName: example-k8s-file
        inputDetail:
          # 指定通過極簡模式采集文本日志。
          logType: common_reg_log
          # 設置日志文件所在路徑。
          logPath: /data/logs/app_1
          # 設置日志文件的名稱。支持通配符星號(*)和半角問號(?),例如log_*.log。
          filePattern: test.LOG
          # 采集容器的文本日志時,需設置dockerFile為true。
          dockerFile: true
          #設置容器過濾條件。
          advanced:
            k8s:
              K8sPodRegex: '^(app.*)$'
  4. 執行如下命令使其iLogtail采集配置生效。iLogtail采集配置生效后,Logtail開始采集各個容器上的文本日志,并發送到日志服務中。

    cube.yaml為文件名,請根據實際情況替換。

    kubectl apply -f cube.yaml
    重要

    采集到日志后,您需要先創建索引,才能在Logstore中查詢和分析日志。具體操作,請參見創建索引

日志服務控制臺

  1. 登錄日志服務控制臺

  2. 單擊控制臺右側的快速接入數據,在接入數據區域單擊Kubernetes-文件卡片。

    image

  3. 選擇目標Project和Logstore,單擊下一步。選擇您在安裝Logtail組件時所使用的Project。Logstore為您自定義創建的Logstore。

  4. 機器組配置頁面。

    1. 根據實際場景,單擊以下頁簽:

      • K8s場景 > ACK Daemonset

      • K8s場景 > 自建集群Daemonset

        重要

        不同頁簽的后續配置步驟不同,請根據實際需求正確選擇。

    2. 確認目標機器組已在應用機器組列表中,然后單擊下一步。在ACK中安裝Logtail組件后,日志服務自動創建名為k8s-group-${your_k8s_cluster_id}的機器組,您可以直接使用該機器組。

      重要
      • 如果需要新建機器組,請單擊創建機器組,按照右側面板進行創建。更多信息,請參見通過控制臺配置

      • 如果機器組心跳為FAIL,您可單擊自動重試。如果還未解決,請參見Logtail機器組無心跳進行排查。

  5. 創建Logtail采集配置,單擊下一步創建Logtail采集配置,日志服務開始采集日志。

    說明

    Logtail采集配置生效時間最長需要3分鐘,請耐心等待。

    全局配置

    配置項

    說明

    配置名稱

    Logtail配置名稱,在其所屬Project內必須唯一。創建Logtail配置成功后,無法修改其名稱。

    日志主題類型

    選擇日志主題(Topic)的生成方式。更多信息,請參見日志主題

    • 機器組Topic:設置為機器組的Topic屬性,用于明確區分不同機器組產生的日志。

    • 文件路徑提取:設置為文件路徑正則,則需要設置自定義正則,用正則表達式從路徑里提取一部分內容作為Topic。用于區分不同源產生的日志。

    • 自定義:自定義日志主題。

    高級參數

    其它可選的與配置全局相關的高級功能參數,請參見創建Logtail流水線配置

    輸入配置

    參數名稱

    說明

    Logtail部署模式

    Logtail部署模式,選擇DaemonSet。

    文件路徑類型

    選擇待采集的文件路徑是容器內路徑或宿主機路徑。對于通過hostPath方式掛載數據卷的容器,如果您希望直接采集其在宿主機上映射的日志文件,請選擇宿主機路徑,其余情況請選擇容器內路徑。

    文件路徑

    • 如果目標容器節點是Linux系統,則日志路徑必須以正斜線(/)開頭,例如/apsara/nuwa/**/app.Log

    • 如果目標容器節點是Windows系統,則日志路徑必須以盤符開頭,例如C:\Program Files\Intel\**\*.Log

    目錄名和文件名均支持完整模式和通配符模式,文件名規則請參見Wildcard matching。其中,日志路徑通配符只支持星號(*)和半角問號(?)。

    日志文件查找模式為多層目錄匹配,即符合條件的指定目錄(包含所有層級的目錄)下所有符合條件的文件都會被查找到。例如:

    • /apsara/nuwa/**/*.log表示/apsara/nuwa目錄(包含該目錄的遞歸子目錄)中后綴名為.log的文件。

    • /var/logs/app_*/**/*.log表示/var/logs目錄下所有符合app_*格式的目錄(包含該目錄的遞歸子目錄)中后綴名為.log的文件。

    • /var/log/nginx/**/access*表示/var/log/nginx目錄(包含該目錄的遞歸子目錄)中以access開頭的文件。

    最大目錄監控深度

    設置日志目錄被監控的最大深度,即文件路徑中通配符**匹配的最大目錄深度。0代表只監控本層目錄。

    警告

    請按最小需要原則配置目錄監控深度,過大的目錄深度導致Logtail占用更多的監控資源,造成日志采集延遲。

    啟用容器元信息預覽

    打開啟用容器元信息預覽后,您可以在創建Logtail配置后,查看容器元信息,包括匹配容器信息和全量容器信息。

    容器過濾

    • Logtail版本

      • Logtail 1.0.34以下版本,只支持通過環境變量容器Label進行容器過濾。

      • Logtail 1.0.34及以上版本,推薦使用Kubernetes層級的信息(K8s Pod名稱正則匹配K8s Namespace正則匹配K8s容器名稱正則匹配K8s Pod標簽白名單等)進行容器過濾。

    • 過濾條件說明

      重要
      • 容器Label為Docker inspect中的Label,不是Kubernetes中的Label。如何獲取,請參見獲取容器Label

      • 環境變量為容器啟動中配置的環境變量信息。如何獲取,請參見獲取容器環境變量

      1. Kubernetes中的Namespace和容器名稱會映射到容器Label中,分別為io.kubernetes.pod.namespaceio.kubernetes.container.name,推薦使用這兩個容器Label進行容器過濾。例如,某Pod所屬的命名空間為backend-prod,容器名為worker-server,如果您要采集包含該容器的日志,可以設置容器Label白名單為io.kubernetes.pod.namespace : backend-prodio.kubernetes.container.name : worker-server

      2. 如果以上兩個容器Label不滿足過濾需求,請使用環境變量的黑白名單進行容器過濾。

    • K8s Pod名稱正則匹配

      通過Pod名稱指定待采集的容器,支持正則匹配。例如設置為^(nginx-log-demo.*)$,表示匹配以nginx-log-demo開頭的Pod下的所有容器。

    • K8s Namespace正則匹配

      通過Namespace名稱指定采集的容器,支持正則匹配。例如設置為^(default|nginx)$,表示匹配nginx命名空間、default命名空間下的所有容器。

    • K8s容器名稱正則匹配

      通過容器名稱指定待采集的容器(Kubernetes容器名稱是定義在spec.containers中),支持正則匹配。例如設置為^(container-test)$,表示匹配所有名為container-test的容器。

    • 容器label白名單

      通過容器Label白名單指定待采集的容器。

      重要

      請勿設置相同的標簽名,如果重名只生效一個。

      • 如果設置了標簽名但不設置標簽值,則容器Label中包含該標簽名的容器都匹配。

      • 如果設置了標簽名標簽值,則容器Label中包含該標簽名:標簽值的容器才匹配。

        標簽值默認為字符串匹配,即只有標簽值和容器Label的值完全相同才會匹配。如果該值以^開頭并且以$結尾,則為正則匹配。例如設置標簽名app,設置標簽值^(test1|test2)$,表示匹配容器Label中包含app:test1app:test2的容器。

      多個白名單之間為或關系,即只要容器Label滿足任一白名單即可被匹配。

    • 容器label黑名單

      通過容器Label黑名單排除不采集的容器。

      重要

      請勿設置相同的標簽名,如果重名只生效一個。

      • 如果設置了標簽名但不設置標簽值,則容器Label中包含該標簽名的容器都被排除。

      • 如果設置了標簽名標簽值,則容器Label中包含該標簽名:標簽值的容器才會被排除。

        標簽值默認為字符串匹配,即只有標簽值和容器Label的值完全相同才會被排除。如果該值以^開頭并且以$結尾,則為正則匹配。例如設置標簽名app,設置標簽值^(test1|test2)$,表示排除容器Label中包含app:test1、app:test2的容器。

      多個黑名單之間為或關系,即只要容器Label滿足任一黑名單對即可被排除。

    • 環境變量白名單

      通過環境變量白名單指定待采集的容器。

      • 如果設置了環境變量名但不設置環境變量值,則容器環境變量中包含該環境變量名的容器都匹配。

      • 如果設置了環境變量名環境變量值,則容器環境變量中包含該環境變量名和值的容器才匹配。

        環境變量值默認為字符串匹配,即只有環境變量值和環境變量的值完全相同才會匹配。如果該值以^開頭并且以$結尾,則為正則匹配,例如:設置環境變量名NGINX_SERVICE_PORT,設置環境變量值^(80|6379)$,表示可匹配服務端口為80、6379的容器。

      多個白名單之間為或關系,即只要容器的環境變量滿足任一鍵值對即可被匹配。

    • 環境變量黑名單

      通過環境變量黑名單排除不采集的容器。

      • 如果設置了環境變量名但不設置環境變量值,則容器環境變量中包含該環境變量名的容器的日志都將被排除。

      • 如果設置了環境變量名環境變量值,則容器環境變量中包含該環境變量名和值的容器才會被排除。

        環境變量值默認為字符串匹配,即只有環境變量值和環境變量的值完全相同才會被排除。如果該值以^開頭并且以$結尾,則為正則匹配,例如:設置環境變量名NGINX_SERVICE_PORT,設置環境變量值^(80|6379)$,表示可排除服務端口為80、6379的容器。

      多個黑名單之間為或關系,即只要容器的環境變量滿足任一鍵值對即可被排除。

    • K8s Pod標簽白名單

      通過Kubernetes Pod標簽白名單指定待采集的容器。

      • 如果設置了標簽名但不設置標簽值,則Pod標簽中包含該標簽名的容器都匹配。

      • 如果設置了標簽標簽值,則Pod標簽中包含該標簽名:標簽值的容器才匹配。

        標簽值默認為字符串匹配,即只有標簽值和Pod標簽的值完全相同才會匹配。如果該值以^開頭并且以$結尾,則為正則匹配,例如:設置標簽名environment,設置標簽值^(dev|pre)$,表示匹配Pod標簽中包含environment:devenvironment:pre的容器。

      多個白名單之間為或關系,即只要Pod標簽滿足任一鍵值對即可。

    • K8s Pod標簽黑名單

      通過Kubernetes Pod標簽黑名單排除不采集的容器。

      • 如果設置了標簽名但不設置標簽值,則Pod標簽中包含該標簽名的容器都將被排除。

      • 如果設置了標簽標簽值,則Pod標簽中包含該標簽名和標簽值的容器才會被排除。

        標簽值默認為字符串匹配,即只有標簽值和Pod標簽的值完全相同才會被排除。如果該值以^開頭并且以$結尾,則為正則匹配,例如:設置標簽名environment,設置標簽值^(dev|pre)$,表示排除Pod標簽中包含environment:devenvironment:pre的容器。

      多個黑名單之間為或關系,即只要Pod標簽滿足任一鍵值對即可被排除。

    日志標簽富化

    環境變量相關tag和Pod標簽相關tag。

    文件編碼

    日志文件的編碼格式。

    首次采集大小

    配置首次生效時,匹配文件的起始采集位置距離文件結尾的大小。首次采集大小設定值為1024 KB。

    • 首次采集時,如果文件小于1024 KB,則從文件內容起始位置開始采集。

    • 首次采集時,如果文件大于1024 KB,則從距離文件末尾1024 KB的位置開始采集。

    您可以通過此處修改首次采集大小,取值范圍為0~10485760,單位為KB。

    采集黑名單

    打開采集黑名單開關后,可進行黑名單配置,即可在采集時忽略指定的目錄或文件。支持完整匹配和通配符匹配目錄和文件名。其中,通配符只支持星號(*)和半角問號(?)。

    重要
    • 如果您在配置日志路徑時使用了通配符,但又需要過濾掉其中部分路徑,則需在采集黑名單中填寫對應的完整路徑來保證黑名單配置生效。

      例如您配置日志路徑/home/admin/app*/log/*.log,但要過濾/home/admin/app1*目錄下的所有子目錄,則需選擇目錄黑名單,配置目錄為/home/admin/app1*/** 。如果配置為/home/admin/app1*,黑名單不會生效。

    • 匹配黑名單過程存在計算開銷,建議黑名單條目數控制在10條內。

    • 目錄路徑不能以正斜線(/)結尾,例如將設置路徑為/home/admin/dir1/,目錄黑名單不會生效。

    支持按照文件路徑黑名單、文件黑名單、目錄黑名單設置,詳細說明如下:

    文件路徑黑名單

    • 選擇文件路徑黑名單,配置路徑為/home/admin/private*.log,則表示在采集時忽略/home/admin/目錄下所有以private開頭,以.log結尾的文件。

    • 選擇文件路徑黑名單,配置路徑為/home/admin/private*/*_inner.log,則表示在采集時忽略/home/admin/目錄下以private開頭的目錄內,以_inner.log結尾的文件。例如/home/admin/private/app_inner.log文件被忽略,/home/admin/private/app.log文件被采集。

    文件黑名單

    選擇文件黑名單,配置文件名為app_inner.log,則表示采集時忽略所有名為app_inner.log的文件。

    目錄黑名單

    • 選擇目錄黑名單,配置目錄為/home/admin/dir1,則表示在采集時忽略/home/admin/dir1目錄下的所有文件。

    • 選擇目錄黑名單,配置目錄為/home/admin/dir*,則表示在采集時忽略/home/admin/目錄下所有以dir開頭的子目錄下的文件。

    • 選擇目錄黑名單,配置目錄為/home/admin/*/dir,則表示在采集時忽略/home/admin/目錄下二級目錄名為dir的子目錄下的所有文件。例如/home/admin/a/dir目錄下的文件被忽略,/home/admin/a/b/dir目錄下的文件被采集。

    允許文件多次采集

    默認情況下,一個日志文件只能匹配一個Logtail配置。如果文件中的日志需要被采集多份,需打開允許文件多次采集開關。

    高級參數

    Logtail配置的部分參數需要手動輸入,請參見創建Logtail流水線配置

    處理配置

    配置項

    說明

    日志樣例

    待采集日志的樣例,請務必使用實際場景的日志。日志樣例可協助您配置日志處理相關參數,降低配置難度。支持添加多條樣例,總長度不超過1500個字符。

    [2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
        at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
        at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
        at TestPrintStackTrace.main(TestPrintStackTrace.java:16)

    多行模式

    • 多行日志的類型:多行日志是指每條日志分布在連續的多行中,需要從日志內容中區分出每一條日志。

      • 自定義:通過行首正則表達式區分每一條日志。

      • 多行JSON:每個JSON對象被展開為多行,例如:

        {
          "name": "John Doe",
          "age": 30,
          "address": {
            "city": "New York",
            "country": "USA"
          }
        }
    • 切分失敗處理方式:

      Exception in thread "main" java.lang.NullPointerException
          at com.example.MyClass.methodA(MyClass.java:12)
          at com.example.MyClass.methodB(MyClass.java:34)
          at com.example.MyClass.main(MyClass.java:?0)

      對于以上日志內容,如果日志服務切分失敗:

      • 丟棄:直接丟棄這段日志。

      • 保留單行:將每行日志文本單獨保留為一條日志,保留為一共四條日志。

    處理模式

    處理插件組合,包括原生插件拓展插件。有關處理插件的更多信息,請參見處理插件概述

    重要

    處理插件的使用限制,請以控制臺頁面的提示為準。

    • 2.0版本的Logtail:

      • 原生處理插件可任意組合。

      • 原生處理插件和擴展處理插件可同時使用,但擴展處理插件只能出現在所有的原生處理插件之后。

    • 低于2.0版本的Logtail:

      • 不支持同時添加原生插件和擴展插件。

      • 原生插件僅可用于采集文本日志。使用原生插件時,須符合如下要求:

        • 第一個處理插件必須為正則解析插件、分隔符模式解析插件、JSON解析插件、Nginx模式解析插件、Apache模式解析插件或IIS模式解析插件。

        • 從第二個處理插件到最后一個處理插件,最多包括1個時間解析處理插件,1個過濾處理插件和多個脫敏處理插件。

      • 對于解析失敗時保留原始字段解析成功時保留原始字段參數,只有以下組合有效,其余組合無效。

        • 只上傳解析成功的日志:

          image

        • 解析成功時上傳解析后的日志,解析失敗時上傳原始日志:

          image

        • 解析成功時不僅上傳解析后的日志,并且追加原始日志字段,解析失敗時上傳原始日志。

          例如,原始日志"content": "{"request_method":"GET", "request_time":"200"}"解析成功,追加原始字段是在解析后日志的基礎上再增加一個字段,字段名為重命名的原始字段(如果不填則默認為原始字段名),字段值為原始日志{"request_method":"GET", "request_time":"200"}

          image

  6. 創建索引預覽數據,然后單擊下一步。日志服務默認開啟全文索引。您也可以根據采集到的日志,手動創建字段索引,或者單擊自動生成索引,日志服務將自動生成字段索引。更多信息,請參見創建索引

    重要

    如果需要查詢日志中的所有字段,建議使用全文索引。如果只需查詢部分字段、建議使用字段索引,減少索引流量。如果需要對字段進行分析(SELECT語句),必須創建字段索引。

  7. 單擊查詢日志,系統將跳轉至Logstore查詢分析頁面。

    您需要等待1分鐘左右,待索引生效后,才能在原始日志頁簽中,查看已采集到的日志。更多信息,請參見查詢和分析日志

環境變量

1. 創建應用時配置日志服務

通過控制臺配置

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇工作負載 > 無狀態

  3. 無狀態頁面上方的命名空間下拉框中設置命名空間,然后單擊頁面右上角的使用鏡像創建

  4. 應用基本信息頁簽,設置應用名稱副本數量類型,單擊下一步,進入容器配置頁面。

    以下僅介紹日志服務相關的配置。關于其他的應用配置,請參見創建無狀態工作負載Deployment

  5. 日志配置區域,配置日志相關信息。

    1. 設置采集配置

      單擊+圖標創建新的采集配置,每個采集配置由日志庫容器內日志路徑兩項構成。

      • 日志庫:配置Logstore名稱,用于指定所采集的日志存儲于該Logstore。如果該Logstore不存在,ACK將會自動為您在集群關聯的日志服務Project下創建相應的Logstore。

        說明

        新創建的Logstore中的日志默認保存時間為90天。

      • 容器內日志路徑:指定希望采集的日志所在的路徑,例如使用/usr/local/tomcat/logs/catalina.*.log來采集Tomcat的文本日志。

        說明

        指定為stdout時,表示采集容器的標準輸出和標準錯誤輸出。

        每一項采集配置都會被自動創建為對應Logstore的一個采集配置,默認采用極簡模式(按行)進行采集。如果您需要更豐富的采集方式,請參見通過DaemonSet方式采集Kubernetes容器文本日志通過DaemonSet方式采集Kubernetes容器標準輸出(舊版)

      采集配置

    2. 設置自定義Tag

      單擊+圖標創建新的自定義Tag,每一個自定義Tag都是一個鍵值對,會拼接到所采集到的日志中,您可以使用它來為容器的日志數據進行標記,例如版本號。

      自定義tag

  6. 當完成所有配置后,可單擊右上角的下一步進入后續流程。

    后續操作,可參見創建無狀態工作負載Deployment

通過YAML模板

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇工作負載 > 無狀態

  3. 無狀態頁面上方的命名空間下拉框中設置命名空間,然后單擊頁面右上角的使用YAML創建資源

  4. 配置YAML文件。

    YAML模板的語法同Kubernetes語法,但是為了給容器指定采集配置,需要使用env來為容器增加采集配置自定義Tag,并根據采集配置,創建對應的volumeMountsvolumes。以下是一個簡單的Pod示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-demo
    spec:
      containers:
      - name: my-demo-app
        image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
        env:
        # 配置環境變量
        - name: aliyun_logs_log-stdout
          value: stdout
        - name: aliyun_logs_log-varlog
          value: /var/log/*.log
        - name: aliyun_logs_mytag1_tags
          value: tag1=v1
        # 配置volume mount
        volumeMounts:
        - name: volumn-sls-mydemo
          mountPath: /var/log
        # 如果Pod不斷重啟,啟動參數可以添加sleep
        command: ["sh", "-c"]  # 使用 shell 來運行命令
        args: ["sleep 3600"]   # 設置休眠時間為 1 小時(3600 秒)
      volumes:
      - name: volumn-sls-mydemo
        emptyDir: {}

    根據您的需求,按照以下順序進行配置。

    說明

    如果您有更多的日志采集需求,請參見2. 配置環境變量的高級參數

    1. 通過環境變量來創建您的采集配置自定義Tag,所有與配置相關的環境變量都采用aliyun_logs_作為前綴。

      • 創建采集配置的規則如下:

        - name: aliyun_logs_log-stdout
          value: stdout
        - name: aliyun_logs_log-varlog
          value: /var/log/*.log                        

        示例中創建了兩個采集配置,格式為aliyun_logs_{key},對應的{key}分別為log-stdoutlog-varlog

        • aliyun_logs_log-stdout:該env表示創建一個名為log-stdoutLogstore,日志采集路徑為stdout的配置,對應的日志服務采集配置名稱也是log-stdout,目的是將容器的標準輸出采集到log-stdout這個Logstore中。

        • aliyun_logs_log-varlog:該env表示創建一個Logstore名為log-varlog,日志采集路徑為/var/log/*.log的配置,對應的日志服務采集配置名稱也是log-varlog,目的是將容器的/var/log/*.log文件內容采集到log-varlog這個Logstore中。

      • 創建自定義Tag的規則如下:

        - name: aliyun_logs_mytag1_tags
          value: tag1=v1                       

        配置Tag后,當采集到該容器的日志時,會自動附加對應的字段到日志服務。其中mytag1任意不包含'_'的名稱

    2. 如果您的采集配置中指定了非stdout的采集路徑,需要在此部分創建相應的volumeMounts

      示例中采集配置添加了對/var/log/*.log的采集,因此相應地添加了/var/log的volumeMounts

  5. 當YAML編寫完成后,單擊創建,即可將相應的配置交由Kubernetes集群執行。

2. 配置環境變量的高級參數

通過容器環境變量配置采集支持多種配置參數。您可以根據實際需求設置高級參數,以滿足日志采集的特殊需求。

重要

通過容器環境變量配置采集日志的方式不適用于邊緣場景。

字段

說明

示例

注意事項

aliyun_logs_{key}

  • 必選項。{key}只能包含小寫字母、數字和-。

  • 若不存在aliyun_logs_{key}_logstore,則默認創建并采集到名為{key}的logstore。

  • 當值為stdout時表示采集容器的標準輸出;其他值為容器內的日志路徑。

  • - name: aliyun_logs_catalina
    
      value: stdout
  • - name: aliyun_logs_access-log
    
      value: /var/log/nginx/access.log

aliyun_logs_{key}_tags

可選。值為{tag-key}={tag-value}類型,用于對日志進行標識。

- name: aliyun_logs_catalina_tags

  value: app=catalina

不涉及。

aliyun_logs_{key}_project

可選。值為指定的日志服務Project。當不存在該環境變量時,為您安裝時所選的Project。

- name: aliyun_logs_catalina_project

  value: my-k8s-project

Project需與您的Logtail工作所在的Region一致。

aliyun_logs_{key}_logstore

可選。值為指定的日志服務Logstore。當不存在該環境變量時,Logstore和{key}一致。

- name: aliyun_logs_catalina_logstore

  value: my-logstore

不涉及。

aliyun_logs_{key}_shard

可選。值為創建Logstore時的shard數,取值范圍為[1 , 10]。當不存在該環境變量時,值為2。

說明

若logstore已經存在,則該參數不生效。

- name: aliyun_logs_catalina_shard

  value: '4'

不涉及。

aliyun_logs_{key}_ttl

可選。值為指定的日志保存時間,取值范圍為[1 , 3650]。

  • 當取值為3650時,指定日志的保存時間為永久保存。

  • 當不存在該環境變量時,默認指定日志的保存時間為90天。

說明

若Logstore已經存在,則該參數不生效。

- name: aliyun_logs_catalina_ttl

  value: '3650'

不涉及。

aliyun_logs_{key}_machinegroup

可選。值為應用的機器組。當不存在該環境變量時與安裝Logtail的默認機器組一致。關于該參數的詳細使用方法,請參見下文的定制需求2:將不同應用數據采集到不同的Project

- name: aliyun_logs_catalina_machinegroup

  value: my-machine-group

不涉及。

aliyun_logs_{key}_logstoremode

可選。值為指定的日志服務Logstore的類型,不指定該參數的話,默認值為standard,取值:

說明

若Logstore已經存在,則該參數不生效。

  • standard:支持日志服務一站式數據分析功能,適用于實時監控、交互式分析以及構建完整的可觀測性系統等場景。

  • query:支持高性能查詢,索引流量費用約為standard的一半,但不支持SQL分析,適用于數據量大、存儲周期長(周、月級別以上)、無日志分析的場景。

  • - name: aliyun_logs_catalina_logstoremode
      value: standard 
  • - name: aliyun_logs_catalina_logstoremode
      value: query 

該參數需要logtail-ds鏡像版本>=1.3.1。

  • 定制需求1:將多個應用數據采集到同一Logstore

    如果您需要將多個應用數據采集到同一Logstore,可以設置 aliyun_logs_{key}_logstore參數,例如以下配置將2個應用的stdout采集到stdout-logstore中。

    示例中應用1的{key}app1-stdout,應用2的{key}app2-stdout

    應用1設置的環境變量為:

    # 配置環境變量
        - name: aliyun_logs_app1-stdout
          value: stdout
        - name: aliyun_logs_app1-stdout_logstore
          value: stdout-logstore

    應用2設置的環境變量為:

    # 配置環境變量
        - name: aliyun_logs_app2-stdout
          value: stdout
        - name: aliyun_logs_app2-stdout_logstore
          value: stdout-logstore
  • 定制需求2:將不同應用數據采集到不同的Project

    如果您需要將不同應用的數據采集到多個Project中,您需要進行以下操作:

    1. 在每個Project中創建一個機器組,選擇自定義標識,標識名為k8s-group-{cluster-id},其中{cluster-id}為您的集群ID,機器組名稱可以自定義配置。

    2. 在每個應用的環境變量中配置project、logstore、machinegroup信息,其中機器組名稱為您在上一步創建的機器組名。

      如下示例中應用1的{key}app1-stdout,應用2的{key}app2-stdout。其中如果兩個應用在同一個K8s集群中,對應的machinegroup可以使用同一個machinegroup。

      應用1設置的環境變量為:

      # 配置環境變量
          - name: aliyun_logs_app1-stdout
            value: stdout
          - name: aliyun_logs_app1-stdout_project
            value: app1-project
          - name: aliyun_logs_app1-stdout_logstore
            value: app1-logstore
          - name: aliyun_logs_app1-stdout_machinegroup
            value: app1-machine-group

      應用2設置的環境變量為:

      # 應用2 配置環境變量
          - name: aliyun_logs_app2-stdout
            value: stdout
          - name: aliyun_logs_app2-stdout_project
            value: app2-project
          - name: aliyun_logs_app2-stdout_logstore
            value: app2-logstore
          - name: aliyun_logs_app2-stdout_machinegroup
            value: app1-machine-group

步驟三:查詢分析日志

Logtail采集到的容器日志會存儲在SLS Logstore中。您可以在日志服務控制臺查看,也可以在ACK控制臺查看。查詢語法的介紹,請參見查詢與分析概述

ACK控制臺

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇運維管理 > 日志中心

  3. 日志中心頁面,單擊應用日志頁簽,設置檢索條件后單擊選擇日志庫,查看應用容器的相關日志。

SLS控制臺

  1. 安裝成功后,進入日志服務控制臺

  2. 在進入控制臺后,在Project列表區域選擇Kubernetes集群對應的Project(默認為k8s-log-{Kubernetes集群ID}),進入日志庫列表頁簽。

  3. 在列表中找到相應的Logstore(采集配置中指定),將鼠標懸浮在相應的Logstore名稱的右側,單擊button圖標,并單擊查詢分析

    本例中,在日志查詢頁面,您可以查看Tomcat應用的標準輸出日志和容器內文本日志,并可以發現自定義tag附加到日志字段中。

容器日志文本默認字段

每條容器文本日志默認包含的字段如下表所示。

字段名稱

說明

__tag__:__hostname__

容器宿主機的名稱。

__tag__:__path__

容器內日志文件的路徑。

__tag__:_container_ip_

容器的IP地址。

__tag__:_image_name_

容器使用的鏡像名稱。

__tag__:_pod_name_

Pod的名稱。

__tag__:_namespace_

Pod所屬的命名空間。

__tag__:_pod_uid_

Pod的唯一標識符(UID)。

相關文檔