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

通過DaemonSet方式采集Kubernetes容器標準輸出

重要

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

本文介紹如何通過控制臺創建iLogtail采集配置,并以DaemonSet采集方式采集容器標準輸出。

前提條件

  • 已安裝Logtail組件。具體操作,請參見安裝Logtail組件(阿里云Kubernetes集群)
  • 在您安裝Logtail組件時所使用的Project中已完成Logstore創建。具體操作,請參見創建Logstore
  • 目標容器持續產生日志。
    重要 Logtail只采集增量日志。如果下發Logtail配置后,日志文件無更新,則Logtail不會采集該文件中的日志。更多信息,請參見讀取日志

功能特點

Logtail支持采集容器內產生的標準輸出,并附加容器的相關元數據信息一起上傳到日志服務。Logtail具備以下功能特點。

  • 支持采集標準輸出信息(stdout)和標準出錯信息(stderr)。

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

  • 支持通過容器Label黑名單排除不要采集的容器。

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

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

  • 支持采集多行日志(例如Java Stack日志)。

  • 支持上報容器日志時自動關聯Meta信息(例如容器名、鏡像、Pod、Namespace、環境變量等)。

  • 當容器運行于Kubernetes時,Logtail還具有以下功能。

    • 支持通過Kubernetes Namespace名稱、Pod名稱、容器名稱指定待采集的容器。

    • 支持通過Kubernetes Label白名單指定待采集的容器。

    • 支持通過Kubernetes Label黑名單排除不要采集的容器。

    • 支持上報容器日志時自動關聯Kubernetes Label信息。

實現原理

Logtail與Docker的Domain Socket進行通信,查詢該Docker上運行的所有容器,并根據容器中的Label和環境變量定位需要被采集的容器。Logtail通過docker logs命令獲取指定容器日志。

Logtail在采集容器的標準輸出時,會定期將采集的點位信息保存到checkpoint文件中。如果Logtail停止后再次啟動,會從上一次保存的點位開始采集。實現原理

使用限制

  • 此功能目前僅支持Linux操作系統,依賴Logtail 0.16.0及以上版本。版本查看與升級,請參見安裝Logtail(Linux系統)

  • Logtail支持Docker和Containerd兩種容器引擎的數據采集,訪問路徑說明如下:

    • Docker:Logtail通過/run/docker.sock訪問Docker,請確保該路徑存在且具備訪問權限。

    • Containerd:Logtail通過/run/containerd/containerd.sock訪問Containerd,請確保該路徑存在且具備訪問權限。

  • 多行日志限制:為保證多行組成的一條日志不因為輸出延遲而被分割成多條,多行日志情況下,采集的最后一條日志默認都會緩存一段時間。默認緩存時間為3秒,可通過BeginLineTimeoutMs參數修改,但此值不能低于1000(毫秒),否則容易出現誤判。

  • 采集停止策略:當容器被停止后,Logtail監聽到容器die的事件后會停止采集該容器的標準輸出。如果此時采集出現延遲,則可能丟失停止前的部分輸出。

  • Docker容器引擎限制:目前標準輸出采集僅支持JSON類型的日志驅動。

  • 上下文限制:默認同一Logtail配置下的所有容器的標準輸出處于同一上下文中,即無法使用控制臺的上下文查詢及Livetail功能直接查看某一容器標準輸出的上下文。如果需要使用這些功能,請添加日志上下文聚合插件。更多信息,請參見aggregators配置

  • 數據處理:采集到的數據默認保存在content字段中。Logtail對于采集到的容器標準輸出,支持數據處理。更多信息,請參見使用Logtail插件處理數據

創建Logtail采集配置

表單配置方式

登錄日志服務控制臺快速接入數據區域,單擊Kubernetes-標準輸出,按照配置向導操作

Logtail設置步驟中,完成如下配置。采集標準輸出

重要參數說明如下:

全局配置

配置項

說明

配置名稱

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

高級參數

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

輸入配置

參數

說明

標準輸出

選中該選項后,Logtail將采集容器標準輸出。

標準錯誤

選中該選項后,Logtail將采集容器標準錯誤。

啟用容器元信息預覽

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

容器過濾

Logtail版本

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

  • Logtail 1.0.34及以上版本,推薦使用Kubernetes層級的信息(Pod名稱Namespace容器名稱容器Label等)進行容器過濾。

過濾條件說明

重要
  • 容器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下的所有容器。

說明

Logtail 1.0.34及以上版本支持該參數。

K8s Namespace正則匹配

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

說明

Logtail 1.0.34及以上版本支持該參數。

K8s容器名稱正則匹配

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

說明

Logtail 1.0.34及以上版本支持該參數。

容器label白名單

容器Label白名單,用于指定待采集的容器。默認為空,表示采集所有容器的標準輸出。如果您要設置容器Label白名單,那么LabelKey必填,LabelValue可選填。

  • 如果LabelValue為空,則容器Label中包含LabelKey的容器都匹配。
  • 如果LabelValue不為空,則容器Label中包含LabelKey=LabelValue的容器才匹配。

    LabelValue默認為字符串匹配,即只有LabelValue和容器Label的值完全相同才會匹配。如果該值以^開頭并且以$結尾,則為正則匹配。例如:配置LabelKeyio.kubernetes.container.name,配置LabelValue^(nginx|cube)$,表示可匹配名為nginx、cube的容器。

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

