容器计算服务 ACS(Container Compute Service)集成了阿里云日志服务SLS。您可在创建集群时启用日志服务,快速采集ACS集群的容器日志,包括容器的标准输出以及容器内的文本文件。本文介绍如何在ACS集群中通过AliyunLogConfig CRD采集容器应用日志。
步骤一:启用日志服务组件
您可以在创建ACS集群时勾选使用日志服务来自动启用日志服务组件。若创建时未勾选,您也可以通过以下步骤为已有集群启用日志服务组件。
登录容器计算服务控制台,在左侧导航栏选择集群。
在集群页面,单击目标集群ID,然后在左侧导航栏,选择运维管理 > 组件管理。
在日志与监控区域找到alibaba-log-controller。单击安装,并在安装组件对话框中单击确定。
如果您已安装的alibaba-log-controller组件为旧版本,可以对组件进行升级。升级组件后,集群会重置组件参数。如果您曾自定义alibaba-log-controller的配置和环境变量,参数将被覆盖,请重新配置。
步骤二:创建AliyunLogConfig CR日志采集配置
AliyunLogConfig CR支持采集特定应用的标准输出日志和文件日志。您可以通过集群左侧导航栏自定义资源 > 资源定义(CustomResourceDefinition) > 使用YAML创建资源来创建AliyunLogConfig CR。AliyunLogConfig CR的主要配置参数如下表所示。
配置参数 | 说明 | 示例值 |
| 日志采集配置资源名,在当前ACS集群内唯一。 | test-stdout |
| 可选配置,Project名称。可自定义,推荐使用 | k8s-log-c326bc86**** |
| 必选配置,Logstore名称。如果不存在,日志服务会自动创建。 | test-stdout |
| 采集的数据源类型, | plugin |
| Logtail配置的名称,必须与资源名 | test-stdout |
| Logtail配置的详细信息。其中主要包括采集标准输出日志和采集文件日志等配置。 |
表示采集容器的标准输出 |
| Logtail配置的扩展功能。其中
|
表示指定收集同时符合以下规则的容器日志:
|
关于更多配置参数的详细说明,请参见Logtail配置。
场景一:采集特定应用的标准输出日志
采集的日志为标准输出(包括错误输出),在logtailConfig
配置中的 detail
添加相关配置来匹配特定的Pod或容器,将下述配置下发到ACS集群中即可完成标准输出日志的采集。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-stdout
spec:
project: k8s-log-c326bc86**** # 请修改为实际Project名称
logstore: test-stdout
shardCount: 2
lifeCycle: 90
logtailConfig:
inputType: plugin
configName: test-stdout
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
K8sNamespaceRegex: ^(default)$
K8sContainerRegex: ^(busybox)$
K8sPodRegex: ^backend.+$
IncludeK8sLabel:
app: backend
application: prod
场景二:采集特定应用的文件日志
采集的日志为文件日志,在logtailConfig
配置中增加 advanced
配置来匹配特定的Pod或容器,将下述配置下发到ACS集群中即可完成文件日志的采集。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-file
spec:
project: k8s-log-c326bc86**** # 请修改为实际Project名称
logstore: test-file
logtailConfig:
inputType: file
configName: test-file
inputDetail:
logType: common_reg_log
logPath: /log/
filePattern: "*.log"
dockerFile: true
advanced:
k8s:
K8sNamespaceRegex: ^(default)$
K8sContainerRegex: ^(busybox)$
K8sPodRegex: ^backend.+$
IncludeK8sLabel:
app: backend
application: prod
以上场景的AliyunLogConfig CR test-stdout和test-file创建完成后,您可以先通过步骤四:通过日志服务控制台查看日志查看是否已成功创建对应的日志库。若没有,请结合Logtail配置重新检查和修改配置项。
步骤三:创建示例应用
创建日志采集配置CR后,日志服务会自动采集后续创建的Pod的日志。您可以创建以下示例应用来测试日志采集的效果。
示例应用以Deployment为例,YAML内容示例如下。其中容器启动后会执行相关命令,不断打印标准输出和日志文件。
apiVersion: apps/v1 kind: Deployment metadata: name: backend-busybox labels: app: backend application: prod spec: replicas: 1 selector: matchLabels: app: backend application: prod template: metadata: name: backend-busybox labels: app: backend application: prod spec: containers: - args: - -c - mkdir -p /log; while true; do echo hello world; date; echo hello sls >> /log/busybox.log; sleep 1; done command: - /bin/sh image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 imagePullPolicy: Always name: busybox
步骤四:通过日志服务控制台查看日志
完成配置后,示例应用的日志已被采集并存储到日志服务SLS中,您可以在日志服务控制台查看容器日志。
登录日志服务控制台。
在Project列表区域选择ACS集群对应的Project(默认为k8s-log-{ACS集群ID}),进入日志库列表页签。
在列表中找到相应的Logstore(采集配置中指定),将鼠标悬浮在相应的Logstore名称的右侧,单击图标,并单击查询分析。
本示例中,在日志查询页面,可以查看标准输出日志(test-stdout)和容器内文件日志(test-file)。
更多信息
关于如何进行异常排查,请参见Logtail采集日志失败的排查思路。