ECI支持通过容器的环境变量传入日志相关的自定义配置。本文介绍如何通过环境变量来配置日志采集,实现通过阿里云日志服务SLS自动采集容器日志。
背景信息
阿里云日志服务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名称。
-
找到目标日志库,单击日志库名称查看日志。
-
标准输出
在日志服务控制台中,选择 test-stdout Logstore,可查看容器标准输出日志的采集结果。日志记录包含
_container_name_(如 alpine)、_image_name_、_namespace_(如 default)、_source_(stdout)等字段,日志内容示例为hello world。 -
文件日志
在日志服务控制台左侧日志库列表中选择 test-file,进入日志查询页面。查询结果显示日志总条数为 896 条,查询状态为结果精确。切换到原始日志页签,可查看采集到的文件日志记录,日志来源路径为
/log/alpine.log,content字段值为hello sls,日志标签包含__tag__:__container_name__:alpine、__tag__:__namespace__:default、__tag__:__image_name__:registry-vpc.cn-beijing.aliyuncs.com/eci_open/alpine:3.5等容器信息,表明文件日志采集配置生效。
-
-