通过Pod环境变量采集应用日志

阿里云日志服务SLS(Log Service)是针对日志数据的一站式服务,让您无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能。ACK Serverless集群提供了日志服务托管功能。您可以在ACK Serverless集群中使用SLS环境变量,将业务容器的标准输出和日志文件收集到SLS。

重要
  • 推荐您优先使用SLS CRD的方式采集日志。具体操作,请参见通过CRD采集应用日志

  • 请勿同时使用SLS CRD和环境变量方式,这可能会导致日志采集失败。

步骤一:创建应用并配置日志服务

您可以通过镜像或YAML模板创建应用,并同时配置日志服务,以用来采集容器日志。关于日志服务SLS详细信息请参见什么是日志服务

使用镜像创建

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 无状态页面上方的命名空间下拉列表中选择目标命名空间,然后在页面上方单击使用镜像创建

    1. 应用基本信息页签,设置应用名称副本数量类型,然后单击下一步

    2. 容器配置页签的日志服务区域,进行相关配置。

      说明

      本文仅介绍日志服务相关的配置,其他的应用配置,请参见创建无状态工作负载Deployment

      配置示例如下:采集配置

      配置项

      说明

      采集配置

      单击采集配置,配置日志库容器内日志路径

      • 日志库:配置Logstore名称,名称中只能包含小写字母、数字和短划线(-)。

        您可以使用它来指定所采集日志存储于该Logstore,如果该Logstore不存在的话,ACK Serverless会自动为您在集群关联的日志服务Project下创建相应的Logstore。

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

        说明

        如果指定为stdout,表示采集容器的标准输出和标准错误输出。

      每一项采集配置都会被自动创建为对应Logstore的一个采集配置,默认采用极简模式(按行)进行采集,如果您需要更丰富的采集方式,可以登录日志服务控制台,进入相应的Project(默认是k8s-log前缀)和Logstore对配置进行修改。

      自定义Tag

      单击自定义Tag,配置Tag名称Tag

      每一个自定义Tag都是一个键值对,会拼接到所采集到的日志中,您可以使用它来为容器的日志数据进行标记,例如版本号。

    3. 配置完成后,在页面右侧单击下一步,后续操作,请参见创建无状态工作负载Deployment

使用YAML创建

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 无状态页面上方的命名空间下拉列表中选择目标命名空间,然后在页面上方单击使用YAML创建资源

  4. 创建页面,选择示例模板,并使用YAML配置相应的模板,然后单击创建

    YAML模板的语法同Kubernetes语法。但为了给容器指定采集配置,需要使用env来为容器增加采集配置和自定义Tag,并根据采集配置,创建对应的volumeMountsvolumes。Pod YAML示例如下:

    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'
        args:
        - -c
        - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /var/log/test.log; sleep 1;done
        command:
        - /bin/sh
        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
      volumes:
      - name: volumn-sls-mydemo
        emptyDir: {}

    按需在Pod YAML示例中增加以下配置示例:

    说明

    若您有更多的日志采集需求,请参见步骤二:配置环境变量的高级参数

    1. 通过环境变量创建采集配置和自定义Tag,所有与配置相关的环境变量都采用aliyun_logs_作为前缀。

      1. 创建采集配置的规则:

        - 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-stdoutLogstore中。

        • aliyun_logs_log-varlog:该env表示创建一个名称为log-varlogLogstore,日志采集路径为/var/log/*.log的配置,对应的日志服务采集配置名称也是log-varlog,目的是将容器的/var/log/*.log文件内容采集到log-varlogLogstore中。

      2. 创建自定义Tag规则:

        - name: aliyun_logs_mytag1_tags
          value: tag1=v1

        配置Tag后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。其中mytag1只能包含小写字母、数字和短划线(-)的名称。

    2. 如果您的采集配置中指定了非stdout的采集路径,需要在此部分创建相应的volumeMounts。示例中采集配置添加了对/var/log/*.log的采集,因此相应地添加了/var/logvolumeMounts

步骤二:配置环境变量的高级参数

通过容器环境变量配置采集支持多种配置参数。您可以根据实际需求设置高级参数,以满足日志采集的特殊需求。

重要

通过容器环境变量配置采集日志的方式不适用于边缘场景。

字段

说明

示例

注意事项

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
  • 默认采集方式为极简模式。如需解析日志内容,建议使用日志服务控制台,或者CRD进行配置。

  • {key}表示日志服务中Logtail采集配置的名称,需保持在K8s集群内唯一。

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的默认机器组一致。关于该参数的详细使用方法,请参见下文的采集阿里云ACK集群文本日志(DaemonSet方式部署Logtail)

- 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

步骤三:查看日志

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 日志中心

  3. 日志中心页面,单击应用日志页签,按需选择日志库,查看应用容器的相关日志。