阿里云日志服务SLS(Log Service)是针对日志数据的一站式服务,让您无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能。ACK Serverless集群提供了日志服务托管功能。本文介绍如何在ACK Serverless集群中配置CRD并进行应用日志采集管理。
前提条件
已创建ACK Serverless集群。具体操作,请参见创建ACK Serverless集群。
已安装ACK Virtual Node组件,且版本≥2.7.0。关于ACK Virtual Node的更多信息,请参见ACK Virtual Node。
注意事项
通过SLS CRD方式开启日志采集仅对后续创建的ECI Pod生效。如果想要采集存量Pod的日志,需要对存量Pod进行一次滚动发布。
创建日志采集配置CRD
在集群内部署alibaba-log-controller组件后,您可以定义AliyunLogConfig CRD资源来创建Logtail配置。
登录容器服务管理控制台。
在集群页面,单击目标集群名称,进入集群管理页面。
在集群中安装alibaba-log-controller组件。
在集群管理页左侧导航栏,选择运维管理>组件管理。
单击日志与监控页签,找到alibaba-log-controller卡片,然后单击安装。
在弹出的对话框中,单击确定。
安装完成后,alibaba-log-controller卡片右上角会显示已安装。
创建日志采集配置CRD。
在集群内部署alibaba-log-controller组件后,您可以日志采集配置CRD(AliyunLogConfig CRD)来创建Logtail配置。
说明创建日志采集配置CRD后,您可以在日志服务控制台查看对应生成的日志库及logtail配置。如果后续需要更新配置,可以直接编辑CRD,系统将自动同步配置到日志服务SLS。
连接集群。
参考YAML示例编写日志采集配置CRD的YAML配置文件。
采集的日志分为标准输出(包括错误输出)和文件日志两种。详细参数说明请参见Logtail配置。
标准输出CRD YAML示例
将以下内容保存为log-stdout.yaml。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: name: test-stdout #资源名,在当前Kubernetes集群内唯一。 spec: project: k8s-log-c326bc86**** #可选配置,Project名称,可自定义,推荐使用[k8s-log-集群ID]命名 logstore: test-stdout #必选配置,Logstore名称,如果不存在,日志服务会自动创建 shardCount: 2 #可选配置,Shard数量,默认为2,取值范围为1~10 lifeCycle: 90 #可选配置,Logstore中日志保留时间,单位为天,该参数值仅在新建Logstore时生效。默认为90,取值范围为1~3650。3650表示永久保留 logtailConfig: #Logtail配置 inputType: plugin #采集的数据源类型,file表示文件日志,plugin表示标准输出 configName: test-stdout #Logtail配置的名称,必须与资源名(metadata.name)相同 inputDetail: #Logtail配置的详细信息 plugin: inputs: - type: service_docker_stdout detail: Stdout: true Stderr: true # IncludeEnv: # aliyun_logs_test-stdout: "stdout"
文件日志CRD YAML示例
将以下内容保存为log-file.yaml。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: name: test-file #资源名,在当前Kubernetes集群内唯一。 spec: project: k8s-log-c326bc86**** #可选配置,Project名称,可自定义,推荐使用[k8s-log-集群ID]命名 logstore: test-file #必选配置,Logstore名称,如果不存在,日志服务会自动创建 logtailConfig: #Logtail配置 inputType: file #采集的数据源类型,file表示文件日志,plugin表示标准输出 configName: test-file #Logtail配置的名称,必须与资源名(metadata.name)相同 inputDetail: #Logtail配置的详细信息 logType: common_reg_log #对于分隔符类型的日志,logType可以设置为json_log logPath: /log/ #日志文件夹 filePattern: "*.log" #文件名, 支持通配符,例如log_*.log dockerFile: true #采集容器内的文件,dockerFile设置为true #用作解析时间的key'' #timeKey: 'time' #时间解析方式'' #timeFormat: '%Y-%m-%dT%H:%M:%S' #避免不同采集配置中存在相同采集目录而导致冲突 #dockerIncludeEnv: # aliyun_logs_test-file: "/log/*.log"
执行以下命令创建日志采集配置CRD。
kubectl create -f log-stdout.yaml kubectl create -f log-file.yaml
创建应用以测试日志采集
创建日志采集配置CRD后,日志服务会自动采集后续创建的业务Pod的日志。
连接集群。
创建应用。
以Deployment为例,YAML内容示例如下,示例中容器启动后会执行相关命令,不断打印标准输出和日志文件。
apiVersion: apps/v1 kind: Deployment metadata: name: eci-sls-demo labels: app: sls spec: replicas: 1 selector: matchLabels: app: sls template: metadata: name: sls-test labels: app: sls alibabacloud.com/eci: "true" spec: containers: - args: - -c - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done command: - /bin/sh image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30 imagePullPolicy: Always name: busybox
将以上YAML保存为test-sls-crd.yaml,执行以下命令创建应用。
kubectl create -f test-sls-crd.yaml
确认应用状态。
kubetcl get pod
预期返回:
NAME READY STATUS RESTARTS AGE eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
查看日志。
登录日志服务控制台。
单击目标Projcect名称。
找到目标日志库,单击日志库名称查看日志。
标准输出
文件日志
关闭日志采集
创建日志采集配置CRD后,系统会自动采集所有符合条件的Pod的日志。对于一些不想要采集日志的Pod,您可以配置Annotation(k8s.aliyun.com/eci-sls-enable: "false"
)来关闭日志采集,避免系统自动创建Logtail而造成资源浪费。
Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。
仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。
配置示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo2
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-sls-enable: "false" #关闭日志采集
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
done
command:
- /bin/sh
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox