在容器中以DaemonSet模式安装Logtail后,可通过CRD方式创建Logtail采集配置采集容器日志。

前提条件

已安装Logtail组件。更多信息,请参见安装Logtail组件(Kubernetes集群)

功能特点

Logtail支持将容器产生的文本日志、标准输出和容器相关的元数据信息一起上传到日志服务。Logtail具备以下功能特点。
  • 采集文本日志时,只需配置容器内的日志文件路径,无需关心该路径到宿主机的映射。
  • 支持采集标准输出信息(stdout)和标准出错信息(stderr)。
  • 支持通过容器Label白名单指定待采集的容器。
  • 支持通过容器Label黑名单排除不要采集的容器。
  • 支持通过环境变量白名单指定待采集的容器。
  • 支持通过环境变量黑名单排除不要采集的容器。
  • 支持采集多行日志(例如Java Stack日志)。
  • 支持上报容器日志时自动关联Meta信息(例如容器名、镜像、Pod、Namespace、环境变量等)。
  • 当容器运行于Kubernetes时,Logtail还具有以下功能。
    • 支持通过Kubernetes Namespace名称、Pod名称、容器名称指定待采集的容器。
    • 支持通过Kubernetes Label白名单指定待采集的容器。
    • 支持通过Kubernetes Label黑名单排除不要采集的容器。
    • 支持上报容器日志时自动关联Kubernetes Label信息。

实现原理

kub-CRD实现原理
CRD的内部工作流程如下:
  1. 使用kubectl或其他工具应用AliyunLogConfig CRD。
  2. alibaba-log-controller监听到CRD配置更新。
  3. alibaba-log-controller根据CRD配置中的内容以及日志服务中Logtail采集配置的状态,自动向日志服务提交创建Logstore、创建Logtail采集配置以及应用机器组的请求。
  4. Logtail定期请求Logtail采集配置所在服务器,获取新的或已更新的Logtail采集配置并进行热加载。
  5. Logtail根据Logtail采集配置采集各个容器上的标准输出或文本日志。
  6. Logtail将采集到的容器日志发送给日志服务。

使用限制

  • 文本日志采集限制
    • 采集停止策略:当容器被停止后,Logtail监听到容器die的事件后会停止该容器日志的采集。如果此时采集出现延迟,则可能丢失停止前的部分日志。
    • 不支持采集软链接:目前Logtail无法访问业务容器的软链接,请按真实路径配置采集目录。
    • 如果业务容器的数据目录是通过数据卷(Volume)挂载的,则不支持采集它的父目录,需设置采集目录为完整的数据目录。

      例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log将采集不到该目录下的日志,需设置采集目录为/var/log/service

    • Kubernetes默认将宿主机根目录挂载到Logtail容器的/logtail_host目录。如果您要采集宿主机文本日志,则配置日志文件路径时,需加上/logtail_host前缀。

      例如需要采集宿主机上/home/logs/app_log/目录下的日志,则设置日志路径为/logtail_host/home/logs/app_log/

    • Docker存储驱动限制:目前只支持overlay、overlay2,其他存储驱动需将日志所在目录通过数据卷挂载为临时目录。

      如果日志目录是以PVC方式挂载到NAS,则不支持使用Daemonset方式采集日志,建议使用Sidecar方式采集。

  • 标准输出采集限制

    Docker容器引擎限制:目前标准输出采集仅支持JSON类型的日志驱动。

  • 通用限制
    Logtail支持Docker和Containerd两种容器引擎的数据采集,访问路径说明如下:
    • Docker:Logtail通过/run/docker.sock访问Docker,请确保该路径存在且具备访问权限。
    • Containerd:Logtail通过/run/containerd/containerd.sock访问Containerd,请确保该路径存在且具备访问权限。

操作视频

本视频介绍通过CRD方式创建Logtail采集配置,从而采集容器日志的操作步骤。

创建Logtail采集配置

