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

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

重要

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

如果需要每個Pod使用單獨(dú)的Logtail實例來收集Pod內(nèi)所有容器的日志,可以使用Sidecar方式在Kubernetes集群上部署Logtail。本文介紹Sidecar方式采集容器文本日志的工作原理、使用限制、前提條件、操作步驟等信息。

工作原理

image

Sidecar模式

  • 在Sidecar模式中,每個容器組(Pod)運(yùn)行一個Logtail容器,用于采集當(dāng)前容器組(Pod)所有容器(Containers)的日志。不同Pod的日志采集相互隔離。

  • 為了采集同一Pod中其它容器的日志文件,需要通過共享存儲卷的方式來完成,即將同一份存儲卷分別掛載到業(yè)務(wù)容器和Logtail容器。Sidecar方式采集容器日志的更多信息,請參見Sidecar日志采集介紹Sidecar模式示例。存儲卷的更多信息,請參見存儲基礎(chǔ)知識

前提條件

  • 已安裝Logtail組件。具體操作,請參見安裝Logtail組件(阿里云Kubernetes集群)。

  • 安裝Logtail的主機(jī)需開放80(HTTP)端口和443(HTTPS)端口。ECS實例的端口由安全組規(guī)則控制,添加安全組規(guī)則的步驟請參見添加安全組規(guī)則。

  • 目標(biāo)容器持續(xù)新增日志。Logtail只采集增量日志。如果下發(fā)logtail采集配置后,日志文件無更新,則Logtail不會采集該文件中的日志。更多信息,請參見讀取日志。

  • 業(yè)務(wù)容器中待采集文件必須位于存儲卷中,且該存儲卷必須掛載到Logtail容器。

