?
前提条件:
K8S集群中正确部署了virtual-kubelet(Serverless Kubernetes 默认已经安装,请参见创建Serverless Kubernetes集群
)。
已经开通日志服务。
通过日志服务采集ECI日志
方法一 SLS CRD(推荐):
1、创建CRD controller
首先需要在ASK中安装SLS CRD controller,如下图选择 ack-sls-logtail。
替换参数,AccessKeyId和AccessKeySecret。
点击创建按钮,部署完成后,通过命令行查看CRD controller已经创建成功。
2、创建日志采集CRD
日志采集主要分为标准输出(包括错误输出)以及文件采集两种方式。下面是一个日志文件采集的CRD Yaml模板。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
# 配置名称
name: test-file
spec:
# logstore名称
logstore: test-file
# 项目名称,用户可以自定义,推荐使用集群ID
project: k8s-log-集群ID
logtailConfig:
# 日志类型为文件
inputType: file
# 需要好上面 [metadata.name]保持一致
configName: test-file
inputDetail:
# 对于分隔符类型的日志,logType设置为json_log
logType: common_reg_log
# 日志文件夹
logPath: /log/
# 文件名, 支持通配符,例如log_*.log
filePattern: "*.log"
# 用作解析时间的key,如无需求则填为''
# timeKey: 'time'
# 时间解析方式,如无需求则填为''
#timeFormat: '%Y-%m-%dT%H:%M:%S'
# 采集容器内的文件,dockerFile设置为true
dockerFile: true
# 为了避免不同采集配置中存在相同采集目录冲突
#dockerIncludeEnv:
# aliyun_logs_test-file: "/log/*.log"
如果是采集标准输出的日志,请参考如下配置
apiVersion: log.alibabacloud.com/v1alpha1 ## 默认值,无需修改
kind: AliyunLogConfig ## 默认值,无需修改
metadata:
name: test-stdout ## 资源名,在集群内唯一
spec:
# Project名称
project: k8s-log-集群ID
# Logstore名称,不存在时自动创建
logstore: test-stdout
# [可选]Shard数量,默认为2,支持1-10
shardCount: 2
[可选]Logstore中数据的存储时间,默认为90,支持1-7300,7300天为永久存储
lifeCycle: 90
logtailConfig:
# 采集的数据源类型,file(文本文件)或plugin(标准输出)
inputType: plugin
# 采集配置的名称,与资源名[metadata.name]持一致
configName: test-stdout
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
# IncludeEnv:
# aliyun_logs_test-stdout: "stdout"
通过“kubectl create -f”创建CRD后,便可以在SLS控制台查看日志配置。如果后续采集配置需要更新,譬如更新采集,便可以直接编辑CRD,后台的CRD controller会自动同步配置到SLS。
3、部署应用
完成SLS配置后,创建业务Pod的日志就可以被正常采集了。下面是的Pod模板通过一个while循环不断打印标准输出和日志文件写入。
apiVersion: v1
kind: Pod
metadata:
labels:
app: sls
name: eci-sls-demo
namespace: default
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: busybox:latest
imagePullPolicy: Always
name: sls
之后便可以通过SLS控制台查看采集的日志。
方法二 ENV
1、登录容器服务管理控制台。
2、在选择的Serverless集群菜单下,单击左侧导航栏中的工作负载。
之后我们可以使用镜像或者模版两种方式设置pod的环境变量,对于已经创建好的Pod,可以采用更新模版的方式。
3、新建并部署以下YAML模板。采集配置通过ENV来暴露。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: alpine
name: alpine
spec:
replicas: 2
selector:
matchLabels:
app: alpine
template:
metadata:
labels:
app: alpine
spec:
containers:
- image: alpine
imagePullPolicy: Always
args:
- ping
- 127.0.0.1
name: alpine
env:
######### 配置 环境变量 ###########
######### 配置 project,如果使用k8s集群默认的project可以不填 ###########
- name: aliyun_logs_test-stdout_project
value: k8s-log-xxx
- name: aliyun_logs_test-file_project
value: k8s-log-xxx
######### 配置 机器组,如果使用k8s集群默认的project下的默认机器组可以不填 ###########
- name: aliyun_logs_test-stdout_machinegroup
value: k8s-group-app-alpine
- name: aliyun_logs_test-file_machinegroup
value: k8s-group-app-alpine
######### 设置标准输出和错误输出的logstore test-stdout###########
- name: aliyun_logs_test-stdout
value: stdout
######### 将/log/*.log目录下的日志收集到logstore test-file###########
- name: aliyun_logs_test-file
value: /log/*.log
######### 日志保留时间,只对单个logstore生效 ###########
- name: aliyun_logs_test-stdout_ttl
value: "7"
######### 日志分区数,只对单个logstore生效 ###########
- name: aliyun_logs_test-stdout_shard
value: "2"
通过环境变量来创建您的采集配置,所有与配置相关的环境变量都采用 aliyun_logs_
作为前缀
其中有部分需要根据您的需求进行配置:
样例中创建了两个采集配置,其中 aliyun_logs_test-stdout
这个 env 表示创建一个 Logstore 名字为 test-stdout,日志采集路径为 stdout 的配置,从而将容器的标准输出采集到 test-stdout 这个 Logstore 中。
4、当YAML编写完成后,单击 创建 ,即可将相应的配置交由Kubernetes集群执行。访问日志服务控制台,可以查看已经配置的收集日志。
上面两种配置方式都可以完成ASK日志配置,其中,标准输出收集效果如下:
文件收集效果如下: