容器计算服务 ACS(Container Compute Service)集成了阿里云日志服务SLS。可在创建ACS集群时启用日志服务,快速采集集群内的容器日志,包括容器的标准输出以及容器内的文本文件。本文介绍如何在ACS集群中通过Pod环境变量采集应用日志。
步骤一:启用日志服务组件
可在创建ACS集群时勾选使用日志服务来自动启用日志服务组件。若创建时未勾选,也可通过以下步骤为已有集群启用日志服务组件。
- 登录容器计算服务控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理。 
- 在日志与监控区域找到alibaba-log-controller。单击安装,并在安装组件对话框中单击确认。 
如已安装的alibaba-log-controller组件为旧版本,可以对组件进行升级。升级组件后,集群会重置组件参数。如已自定义alibaba-log-controller的配置和环境变量,参数将被覆盖,请重新配置。
步骤二:创建应用时配置日志服务
可在创建应用的同时配置日志服务,从而采集容器日志。目前支持通过控制台和YAML文件两种方式进行配置。
通过控制台向导创建应用并配置日志服务
- 登录容器计算服务控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。 
- 在无状态页面上方的命名空间下拉框中设置命名空间,然后单击页面右上角的使用镜像创建。 说明- 此处是以无状态应用为例,对于其他类型的工作负载(例如:有状态)配置方式相同。 
- 在应用基本信息页签,设置应用名称、副本数量和类型,单击下一步,进入容器配置页面。 说明- 以下仅介绍日志服务相关的配置。关于其他的应用配置项,请参见创建无状态工作负载Deployment。 
- 在日志配置区域,配置日志相关信息。 - 设置采集配置。 - 单击+图标创建新的采集配置,每个采集配置由日志库和容器内日志路径两项构成。 - 日志库:配置Logstore名称,用于指定所采集日志存储于该Logstore。如果该Logstore不存在,ACS将会自动在集群关联的日志服务Project下创建相应的Logstore。 说明- 新创建的Logstore中的日志默认保存时间为180天。 
- 容器内日志路径:指定希望采集的日志所在的路径,例如使用/usr/local/tomcat/logs/catalina.*.log来采集Tomcat的文本日志。 说明- 指定为stdout时,表示采集容器的标准输出和标准错误输出。 - 每一项采集配置都会被自动创建为对应Logstore的一个采集配置,默认采用极简模式(按行)进行采集。  
 
- 设置自定义Tag。 - 单击+图标创建新的自定义Tag,每一个自定义Tag都是一个键值对,会拼接到所采集到的日志中,可使用它来为容器的日志数据进行标记,例如版本号。  
 
- 当完成所有配置后,可单击右上角的下一步进入后续流程。 - 后续操作,可参见创建无状态工作负载Deployment。 
通过YAML文件创建
- 登录容器计算服务控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在无状态页面上方的命名空间下拉框中设置命名空间,然后单击页面右上角的使用YAML创建资源。 说明- 此处是以无状态应用为例,对于其他类型的工作负载(例如:有状态)配置方式相同。 
- 配置YAML文件。 - YAML文件的语法同Kubernetes语法,但是为了给容器指定采集配置,需要使用 - env来为容器增加采集配置和自定义Tag。以下是一个简单的Pod示例:- 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' 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"]- 根据需求按照以下顺序进行配置。 说明- 如有更多的日志采集需求,请参见步骤三:日志采集的高级参数设置。 - 通过环境变量来创建采集配置和自定义Tag,所有与配置相关的环境变量都采用 - aliyun_logs_作为前缀。- 创建采集配置的规则如下: - 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' 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-stdout和- log-varlog。- aliyun_logs_log-stdout:该env表示创建一个名为- log-stdout的- Logstore,日志采集路径为- 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 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为- 任意不包含'_'的名称。
 
- 如采集配置中指定了非stdout的采集路径,需要在此部分创建相应的 - volumeMounts。- 示例中采集配置添加了对/var/log/*.log的采集,因此相应地添加了/var/log的 - volumeMounts。
 
- 当YAML编写完成后,单击创建,即可将相应的配置交由ACS集群执行。 
步骤三:日志采集的高级参数设置
通过容器环境变量配置采集支持多种配置参数。可根据实际需求设置高级参数,以满足日志采集的特殊需求。
| 环境变量名 | 说明 | 示例 | 注意事项 | 
| aliyun_logs_{key} | 
 | 
 | 
 | 
| aliyun_logs_{key}_tags | 可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。 |  | 不涉及。 | 
| aliyun_logs_{key}_project | 可选。值为指定的日志服务Project。当不存在该环境变量时为安装时所选的Project。 |  | Project需与日志服务组件工作所在Region一致。 | 
| aliyun_logs_{key}_logstore | 可选。值为指定的日志服务Logstore。当不存在该环境变量时Logstore和{key}一致。 |  | 不涉及。 | 
| aliyun_logs_{key}_shard | 可选。值为创建Logstore时的shard数,取值范围为[1,10]。当不存在该环境变量时值为2。 说明  若Logstore已经存在,则该参数不生效。 |  | 不涉及。 | 
| aliyun_logs_{key}_ttl | 可选。值为指定的日志保存时间,取值范围为[1,3650]。 
 说明  若Logstore已经存在,则该参数不生效。 |  | 不涉及。 | 
| aliyun_logs_{key}_machinegroup | 可选。值为应用的机器组。当不存在该环境变量时与安装日志服务组件的默认机器组一致。关于该参数的详细使用方法,请参见下文的特殊场景二:将不同应用数据采集到不同的Project。 |  | 不涉及。 | 
| aliyun_logs_{key}_logstoremode | 可选。值为指定的日志服务Logstore的类型,不指定该参数的话,默认值为standard,取值: 说明  若Logstore已经存在,则该参数不生效。 
 | 
 | 不涉及。 | 
- 特殊场景一:将多个应用数据采集到同一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-1 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-2 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中,需进行以下操作: - 在每个Project中创建一个机器组,选择自定义标识,标识名为 - k8s-group-{cluster-id},其中- {cluster-id}为集群ID,机器组名称可以自定义配置。
- 每个应用的环境变量中配置Project、Logstore、Machinegroup信息,其中机器组名称为在上一步创建的机器组名。 - 如下示例中应用1的 - {key}为- app1-stdout,应用2的- {key}为- app2-stdout。其中如果两个应用在同一个K8s集群中,对应Machinegroup可以使用同一个Machinegroup。- 应用1设置的环境变量为: - apiVersion: v1 kind: Pod metadata: name: my-demo-1 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-2 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"]
 
步骤四:通过日志服务控制台查看日志
本例中查看通过控制台向导创建的应用日志。完成配置后,应用日志已被采集并存储到日志服务中,可在日志服务控制台查看容器日志。
- 登录日志服务控制台。 
- 在Project列表区域选择ACS集群对应的Project(默认为k8s-log-{ACS集群ID}),进入日志库列表页签。 
- 在列表中找到相应的Logstore(采集配置中指定),将鼠标悬浮在相应的Logstore名称的右侧,单击  图标,并单击查询分析。 图标,并单击查询分析。- 本例中,在日志查询页面,可以查看应用的标准输出日志和容器内文本日志,且自定义tag附加到日志字段中。 
更多信息
- 通过日志服务采集Kubernetes容器日志,可在日志服务控制台查看容器计算服务ACS的全部日志信息。 
- 关于如何进行异常排查,请参见采集日志失败的排查思路。