步驟一:為業(yè)務(wù)Pod注入Logtail容器

  1. 登錄Kubernetes集群。

  2. 創(chuàng)建一個YAML文件。sidecar.yaml為文件的示例名稱,請根據(jù)實際情況替換。

    vim sidecar.yaml
  3. 在YAML文件中輸入如下腳本,并根據(jù)實際情況設(shè)置其中的參數(shù)。

    警告

    YAML模板中,所有帶有${}的占位符都需要替換為您環(huán)境中實際的值,其他參數(shù)禁止改動、刪除。

    YAML模板

    apiVersion: batch/v1
    kind: Job
    metadata:
      # 在這里添加 Job 元信息,比如 name 和 namespace
      name: ${job_name}
      namespace: ${namespace}
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            # 業(yè)務(wù)容器
            - name: ${main_container_name}
              image: ${main_container_image}
              command: ["/bin/sh", "-c"]
              args:
                - until [[ -f /tasksite/cornerstone ]]; do sleep 1; done;
                  # 替換為業(yè)務(wù)容器的實際啟動命令
                  ${container_start_cmd};
                  retcode=$?;
                  touch /tasksite/tombstone;
                  exit $retcode
              volumeMounts:
                # 業(yè)務(wù)容器的日志目錄掛載到共享存儲卷
                - name: ${shared_volume_name}
                  mountPath: ${dir_containing_your_files}
                # 與 Logtail 容器交互的掛載點
                - mountPath: /tasksite
                  name: tasksite
             
            # Logtail sidecar 容器
            - name: logtail
              image: ${logtail_image}
              command: ["/bin/sh", "-c"]
              args:
                - /etc/init.d/ilogtaild start;
                  sleep 10; # 等待 Logtail 配置下載完成
                  touch /tasksite/cornerstone;
                  until [[ -f /tasksite/tombstone ]]; do sleep 1; done;
                  sleep 10; # 等待 Logtail 完成日志發(fā)送
                  /etc/init.d/ilogtaild stop;
              livenessProbe:
                exec:
                  command:
                    - /etc/init.d/ilogtaild
                    - status
                initialDelaySeconds: 30
                periodSeconds: 30
              env:
                # 設(shè)置時區(qū)。請根據(jù)kubernetes集群所在地域,配置時區(qū),格式為"地區(qū)/城市"。如果是中國大陸,可以設(shè)置時區(qū)為Asia/Shanghai。
                # 如果沒有正確配置時區(qū),可能導(dǎo)致原始日志與處理日志的時間標(biāo)簽不匹配,進(jìn)而將日志數(shù)據(jù)歸檔到錯誤的時間點。
                - name: TZ   
                  value: "${timezone}"
                - name: ALIYUN_LOGTAIL_USER_ID
                  value: "${your_aliyun_user_id}"
                - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
                  value: "${your_machine_group_user_defined_id}"
                - name: ALIYUN_LOGTAIL_CONFIG
                  value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
                # 追加 Pod 環(huán)境信息作為日志標(biāo)簽
                - name: "ALIYUN_LOG_ENV_TAGS"
                  value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
                # 獲取 Pod 和 Node 的信息
                - name: "_pod_name_"
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: "_pod_ip_"
                  valueFrom:
                    fieldRef:
                      fieldPath: status.podIP
                - name: "_namespace_"
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: "_node_name_"
                  valueFrom:
                    fieldRef:
                      fieldPath: spec.nodeName
                - name: "_node_ip_"
                  valueFrom:
                    fieldRef:
                      fieldPath: status.hostIP
              volumeMounts:
                # Logtail 容器的日志目錄掛載到共享存儲卷
                - name: ${shared_volume_name}
                  mountPath: ${dir_containing_your_files}
                # 與業(yè)務(wù)容器交互的掛載點
                - mountPath: /tasksite
                  name: tasksite
          volumes:
            # 定義空的共享存儲卷用于日志存儲
            - name: ${shared_volume_name}
              emptyDir: {}
            # 定義存儲卷用于容器間通信
            - name: tasksite
              emptyDir:
                medium: Memory
    

    關(guān)鍵參數(shù)說明

    變量

    說明

    ${your_aliyun_user_id}

    設(shè)置為您的阿里云賬號ID。更多信息,請參見配置用戶標(biāo)識

    ${your_machine_group_user_defined_id}

    自定義設(shè)置機(jī)器組的自定義標(biāo)識,例如nginx-log-sidecar。

    重要

    請確保該標(biāo)識在您的Project所在地域內(nèi)唯一。

    ${your_region_config}

    請根據(jù)日志服務(wù)Project所在地域和訪問的網(wǎng)絡(luò)類型填寫。其中,地域信息請參見安裝Logtail(Linux系統(tǒng))。

    • 如果使用公網(wǎng)采集日志,格式為region-internet,例如華東 1(杭州)cn-hangzhou-internet。

    • 如果使用阿里云內(nèi)網(wǎng)采集日志,格式為region。例如華東 1(杭州)cn-hangzhou。

    ${logtail_image}

    Logtail鏡像地址

    ${shared_volume_name}

    自定義設(shè)置卷的名稱。

    重要

    volumeMounts節(jié)點下的name參數(shù)與volumes節(jié)點下的name參數(shù)需設(shè)置為一致,即確保Logtail容器和業(yè)務(wù)容器掛載相同的卷上。

    ${dir_containing_your_files}

    設(shè)置掛載路徑,即容器待采集文本日志所在目錄。

    示例

    apiVersion: batch/v1
    kind: Job
    metadata:
      # 在這里添加 Job 元信息,比如 name 和 namespace
      name: nginx-log-sidecar-demo
      namespace: default
    spec:
      template:
        metadata:
          # 在這里添加 Pod 元信息,比如 labels
          labels:
            app: nginx-logger
        spec:
          restartPolicy: Never
          containers:
            # 業(yè)務(wù)容器
            - name: nginx
              image: nginx-test
              command: ["/bin/sh", "-c"]
              args:
                - until [[ -f /tasksite/cornerstone ]]; do sleep 1; done;
                  # 替換為業(yè)務(wù)容器的實際啟動命令
                  nginx -g 'daemon off;';
                  retcode=$?;
                  touch /tasksite/tombstone;
                  exit $retcode
              volumeMounts:
                # 業(yè)務(wù)容器的日志目錄掛載到共享存儲卷
                - name: nginx-logs
                  mountPath: /var/log/nginx
                # 與 Logtail 容器交互的掛載點
                - mountPath: /tasksite
                  name: tasksite
              # 在這里定義業(yè)務(wù)容器的資源請求和限制
              resources:
                limits:
                  cpu: 500m
                  memory: 512Mi
                requests:
                  cpu: 10m
                  memory: 30Mi
            # Logtail sidecar 容器
            - name: logtail
              image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:v1.5.1.0-aliyun
              command: ["/bin/sh", "-c"]
              args:
                - /etc/init.d/ilogtaild start;
                  sleep 10; # 等待 Logtail 配置下載完成
                  touch /tasksite/cornerstone;
                  until [[ -f /tasksite/tombstone ]]; do sleep 1; done;
                  sleep 10; # 等待 Logtail 完成日志發(fā)送
                  /etc/init.d/ilogtaild stop;
              livenessProbe:
                exec:
                  command:
                    - /etc/init.d/ilogtaild
                    - status
                initialDelaySeconds: 30
                periodSeconds: 30
              resources:
                limits:
                  cpu: 500m
                  memory: 512Mi
                requests:
                  cpu: 10m
                  memory: 30Mi
              env:
                # 設(shè)置時區(qū)。請根據(jù)kubernetes集群所在地域,配置時區(qū),格式為"地區(qū)/城市"。如果是中國大陸,可以設(shè)置時區(qū)為Asia/Shanghai。
                # 如果沒有正確配置時區(qū),可能導(dǎo)致原始日志與處理日志的時間標(biāo)簽不匹配,進(jìn)而將日志數(shù)據(jù)歸檔到錯誤的時間點。
                - name: TZ   
                  value: "Asia/Shanghai"
                # 在這里替換為實際的環(huán)境變量值
                - name: ALIYUN_LOGTAIL_USER_ID
                  value: "20*******28"
                - name: ALIYUN_LOGTAIL_USER_DEFINED_ID
                  value: "nginx-log-sidecar"
                - name: ALIYUN_LOGTAIL_CONFIG
                  value: "/etc/ilogtail/conf/cn-hangzhou-internet/ilogtail_config.json"
                # 追加 Pod 環(huán)境信息作為日志標(biāo)簽
                - name: "ALIYUN_LOG_ENV_TAGS"
                  value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
                # 獲取 Pod 和 Node 的信息
                - name: "_pod_name_"
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: "_pod_ip_"
                  valueFrom:
                    fieldRef:
                      fieldPath: status.podIP
                - name: "_namespace_"
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: "_node_name_"
                  valueFrom:
                    fieldRef:
                      fieldPath: spec.nodeName
                - name: "_node_ip_"
                  valueFrom:
                    fieldRef:
                      fieldPath: status.hostIP
              volumeMounts:
                # Logtail 容器的日志目錄掛載到共享存儲卷
                - name: nginx-logs
                  mountPath: /var/log/nginx
                # 與業(yè)務(wù)容器交互的掛載點
                - mountPath: /tasksite
                  name: tasksite
          volumes:
            # 定義空的共享存儲卷用于日志存儲
            - name: nginx-logs
              emptyDir: {}
            # 定義存儲卷用于容器間通信
            - name: tasksite
              emptyDir:
                medium: Memory
    
  4. 執(zhí)行如下命令使sidecar.yaml文件配置生效。

    sidecar.yaml為文件名,請根據(jù)實際情況替換。

    kubectl apply -f sidecar.yaml