您只需要定义AliyunLogConfig CRD即可创建Logtail采集配置。创建完成后,系统自动应用该Logtail采集配置。如果您要删除Logtail采集配置只需删除对应的CRD资源即可。

  1. 登录Kubernetes集群。
  2. 执行如下命令创建一个YAML文件。

    cube.yaml为文件名,请根据实际情况替换。

    vim cube.yaml
  3. 在YAML文件输入如下脚本,并根据实际情况设置其中的参数。
    重要
    • 请确保configName字段值在日志服务Project中唯一存在。
    • 如果多个CRD关联同一个Logtail采集配置,则删除或修改任意一个CRD均会影响到该Logtail采集配置,导致其他关联该Logtail采集配置的CRD状态与日志服务中Logtail采集配置的状态不一致。
    apiVersion: log.alibabacloud.com/v1alpha1      # 使用默认值,无需修改。
    kind: AliyunLogConfig                          # 使用默认值,无需修改。
    metadata:
      name: simple-stdout-example                  # 设置资源名,在当前Kubernetes集群内唯一。
    spec:
      project: k8s-my-project                      # [可选]设置Project名称。默认为安装Logtail组件时设置的Project。
      logstore: k8s-stdout                         # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
      logstoreMode: standard                       # [可选]设置Logstore类型,该参数值仅在新建Logstore时生效。
      shardCount: 2                                # [可选]设置Shard数量。默认值为2,取值范围1~10。
      lifeCycle: 90                                # [可选]设置Logstore中数据的存储时间,该参数值仅在新建Logstore时生效。默认值为90,取值范围为1~3650。其中,3650天为永久存储。
      logtailConfig:                               # 设置Logtail采集配置。
        inputType: plugin                          # 设置采集的数据源类型。file表示采集文本日志或plugin表示采集标准输出。
        configName: simple-stdout-example          # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。
        inputDetail:                               # 设置Logtail采集配置的详细信息,具体配置请参见本文下方的示例。
          ...
    参数 数据类型 是否必填 说明
    project string Project名称。默认为安装Logtail组件时设置的Project。
    logstore string Logstore名称。

    如果您所指定的Logstore不存在,日志服务会自动创建。

    logstoreMode string Logstore类型。更多信息,请参见管理Logstore。可选值:
    • query:查询型Logstore。
    • standard:标准型Logstore。
    重要
    • 该参数值仅在新建Logstore时生效,即您只能在创建Logstore时,指定Logstore类型。如果您在logstore参数中指定的Logstore已存在,则修改该参数值,不会生效。
    • 针对alibaba-log-controller 0.3.3及以上版本,该设置才会生效。
    shardCount int Shard数量。默认值为2,取值范围为1~10。
    lifeCycle int Logstore中数据的存储时间。默认值为90,取值范围为1~3650。其中,3650天为永久存储。
    重要 该参数值仅在新建Logstore时生效,即您只能在创建Logstore时,指定数据的存储时间。如果您在logstore参数中指定的Logstore已存在,则修改该参数值,不会生效。
    machineGroups array 机器组。默认为安装Logtail组件时,日志服务自动创建名为k8s-group-${your_k8s_cluster_id}的机器组。
    logtailConfig object Logtail采集配置的详细定义,一般只需要定义其中的inputType参数、configName参数和inputDetail参数。详细参数说明,请参见Logtail配置

    logtailConfig的配置示例请参见Logtail采集配置示例(标准输出)Logtail采集配置示例(文本日志)

  4. 执行如下命令使Logtail采集配置生效。

    cube.yaml为文件名,请根据实际情况替换。

    kubectl apply -f cube.yaml
    Logtail采集配置生效后,Logtail开始采集各个容器上的标准输出或文本日志,并发送到日志服务中。

查看Logtail采集配置

您可以通过CRD方式或控制台方式查看Logtail采集配置,其中控制台方式请参见查看Logtail采集配置
重要 如果您使用的是CRD方式,则您在控制台上对Logtail采集配置的修改不会同步到CRD中,但您在CRD中对Logtail采集配置的修改会同步到控制台。

