全部产品
Search
文档中心

日志服务:通过DaemonSet-CRD方式采集容器日志

更新时间:Jan 19, 2024

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

前提条件

  • 已安装Logtail组件。具体操作,请参见安装Logtail组件(阿里云Kubernetes集群)
  • 目标容器持续产生日志。
    重要 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信息。

实现原理

image

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方式采集。具体操作,请参见通过Sidecar-CRD方式采集容器文本日志通过Sidecar-控制台方式采集容器文本日志

  • 标准输出采集限制

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

  • 通用限制

    Logtail支持Docker和Containerd两种容器引擎的数据采集,访问路径说明如下:

    • Docker:Logtail通过/run/docker.sock访问Docker,请确保该路径存在且具备访问权限。

    • Containerd:Logtail通过/run/containerd/containerd.sock访问Containerd,请确保该路径存在且具备访问权限。

创建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参数。inputDetail参数中包括日志过滤、写入模式、脱敏、日志主题等配置项。详细的参数说明,请参见Logtail配置

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

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

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

    kubectl apply -f cube.yaml

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

    重要

    采集到日志后,您需要先创建索引,才能在Logstore中查询和分析日志。具体操作,请参见创建索引

查看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-控制台方式采集容器标准输出

极简模式采集

  • 说明

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

  • 配置示例

    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"

极简模式采集+正则模式处理

  • 说明

    通过极简模式采集容器中Grafana的访问日志,并使用正则模式将其解析为结构化数据。其中,Grafana容器的环境变量为GF_INSTALL_PLUGINS=grafana-piechart-....,您可以登录容器所在的宿主机进行查看。具体操作,请参见获取容器环境变量

  • 日志样例

    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=
  • 配置示例

    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:
              -
                # 使用processor_regex插件(正则模式)解析所采集到的标准输出。
                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
  • 解析后的日志采集到的日志数据

通过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: simple-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.*)$"

通过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: simple-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-控制台方式采集容器文本日志

极简模式采集

  • 说明

    通过极简模式采集环境变量中包含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: ""

完整正则模式采集

  • 说明

    某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
  • 配置示例

    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: ""
  • 解析后的日志正则模式

分隔符模式

  • 说明

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

  • 配置示例

    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: ''

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"}
  • 配置示例

    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: ""

通过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)日志遇到异常情况时,您可以参见如下内容进行排查。

如何排查容器日志采集异常