創(chuàng)建Logtail采集配置

警告

通過CRD方式創(chuàng)建的配置,在控制臺上對其修改不會同步到CRD中。因此,如需修改由CRD創(chuàng)建的配置內(nèi)容,只能修改CRD資源,不要直接在控制臺操作,避免iLogtail采集配置不一致。

日志服務(wù)控制臺

  1. 登錄日志服務(wù)控制臺。

  2. 單擊控制臺右側(cè)的快速接入數(shù)據(jù),在接入數(shù)據(jù)區(qū)域單擊Kubernetes-文件卡片。

    image

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

  4. 機(jī)器組配置頁面。

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

      • K8s場景 > ACK Daemonset

      • K8s場景 > 自建集群Daemonset

        重要

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

    2. 確認(rèn)目標(biāo)機(jī)器組已在應(yīng)用機(jī)器組列表中,然后單擊下一步。在ACK中安裝Logtail組件后,日志服務(wù)自動創(chuàng)建名為k8s-group-${your_k8s_cluster_id}的機(jī)器組,您可以直接使用該機(jī)器組。

      重要
      • 如果需要新建機(jī)器組,請單擊創(chuàng)建機(jī)器組,按照右側(cè)面板進(jìn)行創(chuàng)建。更多信息,請參見通過控制臺配置。

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

  5. 創(chuàng)建Logtail采集配置,單擊下一步創(chuàng)建Logtail采集配置,日志服務(wù)開始采集日志。

    說明

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

    全局配置

    配置項

    說明

    配置名稱

    Logtail配置名稱,在其所屬Project內(nèi)必須唯一。創(chuàng)建Logtail配置成功后,無法修改其名稱。

    日志主題類型

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

    • 機(jī)器組Topic:設(shè)置為機(jī)器組的Topic屬性,用于明確區(qū)分不同機(jī)器組產(chǎn)生的日志。

    • 文件路徑提取:設(shè)置為文件路徑正則,則需要設(shè)置自定義正則,用正則表達(dá)式從路徑里提取一部分內(nèi)容作為Topic。用于區(qū)分不同源產(chǎn)生的日志。

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

    高級參數(shù)

    其它可選的與配置全局相關(guān)的高級功能參數(shù),請參見創(chuàng)建Logtail流水線配置。

    輸入配置

    參數(shù)名稱

    說明

    Logtail部署模式

    Logtail部署模式,選擇DaemonSet。

    文件路徑類型

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

    文件路徑

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

    • 如果目標(biāo)容器節(jié)點是Windows系統(tǒng),則日志路徑必須以盤符開頭,例如C:\Program Files\Intel\**\*.Log。

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

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

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

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

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

    最大目錄監(jiān)控深度

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

    警告

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

    啟用容器元信息預(yù)覽

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

    容器過濾

    • Logtail版本

      • Logtail 1.0.34以下版本,只支持通過環(huán)境變量容器Label進(jìn)行容器過濾。

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

    • 過濾條件說明

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

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

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

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

    • K8s Pod名稱正則匹配

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

    • K8s Namespace正則匹配

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

    • K8s容器名稱正則匹配

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

    • 容器label白名單

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

      重要

      請勿設(shè)置相同的標(biāo)簽名,如果重名只生效一個。

      • 如果設(shè)置了標(biāo)簽名但不設(shè)置標(biāo)簽值,則容器Label中包含該標(biāo)簽名的容器都匹配。

      • 如果設(shè)置了標(biāo)簽名標(biāo)簽值,則容器Label中包含該標(biāo)簽名:標(biāo)簽值的容器才匹配。

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

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

    • 容器label黑名單

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

      重要

      請勿設(shè)置相同的標(biāo)簽名,如果重名只生效一個。

      • 如果設(shè)置了標(biāo)簽名但不設(shè)置標(biāo)簽值,則容器Label中包含該標(biāo)簽名的容器都被排除。

      • 如果設(shè)置了標(biāo)簽名標(biāo)簽值,則容器Label中包含該標(biāo)簽名:標(biāo)簽值的容器才會被排除。

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

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

    • 環(huán)境變量白名單

      通過環(huán)境變量白名單指定待采集的容器。

      • 如果設(shè)置了環(huán)境變量名但不設(shè)置環(huán)境變量值,則容器環(huán)境變量中包含該環(huán)境變量名的容器都匹配。

      • 如果設(shè)置了環(huán)境變量名環(huán)境變量值,則容器環(huán)境變量中包含該環(huán)境變量名和值的容器才匹配。

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

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

    • 環(huán)境變量黑名單

      通過環(huán)境變量黑名單排除不采集的容器。

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

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

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

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

    • K8s Pod標(biāo)簽白名單

      通過Kubernetes Pod標(biāo)簽白名單指定待采集的容器。

      • 如果設(shè)置了標(biāo)簽名但不設(shè)置標(biāo)簽值,則Pod標(biāo)簽中包含該標(biāo)簽名的容器都匹配。

      • 如果設(shè)置了標(biāo)簽標(biāo)簽值,則Pod標(biāo)簽中包含該標(biāo)簽名:標(biāo)簽值的容器才匹配。

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

      多個白名單之間為或關(guān)系,即只要Pod標(biāo)簽滿足任一鍵值對即可。

    • K8s Pod標(biāo)簽黑名單

      通過Kubernetes Pod標(biāo)簽黑名單排除不采集的容器。

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

      • 如果設(shè)置了標(biāo)簽標(biāo)簽值,則Pod標(biāo)簽中包含該標(biāo)簽名和標(biāo)簽值的容器才會被排除。

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

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

    日志標(biāo)簽富化

    環(huán)境變量相關(guān)tag和Pod標(biāo)簽相關(guān)tag。

    文件編碼

    日志文件的編碼格式。

    首次采集大小

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

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

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

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

    采集黑名單

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

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

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

    • 匹配黑名單過程存在計算開銷,建議黑名單條目數(shù)控制在10條內(nèi)。

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

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

    文件路徑黑名單

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

    • 選擇文件路徑黑名單,配置路徑為/home/admin/private*/*_inner.log,則表示在采集時忽略/home/admin/目錄下以private開頭的目錄內(nèi),以_inner.log結(jié)尾的文件。例如/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目錄下的文件被采集。

    允許文件多次采集

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

    高級參數(shù)

    Logtail配置的部分參數(shù)需要手動輸入,請參見創(chuàng)建Logtail流水線配置

    處理配置

    配置項

    說明

    日志樣例

    待采集日志的樣例,請務(wù)必使用實際場景的日志。日志樣例可協(xié)助您配置日志處理相關(guān)參數(shù),降低配置難度。支持添加多條樣例,總長度不超過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)

    多行模式

    • 多行日志的類型:多行日志是指每條日志分布在連續(xù)的多行中,需要從日志內(nèi)容中區(qū)分出每一條日志。

      • 自定義:通過行首正則表達(dá)式區(qū)分每一條日志。

      • 多行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)

      對于以上日志內(nèi)容,如果日志服務(wù)切分失?。?/p>

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

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

    處理模式

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

    重要

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

    • 2.0版本的Logtail:

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

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

    • 低于2.0版本的Logtail:

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

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

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

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

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

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

          image

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

          image

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

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

          image

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

    重要

    如果需要查詢?nèi)罩局械乃凶侄?,建議使用全文索引。如果只需查詢部分字段、建議使用字段索引,減少索引流量。如果需要對字段進(jìn)行分析(SELECT語句),必須創(chuàng)建字段索引。

  7. 單擊查詢?nèi)罩?/b>,系統(tǒng)將跳轉(zhuǎn)至Logstore查詢分析頁面。

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

(推薦)CRD-AliyunPipelineConfig

創(chuàng)建Logtail采集配置

警告

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

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

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

  2. 執(zhí)行如下命令創(chuàng)建一個YAML文件。

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

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

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

    • 每個iLogtail采集配置必須單獨(dú)設(shè)置一個對應(yīng)的CR,如果多個CR關(guān)聯(lián)同一個Logtail配置,后配置的CR將不會生效。

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

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

    采集指定容器內(nèi)的單行文本日志

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

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

    apiVersion: telemetry.alibabacloud.com/v1alpha1
    # 創(chuàng)建一個 ClusterAliyunPipelineConfig
    kind: ClusterAliyunPipelineConfig
    metadata:
      # 設(shè)置資源名,在當(dāng)前Kubernetes集群內(nèi)唯一。該名稱也是創(chuàng)建出的iLogtail采集配置名
      name: example-k8s-file
    spec:
      # 指定目標(biāo)project
      project:
        name: k8s-log-test
      # 創(chuàng)建用于存儲日志的 Logstore
      logstores:
        - name: k8s-file
      # 定義iLogtail采集配置
      config:
        # 定義輸入插件
        inputs:
          # 使用input_file插件采集容器內(nèi)文本日志
          - Type: input_file
            # 容器內(nèi)的文件路徑
            FilePaths:
              - /data/logs/app_1/**/test.LOG
            # 啟用容器發(fā)現(xiàn)功能。
            EnableContainerDiscovery: true
            # 添加容器信息過濾條件,多個選項之間為“且”的關(guān)系。
            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

    采集所有容器內(nèi)的多行文本日志并正則解析

    創(chuàng)建名為example-k8s-file的iLogtail采集配置,以多行文本模式采集集群內(nèi)所有容器內(nèi)的/data/logs/app_1路徑下的test.LOG文件,對采集到的數(shù)據(jù)進(jìn)行JSON解析,直接發(fā)送到名稱為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
    # 創(chuàng)建一個 ClusterAliyunPipelineConfig
    kind: ClusterAliyunPipelineConfig
    metadata:
      # 設(shè)置資源名,在當(dāng)前Kubernetes集群內(nèi)唯一。該名稱也是創(chuàng)建出的iLogtail采集配置名
      name: example-k8s-file
    spec:
      # 指定目標(biāo)project
      project:
        name: k8s-log-test
      # 創(chuàng)建用于存儲日志的 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插件采集容器內(nèi)多行文本日志
          - Type: input_file
            # 容器內(nèi)的文件路徑
            FilePaths:
              - /data/logs/app_1/**/test.LOG
            # 啟用容器發(fā)現(xiàn)功能。
            EnableContainerDiscovery: true
            # 開啟多行能力
            Multiline:
              # 選擇自定義行首正則表達(dá)式模式
              Mode: custom
              # 配置行首正則表達(dá)式
              StartPattern: \d+-\d+-\d+.*
        # 定義處理插件
        processors:
          # 使用正則解析插件解析日志
          - Type: processor_parse_regex_native
            # 源字段名
            SourceKey: content
            # 解析用的正則表達(dá)式,用捕獲組"()"捕獲待提取的字段
            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. 執(zhí)行如下命令使iLogtail采集配置生效。iLogtail采集配置生效后,Logtail開始采集各個容器上的文本日志,并發(fā)送到日志服務(wù)中。

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

    kubectl apply -f cube.yaml
    重要

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

