阿里云日志服务SLS(Log Service)是针对日志数据的一站式服务,让您无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能。ACK Serverless集群提供了日志服务托管功能。您可以在ACK Serverless集群中使用SLS环境变量,将业务容器的标准输出和日志文件收集到SLS。
推荐您优先使用SLS CRD的方式采集日志。具体操作,请参见通过CRD采集应用日志。
请勿同时使用SLS CRD和环境变量方式,这可能会导致日志采集失败。
步骤一:创建应用并配置日志服务
您可以在创建应用的同时配置日志服务,从而对容器的日志进行采集。您可以通过镜像和YAML模板两种方式创建应用。阿里云日志服务SLS的详细信息,请参见什么是日志服务。
使用镜像创建
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面上方的命名空间下拉列表中选择目标命名空间,然后在页面右上角单击使用镜像创建。
在应用基本信息页签,设置应用名称、副本数量和类型,然后单击下一步。
在容器配置页签的日志服务区域,进行相关配置。
说明本文仅介绍日志服务相关的配置,其他的应用配置,请参见创建无状态工作负载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都是一个键值对,会拼接到所采集到的日志中,您可以使用它来为容器的日志数据进行标记,例如版本号。
配置完成后,在页面右侧单击下一步,后续操作,请参见创建无状态工作负载Deployment。
使用YAML创建
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面上方的命名空间下拉列表中选择目标命名空间,然后在页面右上角单击使用YAML创建资源。
在创建页面,选择示例模板,并使用YAML配置相应的模板,然后单击创建。
YAML模板的语法同Kubernetes语法。但为了给容器指定采集配置,需要使用
env
来为容器增加采集配置和自定义Tag,并根据采集配置,创建对应的volumeMounts
和volumes
。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示例中增加以下配置示例:
说明若您有更多的日志采集需求,请参见步骤二:配置环境变量的高级参数。
通过环境变量创建采集配置和自定义Tag,所有与配置相关的环境变量都采用
aliyun_logs_
作为前缀。创建采集配置的规则:
- name: aliyun_logs_log-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log
示例中创建了两个采集配置,格式为
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
表示创建一个名称为log-varlog
的Logstore,日志采集路径为/var/log/*.log
的配置,对应的日志服务采集配置名称也是log-varlog
,目的是将容器的/var/log/*.log
文件内容采集到log-varlog
Logstore中。
创建自定义Tag规则:
- name: aliyun_logs_mytag1_tags value: tag1=v1
配置Tag后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。其中
mytag1
为只能包含小写字母、数字和短划线(-)的名称。
如果您的采集配置中指定了非
stdout
的采集路径,需要在此部分创建相应的volumeMounts
。示例中采集配置添加了对/var/log/*.log
的采集,因此相应地添加了/var/log的volumeMounts
。
步骤二:配置环境变量的高级参数
通过容器环境变量配置采集支持多种配置参数,您可以根据实际需求设置高级参数来实现日志采集的特殊需求。
通过容器环境变量配置采集日志的方式不适用于边缘场景。
字段 | 说明 | 示例 | 注意事项 |
aliyun_logs_{key} |
|
|
|
aliyun_logs_{key}_tags | 可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。 |
| - |
aliyun_logs_{key}_project | 可选。值为指定的日志服务Project。当不存在该环境变量时为您安装时所选的Project。 默认的Project的名称格式为k8s-log-<cluster-id>。 |
| Project需与您的Logtail工作所在Region一致。 |
aliyun_logs_{key}_logstore | 可选。值为指定的日志服务Logstore。当不存在该环境变量时Logstore和{key}一致。 |
| - |
aliyun_logs_{key}_shard | 可选。值为创建Logstore时的shard数,有效值为1~10。当不存在该环境变量时值为2。 |
| - |
aliyun_logs_{key}_ttl | 可选。值为指定的日志保存时间,有效值为1~3650。
|
| - |
aliyun_logs_{key}_machinegroup | 可选。值为应用的机器组。当不存在该环境变量时与安装Logtail的默认机器组一致。 |
| - |
定制需求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中,您需要进行以下操作:
在每个Project中创建一个机器组,选择自定义标识,标识名为
k8s-group-{cluster-id}
,其中{cluster-id}
为您的集群ID,机器组名称可以自定义配置。在每个应用的环境变量中配置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
步骤三:查看日志
在容器服务控制台查看应用容器的日志的具体步骤如下。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在日志中心页面,单击应用日志页签,按需选择日志库,查看应用容器的相关日志。