阿里云容器服务Kubernetes集群集成了阿里云日志服务SLS。您可以在创建集群时启用日志服务,通过日志服务快速采集Kubernetes集群的容器日志,包括容器的标准输出以及容器内的文本文件。
步骤一:启用日志服务组件Logtail
为避免产生重复的费用和资源消耗,请根据实际需求选择在集群中仅使用log-pilot(开源组件)或Logtail采集来发送容器日志到日志服务(SLS)。同时使用这两个组件可能会导致容器日志被重复采集和发送,从而带来额外的费用和资源消耗。
您可以在创建集群时选中使用日志服务,启用Logtail组件,也可以为已有集群启用Logtail组件。
创建集群时启用Logtail
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面中,单击页面右上角的创建集群。
以下仅介绍开启日志服务的关键步骤。关于创建集群的具体操作,请参见创建ACK托管集群。
在组件配置配置项页中,选中使用日志服务,表示在新建的Kubernetes集群中安装日志插件。
当选中使用日志服务后,会出现创建项目(Project)的提示。关于日志服务管理日志的组织结构,请参见项目(Project)。有以下两种创建Project的方式。
单击使用已有Project,选择一个现有的Project来管理采集的日志。
单击创建新Project,自动创建一个新的Project来管理采集的日志,Project会自动命名为
k8s-log-{ClusterID}
,其中,ClusterID是您新建的Kubernetes集群的唯一标识。
配置完成后,单击右下角的创建集群,在弹出的窗口中单击确定,完成创建。
完成创建后,您可在集群列表页面查看开启了Logtail的ACK集群。
为已有集群启用Logtail
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏中,选择运维管理>组件管理,并在日志与监控区域找到logtail-ds。
在logtail-ds组件右侧,单击安装,并在安装组件对话框中单击确定。
如果您已安装的日志服务组件为旧版本,可以在logtail-ds组件右侧,单击升级。
升级logtail-ds组件后,会重置组件参数。如果您曾自定义logtail-ds或alibaba-log-controller的配置和环境变量,参数将被覆盖,请重新配置。具体操作,请参见手动升级。
步骤二:创建应用时配置日志服务
您可以在创建应用的同时配置日志服务,从而对容器的日志进行采集。目前支持通过控制台和YAML模板两种方式进行配置。
通过控制台向导创建应用并配置日志服务
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面上方的命名空间下拉框中设置命名空间,然后单击页面右上角的使用镜像创建。
在应用基本信息页签,设置应用名称、副本数量和类型,单击下一步,进入容器配置页面。
以下仅介绍日志服务相关的配置。关于其他的应用配置,请参见创建无状态工作负载Deployment。
在日志配置区域,配置日志相关信息。
设置采集配置。
单击+图标创建新的采集配置,每个采集配置由日志库和容器内日志路径两项构成。
日志库:配置Logstore名称,用于指定所采集的日志存储于该Logstore。如果该Logstore不存在,ACK将会自动为您在集群关联的日志服务Project下创建相应的Logstore。
说明新创建的Logstore中的日志默认保存时间为90天。
容器内日志路径:指定希望采集的日志所在的路径,例如使用/usr/local/tomcat/logs/catalina.*.log来采集Tomcat的文本日志。
说明指定为stdout时,表示采集容器的标准输出和标准错误输出。
每一项采集配置都会被自动创建为对应Logstore的一个采集配置,默认采用极简模式(按行)进行采集。如果您需要更丰富的采集方式,请参见通过DaemonSet-控制台方式采集容器文本日志、通过DaemonSet方式采集Kubernetes容器标准输出。
设置自定义Tag。
单击+图标创建新的自定义Tag,每一个自定义Tag都是一个键值对,会拼接到所采集到的日志中,您可以使用它来为容器的日志数据进行标记,例如版本号。
当完成所有配置后,可单击右上角的下一步进入后续流程。
后续操作,可参见创建无状态工作负载Deployment。
通过YAML模板创建
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面上方的命名空间下拉框中设置命名空间,然后单击页面右上角的使用YAML创建资源。
配置YAML文件。
YAML模板的语法同Kubernetes语法,但是为了给容器指定采集配置,需要使用
env
来为容器增加采集配置和自定义Tag,并根据采集配置,创建对应的volumeMounts
和volumes
。以下是一个简单的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 # 配置volume mount volumeMounts: - name: volumn-sls-mydemo mountPath: /var/log volumes: - name: volumn-sls-mydemo emptyDir: {}
根据您的需求,按照以下顺序进行配置。
说明如果您有更多的日志采集需求,请参见步骤三:配置环境变量的高级参数。
通过环境变量来创建您的采集配置和自定义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表示创建一个Logstore
名为log-varlog
,日志采集路径为/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
。
当YAML编写完成后,单击创建,即可将相应的配置交由Kubernetes集群执行。
步骤三:配置环境变量的高级参数
通过容器环境变量配置采集支持多种配置参数。您可以根据实际需求设置高级参数,以满足日志采集的特殊需求。
通过容器环境变量配置采集日志的方式不适用于边缘场景。
字段 | 说明 | 示例 | 注意事项 |
aliyun_logs_{key} |
|
|
|
aliyun_logs_{key}_tags | 可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。 |
| 不涉及。 |
aliyun_logs_{key}_project | 可选。值为指定的日志服务Project。当不存在该环境变量时,为您安装时所选的Project。 |
| Project需与您的Logtail工作所在的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 | 可选。值为应用的机器组。当不存在该环境变量时与安装Logtail的默认机器组一致。关于该参数的详细使用方法,请参见下文的定制需求2:将不同应用数据采集到不同的Project。 |
| 不涉及。 |
aliyun_logs_{key}_logstoremode | 可选。值为指定的日志服务Logstore的类型,不指定该参数的话,默认值为standard,取值: 说明 若Logstore已经存在,则该参数不生效。
|
| 该参数需要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中,您需要进行以下操作:
在每个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
步骤四:查看日志
本例中查看通过控制台向导创建的Tomcat应用的日志。完成配置后,Tomcat应用的日志已被采集并存储到日志服务中,您可以在日志服务控制台查看容器日志,也可以在ACK控制台查看容器的日志。
日志服务控制台查看日志
安装成功后,进入日志服务控制台。
在进入控制台后,在Project列表区域选择Kubernetes集群对应的Project(默认为k8s-log-{Kubernetes集群ID}),进入日志库列表页签。
在列表中找到相应的Logstore(采集配置中指定),将鼠标悬浮在相应的Logstore名称的右侧,单击图标,并单击查询分析。
本例中,在日志查询页面,您可以查看Tomcat应用的标准输出日志和容器内文本日志,并可以发现自定义tag附加到日志字段中。
ACK控制台查看容器日志
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在日志中心页面,单击应用日志页签,设置检索条件后单击选择日志库,查看应用容器的相关日志。
更多信息
通过日志服务采集Kubernetes容器日志,您可以在日志服务控制台查看容器服务ACK的全部日志信息。
默认情况下,日志服务会使用极简模式来采集您的数据(按行采集、不解析)。如果您需要更复杂的配置,可以参见以下日志服务文档并前往日志服务控制台进行配置修改。
除了通过控制台配置采集以外,您还可以直接通过CRD配置来对Kubernetes集群进行日志采集。
关于如何进行异常排查,请参见Logtail采集日志失败的排查思路。
如需了解如何变更日志保存天数、如何关闭日志采集等信息,请参见Logstore相关问题。