CRD-AliyunLogConfig

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

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

  2. 執(zhí)行如下命令創(chuàng)建一個YAML文件。

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

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

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

    • 如果多個CR關(guān)聯(lián)同一個iLogtail采集配置,則刪除或修改任意一個CR均會影響到該iLogtail采集配置,導(dǎo)致其他關(guān)聯(lián)該iLogtail采集配置的CR狀態(tài)與日志服務(wù)中iLogtail采集配置的狀態(tài)不一致。

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

    采集指定容器內(nèi)的單行文本日志

    “創(chuàng)建名為example-k8s-file的iLogtail采集配置,以單行文本模式采集集群內(nèi)所有名稱開頭為app的Pod的容器內(nèi)的/data/logs/app_1路徑下的test.LOG文件,直接發(fā)送到名稱為k8s-file的Logstore,該Logstore屬于名稱為k8s-log-test的Project?!?/p>

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

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

    kubectl apply -f cube.yaml
    重要

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

查看Logtail采集配置

控制臺

  1. 登錄日志服務(wù)控制臺

  2. 在Project列表區(qū)域,單擊目標(biāo)Project。

    image

  3. 日志存儲 > 日志庫頁簽中,單擊目標(biāo)日志庫前面的>,依次選擇數(shù)據(jù)接入 > Logtail配置。

  4. 單擊目標(biāo)Logtail采集配置,查看Logtail采集配置詳情。