容器label黑名單

容器Label黑名單,用于排除不采集的容器。默認為空,表示不排除任何容器。如果您要設置容器Label黑名單,那么LabelKey必填,LabelValue可選填。

  • 如果LabelValue為空,則容器Label中包含LabelKey的容器都將被排除。
  • 如果LabelValue不為空,則容器Label中包含LabelKey=LabelValue的容器才會被排除。

    LabelValue默認為字符串匹配,即只有LabelValue和容器Label的值完全相同才會匹配。如果該值以^開頭并且以$結尾,則為正則匹配。例如:設置LabelKeyio.kubernetes.container.name,設置LabelValue^(nginx|cube)$,表示可匹配名為nginx、cube的容器。

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

環境變量白名單

環境變量白名單,用于指定待采集的容器。默認為空,表示采集所有容器的標準輸出。如果您要設置環境變量白名單,那么EnvKey必填,EnvValue可選填。

  • 如果EnvValue為空,則容器環境變量中包含EnvKey的容器都匹配。
  • 如果EnvValue不為空,則容器環境變量中包含EnvKey=EnvValue的容器才匹配。

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

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

環境變量黑名單

環境變量黑名單,用于排除不采集的容器。默認為空,表示不排除任何容器。如果您要設置環境變量黑名單,那么EnvKey必填,EnvValue可選填。

  • 如果EnvValue為空,則容器環境變量中包含EnvKey的容器的日志都將被排除。
  • 如果EnvValue不為空,則容器環境變量中包含EnvKey=EnvValue的容器才會被排除。

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

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

K8s Pod標簽白名單

通過Kubernetes Label白名單指定待采集的容器。如果您要設置Kubernetes Label白名單,那么LabelKey必填,LabelValue可選填。

  • 如果LabelValue為空,則Kubernetes Label中包含LabelKey的容器都匹配。
  • 如果LabelValue不為空,則Kubernetes Label中包含LabelKey=LabelValue的容器才匹配。

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

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

說明
  • Logtail 1.0.34及以上版本支持該參數。

  • 由于在Kubernetes管控類資源(例如Deployment)運行時更改Label,不會重啟具體的工作資源Pod,因此Pod無法感知此變更,可能導致匹配規則失效。設置K8s Label黑白名單時,請以Pod中的Kubernetes Label為準。關于Kubernetes Label的更多信息,請參見Labels and Selectors

K8s Pod標簽黑名單

通過Kubernetes Label黑名單排除不采集的容器。如果您要設置Kubernetes Label黑名單,那么LabelKey必填,LabelValue可選填。

  • 如果LabelValue為空,則Kubernetes Label中包含LabelKey的容器都被排除。
  • 如果LabelValue不為空,則Kubernetes Label中包含LabelKey=LabelValue的容器才會被排除。

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

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

說明
  • Logtail 1.0.34及以上版本支持該參數。

  • 由于在Kubernetes管控類資源(例如Deployment)運行時更改Label,不會重啟具體的工作資源Pod,因此Pod無法感知此變更,可能導致匹配規則失效。設置K8s Label黑白名單時,請以Pod中的Kubernetes Label為準。關于Kubernetes Label的更多信息,請參見Labels and Selectors

日志標簽富化

如果您使用的是Logtail 1.0.34及以上版本,您可以將環境變量和Kubernetes Label添加到日志,作為日志標簽。

環境變量相關

設置環境變量擴展字段后,日志服務將在日志中新增環境變量相關字段。例如設置環境變量名VERSION,設置tag名env_version,當容器中包含環境變量VERSION=v1.0.0時,會將該信息添加到日志中,即添加字段__tag__:__env_version__: v1.0.0

Pod標簽相關

設置Kubernetes Pod擴展字段后,日志服務將在日志中新增Kubernetes Pod相關字段。例如設置Pod標簽名app,設置tag名k8s_pod_app,當Kubernetes中包含Labelapp=serviceA時,會將該信息添加到日志中,即添加字段__tag__:__k8s_pod_app__: serviceA

日志最大長度(字節)

日志最大長度,默認值為524288字節。取值范圍為[1024, 20971520],單位:字節。

如果日志長度超過該值,則不再繼續查找行首,直接上傳。

首次采集回溯歷史數據長度(字節)

首次采集時回溯歷史數據長度,默認值為131072字節(128 KB)。建議取值范圍為[131072,1048576],單位:字節。

高級參數

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

處理配置

配置項

說明

多行模式

行首正則表達式

Logtail通過行首正則表達式去匹配一條日志的行首,如果匹配成功,則將該行作為一條新的日志,否則將此行拼接到上一條日志。

行首正則匹配長度(字節)

行首匹配的長度,默認值為10240字節。