查看当前Kubernetes集群中所有的Logtail采集配置

您可以执行kubectl get aliyunlogconfigs命令进行查看,返回结果下图所示。查看Logtail采集配置

查看Logtail采集配置的详细信息和状态

您可以执行kubectl get aliyunlogconfigs config_name -o yaml命令进行查看。其中,config_name为Logtail采集配置的名称,请根据实际情况替换。 返回结果如下图所示。

执行结果中的status字段和statusCode字段表示Logtail采集配置的状态。
  • 如果statusCode字段的值为200,表示应用Logtail采集配置成功。
  • 如果statusCode字段的值为非200,表示应用Logtail采集配置失败。
查看logtail采集配置

Logtail采集配置示例(标准输出)

采集容器标准输出时,需将inputType设置为plugin,并将具体信息填写到inputDetail下的plugin字段。具体的参数及其说明请参见通过DaemonSet-控制台方式采集容器标准输出

示例1:通过极简模式采集容器标准输出

通过极简模式采集除环境变量为COLLECT_STDOUT_FLAG=false之外的所有容器的标准输出(stdout和stderr)。其中,您可以登录容器所在的宿主机查看容器的环境变量。具体操作,请参见获取容器环境变量。CRD配置示例如下所示。

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
              # 设置环境变量黑名单,采集除环境变量为COLLECT_STDOUT_FLAG=false之外的所有容器的标准输出。
              ExcludeEnv:
                COLLECT_STDOUT_FLAG: "false"

示例2:通过极简模式采集容器标准输出,并使用正则模式处理容器标准输出

您可以登录容器所在的宿主机查看容器的环境变量。具体操作,请参见获取容器环境变量

通过极简模式采集容器中Grafana的访问日志,并使用正则模式将其解析为结构化数据。其中,Grafana容器的环境变量为GF_INSTALL_PLUGINS=grafana-piechart-....,您可以登录容器所在的宿主机进行查看。具体操作,请参见获取容器环境变量
  • CRD配置
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 设置资源名,在当前Kubernetes集群内唯一。
      name: regex-stdout-example
    spec:
      # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
      logstore: k8s-stdout-regex
      # 设置Logtail采集配置。
      logtailConfig:
        # 设置采集的数据源类型。采集标准输出时,需设置为plugin。
        inputType: plugin
        # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。
        configName: regex-stdout-example
        inputDetail:
          plugin:
            inputs:
              -
                # input type
                type: service_docker_stdout
                detail:
                  # 指定只采集标准输出stdout,不采集标准错误stderr。
                  Stdout: true
                  Stderr: false
                  # 设置环境变量白名单,只采集容器环境变量中EnvKey为GF_INSTALL_PLUGINS的容器的标准输出。
                  IncludeEnv:
                    GF_INSTALL_PLUGINS: ''
            processors:
              -
                # 指定正则模式解析所采集到的标准输出。
                type: processor_regex
                detail:
                  # 设置原始字段名。采集到的容器标准输出默认保存在content字段中。
                  SourceKey: content
                  # 设置正则表达式,用于提取日志内容。
                  Regex: 't=(\d+-\d+-\w+:\d+:\d+\+\d+) lvl=(\w+) msg="([^"]+)" logger=(\w+) userId=(\w+) orgId=(\w+) uname=(\S*) method=(\w+) path=(\S+) status=(\d+) remote_addr=(\S+) time_ms=(\d+) size=(\d+) referer=(\S*).*'
                  # 设置提取的字段列表。
                  Keys: ['time', 'level', 'message', 'logger', 'userId', 'orgId', 'uname', 'method', 'path', 'status', 'remote_addr', 'time_ms', 'size', 'referer']
                  # 保留原始字段。
                  KeepSource: true
                  # 出现无匹配的原始字段时会报错。
                  NoKeyError: true
                  # 正则表达式与原始字段的值不匹配时会报错。
                  NoMatchError: true
  • 原始日志
    t=2018-03-09T07:14:03+0000 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=GET path=/ status=302 remote_addr=172.16.64.154 time_ms=0 size=29 referer=
  • 解析后的日志采集到的日志数据

