为了简化日志管理流程,天翼云提供一套完整的日志服务解决方案,让您免开发即可实现日志的快速获取、存储、检索和分析。在 Serverless集群中,借助其内置的日志服务托管功能,您可以通过设置相应的环境变量,轻松地将业务容器的标准输出和相关日志文件接入云日志服务。
前提条件
确保您已经创建Serverless集群,具体操作请参阅创建Serverless集群。
确保kubectl工具已经连接目标集群。
操作步骤
步骤一:创建应用并配置日志服务
为了给容器指定采集配置,需要使用env来为容器增加采集配置,并根据采集配置,创建对应的volumeMounts和volumes。Pod YAML示例如下:
apiVersion: v1
kind: Pod
metadata:
name: busybox-envs
spec:
containers:
- name: busybox
image: 'registry-huadong1.crs-internal.ctyun.cn/open-source/busybox:1.36'
args:
- -c
- mkdir -p /var/log;while true; do echo hello world; date; echo hello als >> /var/log/test.log; sleep 1;done
command:
- /bin/sh
env:
######### 配置环境变量 ###########
- name: Ctyun_logs_eci_log-stdout
value: stdout
- name: Ctyun_logs_eci_log-varlog
value: /var/log/*.log
- name: Ctyun_logs_eci_log-stdout_project
value: k8s-log-demo
- name: Ctyun_logs_eci_log-varlog_project
value: k8s-log-demo
- name: Ctyun_logs_eci_log-stdout_unit
value: log-stdout
- name: Ctyun_logs_eci_log-varlog_unit
value: log-varlog
######### 配置Volume Mount ###########
volumeMounts:
- name: volume-als-mydemo
mountPath: /var/log
volumes:
- name: volume-als-mydemo
emptyDir: {}
通过环境变量创建采集配置,所有与配置相关的环境变量都采用Ctyun_logs_eci_作为前缀,可按需在Pod YAML示例中添加配置环境变量和Volume Mount。
上面示例中创建了两个采集配置,格式为Ctyun_logs_eci_{key},对应的{key}分别为log-stdout和log-varlog,每个采集配置都可以配置自己的日志项目和日志单元。
Ctyun_logs_eci_log-stdout:该env表示创建一个名称为log-stdout的采集配置,采集容器标准输出的日志。
Ctyun_logs_eci_log-stdout_project:该env表示创建一个名称为k8s-log-demo的日志项目,容器的标准输出将会采集到k8s-log-demo日志项目中。
Ctyun_logs_eci_log-stdout_unit:该env表示创建一个名称为log-stdout的日志单元,容器的标准输出将会采集到log-stdout日志单元中。
Ctyun_logs_eci_log-varlog:该env表示创建一个名称为log-varlog的采集配置,日志采集路径为/var/log/*.log。
Ctyun_logs_eci_log-varlog_unit:该env表示创建一个名称为log-varlog的日志单元,容器的/var/log/*.log文件内容将会采集到log-varlog日志单元中。
Ctyun_logs_eci_log-varlog_project:该env表示创建一个名称为k8s-log-demo的日志项目,容器的标准输出将会采集到k8s-log-demo日志项目中。
如果您的采集配置中指定了非stdout的采集路径,需要在此部分创建相应的volumeMounts。示例中采集配置添加了对/var/log/*.log的采集,因此相应地添加了/var/log的volumeMounts。
注意
删除Pod不会删除关联的采集配置,需要您手动删除,如果指定的采集配置已经存在,则不会对已有采集配置做任何操作。
步骤二:配置环境变量的高级参数
通过容器环境变量配置采集支持多种配置参数,您可以根据实际需求设置高级参数来实现日志采集的特殊需求。
字段 | 说明 | 示例 | 注意事项 |
---|---|---|---|
Ctyun_logs_eci_{key} | 必选项。{key}只能包含小写字母、数字和短划线(-)。{key}为采集配置的名称,若不存在会创建。当值为stdout表示采集容器的标准输出;其他值为容器内的日志路径 |
value: stdout
value: /var/log/*.log | 默认切割模式为单行全文
|
Ctyun_logs_eci_{key}_project | 可选。值为指定的日志服务Project。当不存在该环境变量时,默认为eci-als-default-log-project | name: Ctyun_logs_eci_demo_project value: my-k8s-project | |
Ctyun_logs_eci_{key}_unit | 可选。值为指定的日志单元。当不存在该环境变量时日志单元默认为eci-als-default-log-unit | name: Ctyun_logs_eci_demo_unit value: my-logunit | |
Ctyun_logs_eci_{key}_ttl | 可选。值为{key}指定的日志单元保存时间,有效值为1~365 当不存在该环境变量时,默认指定日志的保存时间为365天 | name: Ctyun_logs_eci_demo_ttl value: 365 | |
Ctyun_logs_eci_{key}_hostgroup | 可选。值为主机组名称。当不存在该环境变量时默认为eci-als-default-log-host-group | name: Ctyun_logs_eci_demo_hostgroup value: my-machine-group |
定制需求1:将多个应用数据采集到同一日志单元
如果您需要将多个应用数据采集到同一日志单元,可以设置 Ctyun_logs_eci_{key}_unit参数,例如以下配置将2个应用的stdout采集到stdout-logunit中。
示例中应用1的{key}为app1-stdout,应用2的{key}为app2-stdout。
应用1设置的环境变量为:
# 配置环境变量
- name: Ctyun_logs_eci_app1-stdout
value: stdout
- name: Ctyun_logs_eci_app1-stdout_unit
value: stdout-logunit
应用2设置的环境变量为:
# 配置环境变量
- name: Ctyun_logs_eci_app2-stdout
value: stdout
- name: Ctyun_logs_eci_app2-stdout_unit
value: stdout-logunit
定制需求2:将不同应用数据采集到不同的Project
如果您需要将不同应用的数据采集到多个Project中,您需要进行以下操作:
在每个Project中创建一个机器组,选择自定义标识,机器组名称可以自定义配置,但需保证标识名和机器组名称一致。
在每个应用的环境变量中配置project、logunit、信息,其中机器组名称为您在上一步创建的机器组名。
如下示例中应用1的{key}为app1-stdout,应用2的{key}为app2-stdout。
应用1设置的环境变量为:
# 配置环境变量
- name: Ctyun_logs_eci_app2-stdout
value: stdout
- name: Ctyun_logs_eci_app2-stdout_unit
value: stdout-logunit
应用2设置的环境变量为:
# 应用2 配置环境变量
- name: Ctyun_logs_eci_app2-stdout
value: stdout
- name: Ctyun_logs_eci_app2-stdout_project
value: app2-project
- name: Ctyun_logs_eci_app2-stdout_unit
value: app2-logunit
- name: Ctyun_logs_eci_app2-stdout_hostgroup
value: app1-hostgroup
步骤三:查看日志
登录日志服务控制台.
在左侧导航栏中,选择“日志管理”。
在日志项目列表区域,单击对应的日志项目名称。
在左侧日志单元区域,单击目标日志单元查看对应应用的日志信息。