ECI支持通过容器的环境变量传入日志相关的自定义配置。本文介绍如何通过环境变量来配置日志采集,实现通过阿里云日志服务SLS自动采集容器日志。
对于 ACK Serverless集群,推荐您优先使用SLS CRD的方式采集日志。具体操作,请参见通过SLS CRD采集日志。
请勿同时使用SLS CRD和环境变量方式,这可能会导致日志采集失败。
背景信息
阿里云日志服务SLS(Log Service)是针对日志数据的一站式服务,您无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能。更多信息,请参见日志服务简介。
前提条件
已开通日志服务。登录日志服务控制台时,如果没有开通日志服务,将收到相关提示,您可以根据页面提示开通。
注意事项
仅在创建ECI实例时才能通过环境变量自定义配置日志采集,更新实例时传入的日志相关环境变量不会生效。
对于自定义配置的日志Project和Logtail配置,如果后续不再使用,请及时删除相关Project和Logtail配置,避免产生不必要的费用。
配置说明
日志相关环境变量名称的格式前缀为aliyun_logs_{key}
,可配置的环境变量如下:
{key}表示日志服务中Logtail采集配置的名称,只能包含小写字母、数字和短划线(-)。您可以自定义配置{key},但必须保证在K8s集群内唯一。
配置对象 | 是否必选 | 环境变量名称 | 说明 |
Logtail配置 | 是 | aliyun_logs_{key} | 创建Logtail配置。取值说明如下:
|
项目 | 否 | aliyun_logs_{key}_project | 指定日志服务Project。 如果不设置该环境变量,则使用默认的Project。默认的Project的名称格式为k8s-log-<cluster-id>。 |
日志库 | 否 | aliyun_logs_{key}_logstore | 指定日志服务Logstore。 如果不设置该环境变量,则Logstore和 |
机器组 | 否 | aliyun_logs_{key}_machinegroup | 指定机器组。 如果不设置该环境变量,则使用默认的机器组。 |
分区 | 否 | aliyun_logs_{key}_shard | 设置日志分区数。
|
日志保留时间 | 否 | aliyun_logs_{key}_ttl | 设置日志保留时间,单位为天。
|
标签 | 否 | aliyun_logs_{key}_tags | 绑定标签。取值格式为 |
配置示例
连接集群。
创建应用。
在容器的环境变量中可以传入日志相关配置。以Deployment为例,YAML内容示例如下,示例中容器启动后会执行相关命令,不断打印标准输出和日志文件。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: sls name: eci-sls-demo spec: replicas: 1 selector: matchLabels: app: sls template: metadata: labels: app: sls alibabacloud.com/eci: "true" spec: containers: - image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/alpine:3.5 imagePullPolicy: Always args: - -c - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/alpine.log; sleep 1;done command: - /bin/sh name: alpine env: #配置Project,如果使用默认的Project,则可以不填 - name: aliyun_logs_test-stdout_project value: k8s-log-c21492 - name: aliyun_logs_test-file_project value: k8s-log-c21492 #配置机器组,如果使用默认的机器组,则可以不填 - name: aliyun_logs_test-stdout_machinegroup value: k8s-group-app-alpine - name: aliyun_logs_test-file_machinegroup value: k8s-group-app-alpine #将标准输出采集到名为test-stdout的Logstore,采集路径为标准输出stdout - name: aliyun_logs_test-stdout value: stdout #将/log/*.log目录下的日志采集到名为test-file的Logstore,采集对象为/log目录下的所有.log文件 - name: aliyun_logs_test-file value: /log/*.log #设置日志保留时间,只对名为test-stdout的Logstore生效 - name: aliyun_logs_test-stdout_ttl value: "7" #设置日志分区数,只对名为test-stdout的Logstore生效 - name: aliyun_logs_test-stdout_shard value: "2" #挂载EmptyDir Volume。除标准输出外,其它自定义目录的日志采集必须挂载EmptyDir Volume volumeMounts: - name: volume-sls mountPath: /log volumes: - name: volume-sls emptyDir: {}
将以上YAML保存为test-sls-env.yaml,执行以下命令创建应用。
kubectl create -f test-sls-env.yaml
确认应用状态。
kubectl get pod
预期返回:
NAME READY STATUS RESTARTS AGE eci-sls-demo-b97bbd7d6-z9twz 1/1 Running 0 2m45s
查看日志。
登录日志服务控制台。
单击目标Project名称。
找到目标日志库,单击日志库名称查看日志。
标准输出
文件日志