ACK(阿里云容器服务 Kubernetes 版)配置日志可以通过多种方式实现,以下是详细步骤:
1、通过控制台创建应用时配置日志
进入创建应用页面:登录容器服务管理控制台,在左侧导航栏选择集群,点击目标集群名称,然后在左侧导航栏选择“工作负载”>“无状态”。
填写基本信息:在无状态页面上方的命名空间下拉列表中选择目标命名空间,然后在页面右上角单击“使用镜像创建”,在应用基本信息页签,设置应用名称、副本数量和类型,然后单击“下一步”。
配置日志服务:在容器配置页签的“日志服务”区域,进行相关配置。
采集配置:点击“采集配置”,配置日志库和容器内日志路径,日志库需配置 Logstore 名称,名称中只能包含小写字母、数字和短划线(-),如果该 Logstore 不存在,ACK Serverless 会自动为您在集群关联的日志服务 Project 下创建相应的 Logstore,容器内日志路径可指定希望采集的日志所在的路径,例如使用“/usr/local/tomcat/logs/catalina.*.log”来采集 Tomcat 的文本日志;如果指定为“stdout”,表示采集容器的标准输出和标准错误输出,每一项采集配置都会被自动创建为对应 Logstore 的一个采集配置,默认采用极简模式(按行)进行采集。
自定义 Tag:点击“自定义 Tag”,配置 Tag 名称和 Tag 值,每一个自定义 Tag 都是一个键值对,会拼接到所采集到的日志中,可用于为容器的日志数据进行标记,例如版本号。
完成创建:配置完成后,在页面右侧单击“下一步”,后续操作参见创建无状态工作负载 Deployment。
2、通过 YAML 模板创建应用并配置日志
编写 YAML 文件:使用 YAML 模板创建应用时,若需要为容器指定采集配置,需要使用“env”来为容器增加采集配置和自定义 Tag,并根据采集配置,创建对应的“volumeMounts”和“volumes”。
采集配置示例:
name: aliyun_logs_log-stdout
value: stdout
name: aliyun_logs_log-varlog
value: /var/log/*.log
自定义 Tag 示例:
name: aliyun_logs_mytag1_tags
value: tag1=v1
创建资源:在创建页面,选择示例模板,并使用 YAML 配置相应的模板,然后单击“创建”,但为了给容器指定采集配置,需要按照上述规则添加相应的环境变量和卷配置。
3、通过 CRD 方式配置日志
安装组件:在集群内部署“alibaba-log-controller”组件后,可以定义“AliyunLogConfig CRD”资源来创建 Logtail 配置。
创建 CRD 资源:参考 YAML 示例编写日志采集配置 CRD 的 YAML 配置文件,采集的日志分为标准输出(包括错误输出)和文件日志两种。
标准输出 CRD 示例:
apiVersion:log.alibabacloud.com/v1alpha1
kind:AliyunLogConfig
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:
inputType:plugin
(采集的数据源类型,file 表示文件日志,plugin 表示标准输出)
configName:test-stdout
(Logtail 配置的名称,必须与资源名(metadata.name)相同)
inputDetail:
plugin:
inputs:
type:service_docker_stdout
detail:
Stdout
:true
Stderr
:true
文件日志 CRD 示例:
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:
inputType:file
(采集的数据源类型,file 表示文件日志,plugin 表示标准输出)
configName:test-file
(Logtail 配置的名称,必须与资源名(metadata.name)相同)
inputDetail:
logType:common_reg_log
(对于分隔符类型的日志,logType 可以设置为 json_log)
logPath:/log/
(日志文件夹)
filePattern:"*.log"
(文件名,支持通配符,log_*.log)
dockerFile:true
(采集容器内的文件,dockerFile 设置为 true)
执行命令创建 CRD:将编写好的 YAML 文件保存后,执行kubectl create -f [文件名].yaml
命令创建日志采集配置 CRD。
4、通过环境变量配置日志
标准输出采集配置:设置环境变量name: aliyun_logs_log-stdout
,value: stdout
,表示创建一个名称为 log-stdout 的 Logstore,日志采集路径为 stdout 的配置,目的是将容器的标准输出采集到 log-stdout Logstore 中。
文件日志采集配置:设置环境变量name: aliyun_logs_log-varlog
,value: /var/log/*.log
,表示创建一个名称为 log-varlog 的 Logstore,日志采集路径为/var/log/*.log 的配置,目的是将容器的/var/log/*.log 文件内容采集到 log-varlog Logstore 中,如果采集配置中指定了非 stdout 的采集路径,需要在此部分创建相应的 volumeMounts。
自定义 Tag 配置:设置环境变量name: aliyun_logs_mytag1_tags
,value: tag1=v1
,配置 Tag 后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。
5、通过 DaemonSet 方式采集日志
安装 Logtail 组件:Logtail 是 SLS 提供的日志采集 Agent,支持无侵入式采集 ACK 集群中产生的日志,可以在 ACK 集群中安装 Logtail 组件,安装完成后,Logtail 会自动部署 logtail-ds DaemonSet,用于采集节点的日志。
工作原理:DaemonSet 确保每个节点只运行一个 Logtail 容器,该容器负责采集当前节点内所有容器的日志,当新节点加入集群时,会自动在新节点上创建 Logtail 容器;当节点退出集群时,会自动销毁当前节点上的 Logtail 容器。
容器发现与文件路径映射:Logtail 容器通过与节点上的容器运行时守护进程通信来获取当前节点上的所有容器信息,避免对集群 kube-apiserver 产生压力,由于 Pod 之间资源隔离,Logtail 容器无法直接访问其他 Pod 中的容器的文件,需要通过将宿主机根目录所在的文件系统挂载到 Logtail 容器,来实现间接采集业务容器文件系统的文件。
6、通过 Helm 部署虚拟节点并配置日志
部署虚拟节点:按照 ACK 容器服务发布 virtual node addon,快速部署虚拟节点提升集群弹性能力的相关指引,在集群内部署虚拟节点。
配置日志收集:在部署虚拟节点时,勾选使用日志服务等相关选项,以便将虚拟节点的日志也统一收集到指定的日志服务 Project 中进行管理。
ACK 配置日志有多种方法可选,每种都有其特点和适用场景,无论是通过控制台、YAML 模板、CRD、环境变量、DaemonSet 还是 Helm 部署虚拟节点的方式,都能帮助用户有效地管理和收集容器日志,从而更好地监控和维护应用程序的运行状况。