(推薦)CRD-AliyunPipelineConfig

查看由AliyunPipelineConfig創(chuàng)建的Logtail采集配置

執(zhí)行kubectl get clusteraliyunpipelineconfigs命令查看iLogtail采集配置。

查看由AliyunPipelineConfig創(chuàng)建的Logtail采集配置的詳細(xì)信息

您可以執(zhí)行以下命令進(jìn)行查看。其中,<config_name>AliyunPipelineConfig的名稱,請根據(jù)實際情況替換。

kubectl get clusteraliyunpipelineconfigs <config_name> -o yaml

采集指定容器內(nèi)的單行文本日志的CR為例,返回結(jié)果參考如下所示,可以根據(jù)status查看iLogtail采集配置的應(yīng)用情況:

apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
  finalizers:
    - finalizer.pipeline.alibabacloud.com
  name: example-k8s-file
# 預(yù)期的配置
spec:
  config:
    flushers:
      - Endpoint: cn-hangzhou.log.aliyuncs.com
        Logstore: k8s-file
        Region: cn-hangzhou
        TelemetryType: logs
        Type: flusher_sls
    inputs:
      - EnableContainerDiscovery: true
        FilePaths:
          - /data/logs/app_1/**/test.LOG
        Type: input_file
  logstores:
    - encryptConf: {}
      name: k8s-file
  project:
    name: k8s-log-clusterid