示例3:通过Kubernetes Label过滤容器,采集对应容器的标准输出

采集Kubernetes Label中Key为job-name,Value以nginx-log-demo开头的所有容器的标准输出。
说明 Logtail 1.0.34及以上版本支持通过K8s Label过滤容器。
  1. 获取Kubernetes Label。K8s资源
  2. 创建Logtail采集配置。
    配置示例如下所示。参数说明,请参见通过DaemonSet-控制台方式采集容器标准输出
    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: k8s-stdout-example
        inputDetail:
          plugin:
            inputs:
              -
                # input type
                type: service_docker_stdout
                detail:
                  # 指定采集stdout和stderr。
                  Stdout: true
                  Stderr: true
                  # 设置K8s Label白名单,采集Kubernetes Label中Key为job-name,Value以nginx-log-demo开头的所有容器的标准输出。
                  IncludeK8sLabel:
                    job-name: "^(nginx-log-demo.*)$"

示例4:通过Kubernetes Namespace名称、Pod名称和容器名称过滤容器,采集对应容器的标准输出

采集default命名空间下以nginx-log-demo开头的Pod中的nginx-log-demo-0容器的标准输出。
说明 Logtail 1.0.34及以上版本支持通过Kubernetes Namespace名称、Pod名称或容器名称过滤容器。
  1. 获取Kubernetes层级的信息。
    1. 获取Pod信息。k8s资源
    2. 获取Namespace等信息。K8s资源
  2. 创建Logtail采集配置。
    配置示例如下所示。参数说明,请参见通过DaemonSet-控制台方式采集容器标准输出
    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: k8s-stdout-example
        inputDetail:
          plugin:
            inputs:
              -
                # input type
                type: service_docker_stdout
                detail:
                  # 指定采集stdout和stderr。
                  Stdout: true
                  Stderr: true
                  K8sNamespaceRegex: ^(default)$
                  K8sPodRegex: '^(nginx-log-demo.*)$'
                  K8sContainerRegex: ^(nginx-log-demo-0)$
                            

Logtail采集配置示例(文本日志)

采集容器文本日志时,需将inputType设置为file,并将具体信息填写到inputDetail内,具体字段及说明请参见通过DaemonSet-控制台方式采集容器文本日志

示例1:通过极简模式采集容器文本日志

通过极简模式采集环境变量中包含EnvKey为ALIYUN_LOGTAIL_USER_DEFINED_ID的容器的文本日志,日志文件路径为/data/logs/app_1/simple.LOG

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  # 设置资源名,在当前Kubernetes集群内唯一。
  name: simple-file-example
spec:
   # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
  logstore: k8s-file
  # 设置Logtail采集配置。
  logtailConfig:
    # 设置采集的数据源类型。采集文本日志时,需设置为file。
    inputType: file
    # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。
    configName: simple-file-example
    inputDetail:
      # 指定通过极简模式采集文本日志。
      logType: common_reg_log
      # 设置日志文件所在路径。
      logPath: /data/logs/app_1
      # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。
      filePattern: simple.LOG
      # 采集容器的文本日志时,需设置dockerFile为true。
      dockerFile: true
      # 设置环境变量白名单。只采集环境变量中包含EnvKey为ALIYUN_LOGTAIL_USER_DEFINED_ID的容器的文本日志。
      dockerIncludeEnv:
        ALIYUN_LOGTAIL_USER_DEFINED_ID: ""

示例2:通过完整正则模式采集容器文本日志

