通过 DaemonSet 方式采集容器文本日志或容器标准输出时,您可以通过 Pod 环境变量方式创建采集配置。本文档演示通过 DaemonSet-Pod 环境变量方式创建日志采集配置的操作步骤。
日志服务支持通过 DaemonSet 方式采集容器日志,同时支持通过 Pod 环境变量方式创建采集配置。
此外,LogCollector 采集容器日志时,支持单行、多行等多种采集配置,除各种采集配置默认附加的预留字段之外,日志服务还会对 LogCollector 采集到的容器日志添加以下预留字段,并默认为其创建索引。
容器文本日志的预留字段:
预留字段 | 说明 |
---|---|
| 镜像名称。 |
| 容器名称。 |
| 容器或 Pod 的 IP 地址。 |
| Pod 名称。 |
| Pod 的唯一标识。 |
| Pod 所属的 Namespace。 |
容器标准输出的预留字段:
预留字段 | 说明 |
---|---|
| 数据源类型,即 stdout 或 stderr。 |
| 镜像名称。 |
| 容器名称。 |
| 容器或 Pod 的 IP 地址。 |
| Pod 名称。 |
| Pod 的唯一标识。 |
| Pod 所属的 Namespace。 |
/run/docker.sock
访问 Docker 容器引擎,请确保该路径存在且 LogCollector 具备访问权限。/run/containerd/containerd.sock
访问 Containerd 容器引擎,请确保该路径存在且 LogCollector 具备访问权限。您可以在创建应用时,通过配置 Pod 环境变量来创建日志服务资源,然后采集容器标准输出或者容器文本日志。
其中,Pod 环境变量的参数需要根据业务需求自行制定,参数说明如下:
说明
如下环境变量名称中的 {rule_name}
为采集配置名称,需根据实际值替换。
环境变量 Name | 数据类型 | 是否必填 | 说明 | **示例** |
---|---|---|---|---|
| String | 是 | 采集的日志类型,说明如下:
|
|
| String | 是 | 日志项目名称。如果指定的日志项目不存在,日志服务会自动创建日志项目。 |
|
| String | 否 | 日志主题名称。如果指定的日志主题不存在,日志服务会自动创建日志主题,日志主题名称和 |
|
| Integer | 否 | 创建日志主题时,指定日志在该日志主题中的存储时长,超过存储时长的过期日志会被自动清除。单位为天,默认为 30 天。取值范围为 1~3650,指定为 3650 天表示永久存储。 |
|
| Integer | 否 | 创建日志主题时,指定日志分区的数量,取值范围为 1~10,默认创建 1 个分区。 每个分区提供的写入能力为 5MiB/s、500 次/s,读取能力为 20 MiB/s、100 次/s。请在创建日志主题时合理规划分区,创建后暂不支持修改分区数量。 |
|
| Boolean | 否 | 创建日志主题时,指定是否开启分区的自动分裂功能。
|
|
| Integer | 否 | 创建日志主题时,指定分区的最大分裂数,即分区分裂后,所有分区的最大数量。取值范围为 1~10,默认为 10。 |
|
| String | 否 | 为每条日志添加的常量字段。 |
|
您可以在创建应用时,通过配置 Pod 环境变量来采集容器标准输出。
以创建无状态负载为例,Pod 环境变量配置示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: log-app-demo namespace: default spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 env: - name: volc_logs-demo # 采集规则的名字是demo,并且采集容器标准输出 value: stdout - name: volc_logs-demo_project # 日志项目的名字是doc-demo value: doc-demo - name: volc_logs-demo_topic # 日志主题的名字是pod-log value: pod-log
您可以在创建应用时,通过配置 Pod 环境变量来采集容器内日志文件。
以创建无状态负载为例,Pod 环境变量配置示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: log-app-demo namespace: default spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 env: - name: volc_logs-demo # 采集规则名称为demo,并且采集容器内日志文件。 value: stdout - name: volc_logs-demo_project # 日志项目名称为 doc-demo。 value: doc-demo - name: volc_logs-demo_topic # 日志主题名称为 pod-log。 value: pod-log
当 Pod 环境变量来自 ConfigMap 挂载时,如果 Pod 环境变量设置了 prefix,那么 Pod 环境变量配置示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: log-app-demo namespace: default spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 envFrom: - configMapRef: name: nginx-deployment-configmap optional: false prefix: volc_logs_ --- apiVersion: v1 kind: ConfigMap metadata: name: nginx-deployment-configmap namespace: default data: logs-demo: stdout logs-demo_project: doc-demo logs-demo_topic: pod-log
当 Pod 环境变量来自 ConfigMap 挂载,如果 Pod 环境变量没有设置 prefix,那么 Pod 环境变量配置示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: log-app-demo namespace: default spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 envFrom: - configMapRef: name: nginx-deployment-configmap optional: false --- apiVersion: v1 kind: ConfigMap metadata: name: nginx-deployment-configmap namespace: default data: volc_logs_logs-demo: stdout volc_logs_logs-demo_project: doc-demo volc_logs_logs-demo_topic: pod-log
当 Pod 环境变量来自 Secret 挂载,如果 Pod 环境变量设置了 prefix,那么 Pod 环境变量配置示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: log-app-demo namespace: default spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 envFrom: - secretRef: name: nginx-deployment-secret optional: false prefix: volc_logs_ --- apiVersion: v1 kind: Secret metadata: name: nginx-deployment-secret namespace: default type: Opaque data: logs-demo: c3Rkb3V0 // base64编码的stdout logs-demo_project: ZG9jLWRlbW8= // base64编码的doc-demo logs-demo_topic: cG9kLWxvZw== // base64编码的pod-log
当 Pod 环境变量来自 Secret 挂载,如果 Pod 环境变量没有设置 prefix,那么 Pod 环境变量配置示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: log-app-demo namespace: default spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 envFrom: - secretRef: name: nginx-deployment-secret optional: false --- apiVersion: v1 kind: Secret metadata: name: nginx-deployment-secret namespace: default type: Opaque data: volc_logs_logs-demo: c3Rkb3V0 // base64编码的stdout volc_logs_logs-demo_project: ZG9jLWRlbW8= // base64编码的doc-demo volc_logs_logs-demo_topic: cG9kLWxvZw== // base64编码的pod-log