ACK One注册集群集成了阿里云日志服务SLS。您可以快速采集ACS Pod的容器日志,包括容器的标准输出以及容器内的文本文件。本文介绍如何在ACS Pod中通过Pod环境变量采集应用日志。
步骤一:创建应用时配置日志服务
YAML模板的语法同Kubernetes语法,但是为了给容器指定采集配置,需要使用env
来为容器增加采集配置和自定义Tag。以下是一个简单的Pod示例:
apiVersion: v1
kind: Pod
metadata:
name: my-demo
labels:
alibabacloud.com/acs: "true"
alibabacloud.com/compute-class: general-purpose
alibabacloud.com/compute-qos: default
spec:
containers:
- name: my-demo-app
image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
env: # 配置环境变量
- name: aliyun_logs_log-stdout
value: stdout
- name: aliyun_logs_log-varlog
value: /var/log/*.log
- name: aliyun_logs_mytag1_tags
value: tag1=v1
command: ["sh", "-c"]
args: ["echo 'Starting my demo app'; sleep 3600"]
根据您的需求按照以下顺序进行配置。
如果您有更多的日志采集需求,请参见步骤二:日志采集的高级参数设置。
通过环境变量来创建您的采集配置和自定义Tag,所有与配置相关的环境变量都采用
aliyun_logs_
作为前缀。创建采集配置的规则如下:
apiVersion: v1 kind: Pod metadata: name: my-demo labels: alibabacloud.com/acs: "true" alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: default spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: - name: aliyun_logs_log-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]
示例中创建了两个采集配置,格式为
aliyun_logs_{key}
,对应的{key}
分别为log-stdout
和log-varlog
。aliyun_logs_log-stdout
:该env表示创建一个名为log-stdout
的Logstore
,日志采集路径为stdout
的配置,对应的日志服务采集配置名称也是log-stdout
,目的是将容器的标准输出采集到log-stdout
这个Logstore
中。aliyun_logs_log-varlog
:该env表示创建一个Logstore
名为log-varlog
,日志采集路径为/var/log/*.log的配置,对应的日志服务采集配置名称也是log-varlog
,目的是将容器的/var/log/*.log文件内容采集到log-varlog
这个Logstore
中。
创建自定义Tag的规则如下:
apiVersion: v1 kind: Pod metadata: name: my-demo labels: alibabacloud.com/acs: "true" alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: default spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: - name: aliyun_logs_mytag1_tags value: tag1=v1 command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]
配置Tag后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。其中
mytag1
为任意不包含'_'的名称
。如果您的采集配置中指定了非stdout的采集路径,需要在此部分创建相应的
volumeMounts
。示例中采集配置添加了对/var/log/*.log的采集,因此相应地添加了/var/log的
volumeMounts
。
步骤二:日志采集的高级参数设置
通过容器环境变量配置采集支持多种配置参数。您可根据实际需求设置高级参数,以满足日志采集的特殊需求。
环境变量名 | 说明 | 示例 | 注意事项 |
aliyun_logs_{key} |
|
|
|
aliyun_logs_{key}_tags | 可选。值为{tag-key}={tag-value}类型,用于对日志进行标识。 |
| 不涉及。 |
aliyun_logs_{key}_project | 可选。值为指定的日志服务Project。当不存在该环境变量时为您安装时所选的Project。 |
| Project需与您的日志服务组件工作所在Region一致。 |
aliyun_logs_{key}_logstore | 可选。值为指定的日志服务Logstore。当不存在该环境变量时Logstore和{key}一致。 |
| 不涉及。 |
aliyun_logs_{key}_shard | 可选。值为创建Logstore时的shard数,取值范围为[1 , 10]。当不存在该环境变量时值为2。 说明 若logstore已经存在,则该参数不生效。 |
| 不涉及。 |
aliyun_logs_{key}_ttl | 可选。值为指定的日志保存时间,取值范围为[1 , 3650]。
说明 若Logstore已经存在,则该参数不生效。 |
| 不涉及。 |
aliyun_logs_{key}_machinegroup | 可选。值为应用的机器组。当不存在该环境变量时与安装日志服务组件的默认机器组一致。关于该参数的详细使用方法,请参见下文的特殊场景二:将不同应用数据采集到不同的Project。 |
| 不涉及。 |
aliyun_logs_{key}_logstoremode | 可选。值为指定的日志服务Logstore的类型,不指定该参数的话,默认值为standard,取值: 说明 若Logstore已经存在,则该参数不生效。
|
| 不涉及。 |
特殊场景一:将多个应用数据采集到同一Logstore
如果您需要将多个应用数据采集到同一Logstore,可以设置 aliyun_logs_{key}_logstore参数,例如以下配置将2个应用的stdout采集到stdout-logstore
中。
示例中应用1的{key}
为app1-stdout
,应用2的{key}
为app2-stdout
。
应用1设置的环境变量为:
apiVersion: v1
kind: Pod
metadata:
name: my-demo
labels:
alibabacloud.com/acs: "true"
alibabacloud.com/compute-class: general-purpose
alibabacloud.com/compute-qos: default
spec:
containers:
- name: my-demo-app
image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
env: # 配置环境变量
- name: aliyun_logs_app1-stdout
value: stdout
- name: aliyun_logs_app1-stdout_logstore
value: stdout-logstore
command: ["sh", "-c"]
args: ["echo 'Starting my demo app'; sleep 3600"]
应用2设置的环境变量为:
apiVersion: v1
kind: Pod
metadata:
name: my-demo
labels:
alibabacloud.com/acs: "true"
alibabacloud.com/compute-class: general-purpose
alibabacloud.com/compute-qos: default
spec:
containers:
- name: my-demo-app
image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
env: # 配置环境变量
- name: aliyun_logs_app2-stdout
value: stdout
- name: aliyun_logs_app2-stdout_logstore
value: stdout-logstore
command: ["sh", "-c"]
args: ["echo 'Starting my demo app'; sleep 3600"]
特殊场景二:将不同应用数据采集到不同的Project
如果您需要将不同应用的数据采集到多个Project中,您需要进行以下操作:
在每个Project中创建一个机器组,选择自定义标识,标识名为
k8s-group-{cluster-id}
,其中{cluster-id}
为您的集群ID,机器组名称可以自定义配置。每个应用的环境变量中配置project、logstore、machinegroup信息,其中机器组名称为您在上一步创建的机器组名称。
如下示例中应用1的
{key}
为app1-stdout
,应用2的{key}
为app2-stdout
。其中如果两个应用在同一个K8s集群中,对应machinegroup可以使用同一个machinegroup。apiVersion: v1 kind: Pod metadata: name: my-demo labels: alibabacloud.com/acs: "true" alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: default spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 配置环境变量 - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_project value: app1-project - name: aliyun_logs_app1-stdout_logstore value: app1-logstore - name: aliyun_logs_app1-stdout_machinegroup value: app1-machine-group command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]
应用2设置的环境变量为:
apiVersion: v1 kind: Pod metadata: name: my-demo labels: alibabacloud.com/acs: "true" alibabacloud.com/compute-class: general-purpose alibabacloud.com/compute-qos: default spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 应用2 配置环境变量 - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_project value: app2-project - name: aliyun_logs_app2-stdout_logstore value: app2-logstore - name: aliyun_logs_app2-stdout_machinegroup value: app1-machine-group command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]
步骤三:通过日志服务控制台查看日志
本例中查看通过控制台向导创建的应用日志。完成配置后,应用日志已被采集并存储到日志服务中,您可以在日志服务控制台查看容器日志。
登录日志服务控制台。
在Project列表区域选择ACS集群对应的Project(默认为k8s-log-{ACS集群ID}),进入日志库列表页签。
在列表中找到相应的Logstore(采集配置中指定),将鼠标悬浮在相应的Logstore名称的右侧,单击
图标,并单击查询分析。
本例中,在日志查询页面,可以查看应用的标准输出日志和容器内文本日志,且自定义tag附加到日志字段中。