某Java程序日志为多行日志,日志中包含错误堆栈信息。您可以通过完整正则模式进行采集,并在Logtail采集配置中指定置行首正则表达式。

  • 日志样例
    [2018-05-11T20:10:16,000] [INFO] [SessionTracker] [SessionTrackerImpl.java:148] Expiring sessions
    java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x8F",...' for column 'data' at row 1
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
    at org.springframework.jdbc.support.AbstractFallbackSQLException
  • CRD配置
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 设置资源名,在当前Kubernetes集群内唯一。
      name: regex-file-example
    spec:
      # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
      logstore: k8s-file
      logtailConfig:
        # 设置采集的数据源类型。采集文本日志时,需设置为file。
        inputType: file
        # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。
        configName: regex-file-example
        inputDetail:
          # 指定通过完整正则模式采集文本日志。
          logType: common_reg_log
          # 设置日志文件的路径。
          logPath: /app/logs
          # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。
          filePattern: error.LOG
          # 设置用于匹配日志行首的行首正则表达式。
          logBeginRegex: '\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*'
          # 设置正则表达式,用于提取日志内容。
          regex: '\[([^]]+)]\s\[(\w+)]\s\[(\w+)]\s\[([^:]+):(\d+)]\s(.*)'
          # 设置提取的字段列表。
          key : ["time", "level", "method", "file", "line", "message"]
          # 使用完整正则模式采集日志时,默认从日志的time字段中提取时间。如果无需提取时间,可不设置该字段。如果您设置了timeFormat字段,则需配置adjustTimezone字段和logTimezone字段。
          timeFormat: '%Y-%m-%dT%H:%M:%S'
          # 由于Logtail默认工作在零时区,因此需通过如下配置,强制设置时区。
          adjustTimezone: true
          # 设置时区偏移量。日志时间为东八区,如果是其他时区,请调整该值。
          logTimezone: "GMT+08:00"
          # 解析失败时,上传原始日志。
          discardUnmatch: false
          # 采集容器的文本日志时,需设置dockerFile为true。
          dockerFile: true
          # 设置环境变量白名单。只采集环境变量中包含EnvKey为ALIYUN_LOGTAIL_USER_DEFINED_ID的容器的文本日志。
          dockerIncludeEnv:
            ALIYUN_LOGTAIL_USER_DEFINED_ID: ""
  • 采集到的日志样例正则模式

示例3:通过分隔符模式采集容器文本日志

如果您要采集的容器文本日志中有明确的分隔符,您可以使用通过分隔符模式采集容器文本日志。分隔符日志以换行符为边界,每一行都是一条日志。分隔符日志使用分隔符将一条日志分割成多个字段。

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  # 设置资源名,在当前Kubernetes集群内唯一。
  name: delimiter-file-example
spec:
  # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
  logstore: k8s-file
  logtailConfig:
    # 设置采集的数据源类型。采集文本日志时,需设置为file。
    inputType: file
    configName: delimiter-file-example
    # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。
    inputDetail:
      # 指定通过分隔符模式采集日志。
      logType: delimiter_log
      # 设置日志文件的路径。
      logPath: /usr/local/ilogtail
      # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。
      filePattern: delimiter_log.LOG
      # 设置分隔符。
      separator: '|&|'
      # 设置提取的字段列表。
      key : ['time', 'level', 'method', 'file', 'line', 'message']
      # 设置时间字段。
      timeKey: 'time'
      # 使用分隔符模式采集日志时,默认从日志的time字段中提取时间。如果无需提取时间,可不设置该字段。如果您设置了timeFormat字段,则需配置adjustTimezone字段和logTimezone字段。
      timeFormat: '%Y-%m-%dT%H:%M:%S'
      # 由于Logtail默认工作在零时区,因此需通过如下配置,强制设置时区。
      adjustTimezone: true
      # 设置时区偏移量。日志时间为东八区,如果是其他时区,请调整该值。
      logTimezone: "GMT+08:00"
      # 解析失败时,上传原始日志。
      discardUnmatch: false
      # 采集容器的文本日志时,需设置dockerFile为true。
      dockerFile: true
      # 设置环境变量白名单。只采集环境变量中包含EnvKey为ALIYUN_LOGTAIL_USER_DEFINED_ID的容器的文本日志。
      dockerIncludeEnv:
        ALIYUN_LOGTAIL_USER_DEFINED_ID: ''