# CR的應(yīng)用狀態(tài)
status:
  # CR 是否應(yīng)用成功
  success: true
  # CR 當(dāng)前的狀態(tài)信息
  message: success
  # 當(dāng)前 status 的更新時間
  lastUpdateTime: '2024-06-19T09:21:34.215702958Z'
  # 上次成功應(yīng)用的配置信息,該配置信息為填充默認(rèn)值后實際生效的配置
  lastAppliedConfig:
    # 上次成功應(yīng)用的時間
    appliedTime: '2024-06-19T09:21:34.215702958Z'
    # 上次成功應(yīng)用的配置詳情
    config:
      configTags:
        sls.crd.cluster: e2e-cluster-id
        sls.crd.kind: ClusterAliyunPipelineConfig
        sls.logtail.channel: CRD
      flushers:
        - Endpoint: cn-hangzhou.log.aliyuncs.com
          Logstore: k8s-file
          Region: cn-hangzhou
          TelemetryType: logs
          Type: flusher_sls
      inputs:
        - EnableContainerDiscovery: true
          FilePaths:
            - /data/logs/app_1/**/test.LOG
          Type: input_file
      name: example-k8s-file
    logstores:
      - appendMeta: true
        autoSplit: true
        encryptConf: {}
        maxSplitShard: 64
        name: k8s-file
        shardCount: 2
        ttl: 30
    machineGroups:
      - name: k8s-group-clusterid
    project:
      description: 'k8s log project, created by alibaba cloud log controller'
      endpoint: cn-hangzhou.log.aliyuncs.com
      name: k8s-log-clusterid

