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

ACK One注册集群集成了阿里云日志服务SLS。您可以快速采集ACS Pod的容器日志,包括容器的标准输出以及容器内的文本文件。本文介绍如何在ACS Pod中通过Pod环境变量采集应用日志。

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

YAML模板的语法同Kubernetes语法,但是为了给容器指定采集配置,需要使用env来为容器增加采集配置自定义Tag。以下是一个简单的Pod示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-demo
  labels:
    alibabacloud.com/acs: "true" 
    alibabacloud.com/compute-class: general-purpose 
    alibabacloud.com/compute-qos: default
spec:
  containers:
  - name: my-demo-app
    image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
    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
    command: ["sh", "-c"]
    args: ["echo 'Starting my demo app'; sleep 3600"]

根据您的需求按照以下顺序进行配置。

说明

如果您有更多的日志采集需求,请参见步骤二:日志采集的高级参数设置

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

    创建采集配置的规则如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-demo  
      labels:
        alibabacloud.com/acs: "true" 
        alibabacloud.com/compute-class: general-purpose 
        alibabacloud.com/compute-qos: default
    spec:
      containers:
      - name: my-demo-app
        image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
        env:
        - name: aliyun_logs_log-stdout
          value: stdout
        - name: aliyun_logs_log-varlog
          value: /var/log/*.log    
        command: ["sh", "-c"]
        args: ["echo 'Starting my demo app'; sleep 3600"]                    

    示例中创建了两个采集配置,格式为aliyun_logs_{key},对应的{key}分别为log-stdoutlog-varlog

    • aliyun_logs_log-stdout:该env表示创建一个名为log-stdoutLogstore,日志采集路径为stdout的配置,对应的日志服务采集配置名称也是log-stdout,目的是将容器的标准输出采集到log-stdout这个Logstore中。

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

    创建自定义Tag的规则如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-demo
      labels:
        alibabacloud.com/acs: "true" 
        alibabacloud.com/compute-class: general-purpose 
        alibabacloud.com/compute-qos: default
    spec:
      containers:
      - name: my-demo-app
        image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
        env:
        - name: aliyun_logs_mytag1_tags
          value: tag1=v1           
        command: ["sh", "-c"]
        args: ["echo 'Starting my demo app'; sleep 3600"]            

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

  • {key}表示日志服务组件采集配置的名称,需保持在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需与您的日志服务组件工作所在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

可选。值为应用的机器组。当不存在该环境变量时与安装日志服务组件的默认机器组一致。关于该参数的详细使用方法,请参见下文的特殊场景二:将不同应用数据采集到不同的Project

- 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 

不涉及。

特殊场景一:将多个应用数据采集到同一Logstore

如果您需要将多个应用数据采集到同一Logstore,可以设置 aliyun_logs_{key}_logstore参数,例如以下配置将2个应用的stdout采集到stdout-logstore中。

示例中应用1{key}app1-stdout,应用2{key}app2-stdout

应用1设置的环境变量为:

apiVersion: v1
kind: Pod
metadata:
  name: my-demo
  labels:
    alibabacloud.com/acs: "true" 
    alibabacloud.com/compute-class: general-purpose 
    alibabacloud.com/compute-qos: default
spec:
  containers:
  - name: my-demo-app
    image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
    env:    # 配置环境变量
    - name: aliyun_logs_app1-stdout
      value: stdout
    - name: aliyun_logs_app1-stdout_logstore
      value: stdout-logstore
    command: ["sh", "-c"]
    args: ["echo 'Starting my demo app'; sleep 3600"]

应用2设置的环境变量为:

apiVersion: v1
kind: Pod
metadata:
  name: my-demo
  labels:
    alibabacloud.com/acs: "true" 
    alibabacloud.com/compute-class: general-purpose 
    alibabacloud.com/compute-qos: default
spec:
  containers:
  - name: my-demo-app
    image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
    env:	# 配置环境变量
    - name: aliyun_logs_app2-stdout
      value: stdout
    - name: aliyun_logs_app2-stdout_logstore
      value: stdout-logstore
    command: ["sh", "-c"]
    args: ["echo 'Starting my demo app'; sleep 3600"]

特殊场景二:将不同应用数据采集到不同的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。

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-demo
      labels:
        alibabacloud.com/acs: "true" 
        alibabacloud.com/compute-class: general-purpose 
        alibabacloud.com/compute-qos: default
    spec:
      containers:
      - name: my-demo-app
        image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
        env:	# 配置环境变量
        - 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
        command: ["sh", "-c"]
        args: ["echo 'Starting my demo app'; sleep 3600"]

    应用2设置的环境变量为:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-demo
      labels:
        alibabacloud.com/acs: "true" 
        alibabacloud.com/compute-class: general-purpose 
        alibabacloud.com/compute-qos: default
    spec:
      containers:
      - name: my-demo-app
        image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
        env:	# 应用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
        command: ["sh", "-c"]
        args: ["echo 'Starting my demo app'; sleep 3600"]

步骤三:通过日志服务控制台查看日志

本例中查看通过控制台向导创建的应用日志。完成配置后,应用日志已被采集并存储到日志服务中,您可以在日志服务控制台查看容器日志。

  1. 登录日志服务控制台

  2. Project列表区域选择ACS集群对应的Project(默认为k8s-log-{ACS集群ID}),进入日志库列表页签。

  3. 在列表中找到相应的Logstore(采集配置中指定),将鼠标悬浮在相应的Logstore名称的右侧,单击button图标,并单击查询分析

    本例中,在日志查询页面,可以查看应用的标准输出日志和容器内文本日志,且自定义tag附加到日志字段中。