示例4:通过JSON模式采集容器文本日志

如果您要采集的容器文本日志为Object类型的JSON日志,则您可以使用JSON模式进行采集。

  • 原始日志
    {"url": "POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek********&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1", "ip": "10.200.98.220", "user-agent": "aliyun-sdk-java", "request": {"status": "200", "latency": "18204"}, "time": "05/Jan/2020:13:30:28"}
  • CRD配置
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 设置资源名,在当前Kubernetes集群内唯一。
      name: json-file-example
    spec:
      # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
      logstore: k8s-file
      logtailConfig:
        # 设置采集的数据源类型。采集文本日志时,需设置为file。
        inputType: file
        # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。
        configName: json-file-example
        inputDetail:
          # 指定通过JSON模式采集日志。
          logType: json_log
          # 设置日志文件的路径。
          logPath: /usr/local/ilogtail
          # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。
          filePattern: json_log.LOG
          # 设置时间字段,如果无指定需求,则设置为timeKey: ''。
          timeKey: 'time'
          # 设置时间格式。如果无指定需求,则设置为timeFormat: ''。
          timeFormat: '%Y-%m-%dT%H:%M:%S'
          # 采集容器的文本日志时,需设置dockerFile为true。
          dockerFile: true
          # 设置环境变量白名单。只采集环境变量中包含EnvKey为ALIYUN_LOGTAIL_USER_DEFINED_ID的容器的文本日志。
          dockerIncludeEnv:
            ALIYUN_LOGTAIL_USER_DEFINED_ID: ""

示例5:通过Kubernetes信息过滤容器,采集对应容器的文本日志

采集指定容器中/data/logs/app_1目录下simple.LOG文件中的日志。过滤容器的条件如下所示:
  • default命名空间。
  • 名称以nginx-log-demo开头的Pod。
  • 名称为nginx-log-demo-0的容器。
  • Kubernetes Label中Key为job-name,Value以nginx-log-demo为开头。
说明 Logtail 1.0.34及以上版本支持通过Kubernetes Namespace名称、Pod名称、容器名称或Kubernetes Label过滤容器。
  1. 获取Kubernetes层级的信息。
    1. 获取Pod信息。k8s资源
    2. 获取Namespace等信息。K8s资源
    3. 获取Kubernetes Label。K8s资源
  2. 创建Logtail采集配置

    配置示例如下所示。更多信息,请参见通过DaemonSet-控制台方式采集容器标准输出

    说明 IncludeK8sLabelExcludeK8sLabelK8sNamespaceRegexK8sPodRegexK8sContainerRegexExternalEnvTagExternalK8sLabelTag等Kubernetes信息相关的参数,必须配置在advanced参数的k8s参数下。参数说明,请参见通过DaemonSet-控制台方式采集容器标准输出
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # 设置资源名,在当前Kubernetes集群内唯一。
      name: simple-file-example
    spec:
       # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。
      logstore: k8s-file
      # 设置Logtail采集配置。
      logtailConfig:
        # 设置采集的数据源类型。采集文本日志时,需设置为file。
        inputType: file
        # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。
        configName: simple-file-example
        inputDetail:
          # 指定通过极简模式采集文本日志。
          logType: common_reg_log
          # 设置日志文件所在路径。
          logPath: /data/logs/app_1
          # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。
          filePattern: simple.LOG
          # 采集容器的文本日志时,需设置dockerFile为true。
          dockerFile: true
          #设置容器过滤条件。
          advanced:
            k8s:
              K8sNamespaceRegex: ^(default)$
              K8sPodRegex: '^(nginx-log-demo.*)$'
              K8sContainerRegex: ^(nginx-log-demo-0)$
              IncludeK8sLabel:
                job-name: "^(nginx-log-demo.*)$"

问题排查

当您使用Logtail采集容器(标准容器、Kubernetes)日志遇到异常情况时,您可以参见如下内容进行排查。