CRD-AliyunLogConfig

查看由AliyunLogConfig創(chuàng)建的iLogtail采集配置

您可以執(zhí)行kubectl get aliyunlogconfigs命令進(jìn)行查看,返回結(jié)果如下圖所示。

image.png

查看由AliyunLogConfig創(chuàng)建的iLogtail采集配置的詳細(xì)信息

您可以執(zhí)行kubectl get aliyunlogconfigs <config_name> -o yaml命令進(jìn)行查看。其中,<config_name>AliyunLogConfig的名稱,請根據(jù)實際情況替換。 返回結(jié)果如下圖所示。

執(zhí)行結(jié)果中的status字段和statusCode字段表示iLogtail采集配置的狀態(tài)。

  • 如果statusCode字段的值為200,表示應(yīng)用iLogtail采集配置成功。

  • 如果statusCode字段的值為非200,表示應(yīng)用iLogtail采集配置失敗。

image.png

查詢分析已采集的日志

  1. Project列表中,單擊目標(biāo)Project,進(jìn)入對應(yīng)的Project詳情頁面。

    image

  2. 在對應(yīng)的日志庫右側(cè)的圖標(biāo)圖標(biāo),選擇查詢分析,查看Kubernetes集群輸出的日志。

    image

問題排查

當(dāng)您使用Logtail采集容器(標(biāo)準(zhǔn)容器、Kubernetes)日志遇到異常情況時,您可以參見如下內(nèi)容進(jìn)行排查。