如果行首匹配的正則表達式在前N個字節即可體現,推薦設置此參數,提升行首匹配效率。

行首匹配超時時間(毫秒)

行首匹配的超時時間,默認值為3000毫秒。

如果3000毫秒內沒有出現新日志,則結束匹配,將最后一條日志上傳到日志服務。

說明

如果日志為多行日志,請使用該選項。

處理模式

處理插件支持拓展插件。有關處理插件的更多信息,請參見處理插件概述

CRD-AliyunPipelineConfig(推薦)

警告

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

您只需要創建AliyunPipelineConfig CR即可創建iLogtail采集配置。創建完成后,系統自動應用該iLogtail采集配置

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

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

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

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

    重要

    多行模式采集指定容器的標準輸出

    創建名為example-k8s-stdout的iLogtail采集配置,對于集群內名稱包含app的所有容器,以多行模式采集標準輸出,直接發送到名稱為k8s-stdout的Logstore,該Logstore屬于名稱為k8s-log-clusterid的Project。

    apiVersion: telemetry.alibabacloud.com/v1alpha1
    # 創建一個 ClusterAliyunPipelineConfig
    kind: ClusterAliyunPipelineConfig
    metadata:
      # 設置資源名,在當前Kubernetes集群內唯一。該名稱也是創建出的iLogtail采集配置名
      name: example-k8s-stdout
    spec:
      # 指定目標project
      project:
        name: k8s-log-clusterid
      # 創建用于存儲日志的 Logstore
      logstores:
        - name: k8s-stdout
      # 定義iLogtail采集配置
      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)$"
            # 指定待采集容器的名稱,支持正則匹配。
            K8sContainerRegex: "^(.*app.*)$"
            # 配置多行切分配置
            # 配置行首正則表達式
            BeginLineRegex: \d+-\d+-\d+.*
        # 定義輸出插件
        flushers:
          # 使用flusher_sls插件輸出到指定Logstore。
          - Type: flusher_sls
            Logstore: k8s-stdout
            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采集配置。創建完成后,系統自動應用該iLogtail采集配置。

  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-stdout-example的Logtail采集配置,以單行文本模式采集集群內所有名稱開頭為app的Pod的容器內的標準輸出,直接發送到名稱為k8s-stdout的Logstore,該Logstore屬于名稱為k8s-log-clusterid的Project。

    # 標準輸出配置
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 設置資源名,在當前Kubernetes集群內唯一。
      name: simple-stdout-example
    spec:
      # 設置Logstore名稱。如果您所指定的Logstore不存在,日志服務會自動創建。
      logstore: k8s-stdout
      # 設置Logtail采集配置。
      logtailConfig:
        # 設置采集的數據源類型。采集標準輸出時,需設置為plugin。
        inputType: plugin
        # 設置Logtail采集配置的名稱,必須與資源名(metadata.name)相同。
        configName: simple-stdout-example
        inputDetail:
          plugin:
            inputs:
              -
                # input type
                type: service_docker_stdout
                detail:
                  # 指定采集stdout和stderr。
                  Stdout: true
                  Stderr: true
                  K8sPodRegex: "^(app.*)$"
  4. 執行如下命令使iLogtail采集配置生效。iLogtail采集配置生效后,Logtail開始采集各個容器上的標準輸出,并發送到日志服務中。

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

    kubectl apply -f cube.yaml
    重要

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

預覽容器元信息

創建Logtail配置后,您可以在Logtail配置頁面查看容器元信息以及容器未匹配過濾條件的原因。

重要

僅Linux Logtail 1.4.0及以上版本或Windows Logtail 1.4.0.0及以上版本支持該功能。

  1. 登錄日志服務控制臺

  2. 在Project列表中,單擊目標Project。

    此處需選擇您在創建Logtail配置所使用的Project。

  3. 日志存儲 > 日志庫頁簽中,單擊目標Logstore左側的>,然后選擇數據接入 > Logtail配置

    此處需選擇您在創建Logtail配置所使用的Logstore。

  4. 在Logtail配置列表中,單擊目標Logtail配置。

  5. Logtail配置頁面中,單擊編輯

  6. 打開啟用容器元信息預覽開關。

  7. 單擊容器元信息預覽

  8. 容器預覽對話框中,查看容器的元信息。

    • 匹配容器頁簽中展示匹配您所設置的過濾條件的容器的元信息。

    • 全量容器頁簽中展示當前Kubernetes集群中所有容器的元信息以及容器未匹配過濾條件的原因。

日志字段

Kubernetes集群的每條日志默認上傳的字段如下所示。

字段名稱

說明

_time_

日志采集時間,例如2021-02-02T02:18:41.979147844Z

_source_

日志源類型,stdout或stderr。

_image_name_

鏡像名

_container_name_

容器名

_pod_name_

Pod名

_namespace_

Pod所在的命名空間

_pod_uid_

Pod的唯一標識

問題排查

當您使用Logtail采集容器(標準容器、Kubernetes)日志遇到異常情況時,您可以參見如下內容進行排查。