弹性容器实例支持通过 Sidecar 方式采集容器日志。本文介绍如何通过 Sidecar 方式部署容器日志采集 Agent,采集 VCI 容器的标准输出日志和文件日志。
本文以在 Sidecar 容器使用火山引擎日志服务提供的日志采集组件 LogCollector 为例。若您有自己的日志采集组件,可自行实现 Sidecar 容器配置。
使用 Sidecar 方式采集容器日志时,相关可配置的参数注解(Annotation)说明,请参见 Pod Annotation 说明。
logcollector-config.yaml
的代码如下:注意
按照下方参数说明表和 YAML 文件中的注释说明,将占位符变量(${占位符}
)替换为您业务相关的实际值。
参数说明如下:apiVersion: v1 kind: ConfigMap metadata: name: logcollector-config namespace: ${namespace} data: filebeat.yml: | filebeat: is_sidecar: true output.tls: endpoint: ${volc_tls_endpoint} region: ${volc_region} secret_id: ${your_ak} secret_key: ${your_sk} label: ${your_labels} # 以下代码片段为日志输出配置。 # 详情请见开源文档 https://www.elastic.co/guide/en/beats/filebeat/7.17/configuration-logging.html。 logging.level: info logging.to_files: true logging.files: name: filebeat keepfiles: 7 permissions: 0644
变量 | 示例 | 说明 |
---|---|---|
namespace | default | Sidecar 容器所在的命名空间。 |
endpoint | https://tls-cn-beijing.ivolces.com | 日志服务连接域名,即服务地址。日志服务支持的地域及对应服务地址,请参见 服务地址。 |
region | cn-beijing | 采集 VCI 容器日志业务所在的地域(Region)。 详情请参见 地域和可用区。 |
secret_id | AK******** | 火山引擎账号或子用户的 Access Key ID。 获取方式,请参见 Access Key(密钥)管理。 |
secret_key | TUdZ******** | 火山引擎账号或子用户的 Secret Access Key。 获取方式,请参见 Access Key(密钥)管理。 |
label | http_module | 机器的自定义标识。与 前提条件 中创建的机器组自定义标识保持一致。 |
kubectl apply -f logcollector-config.yaml
注意
请按照 YAML 文件中的注释说明,将参数值替换为您业务相关的实际值。
csi-driver
并通过 Sidecar 方式采集容器的标准输出日志。示例sidecar-vci-pod-demo.yaml
的代码如下:apiVersion: v1 kind: Pod metadata: name: sidecar-vci-pod-demo # VCI Pod 名称。 namespace: default # VCI Pod 所属命名空间。 annotations: vke.volcengine.com/burst-to-vci: enforce # 强制调度到 VCI。 spec: containers: - name: c1 # 业务容器名称。 image: nginx:1.14.2 # 容器镜像地址和 Tag,请替换为您实际业务中的镜像地址。 args: # 业务容器每秒打印当前时间到标准输出日志。 - /bin/sh - -c - > i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done volumeMounts: - name: stdlog-volume # 业务容器的标准输出日志挂载的卷名称。 mountPath: /var/log # 业务容器的标准输出日志采集路径。 - name: logcollector # Sidecar 容器的名称。 image: ${logcollector-image} # Sidecar 的容器镜像,即日志服务提供的 LogCollector 镜像地址,详情请见 https://www.volcengine.com/docs/6470/190394#logcollector-镜像地址 。 imagePullPolicy: Always args: - /usr/local/container/filebeat-7.12.0/filebeat - -c - /usr/local/container/filebeat-7.12.0/etc/filebeat.yml livenessProbe: initialDelaySeconds: 10 periodSeconds: 10 exec: command: - sh - -c - | filebeat_num=`ps -ef 2>/dev/null | grep "filebeat" | grep -v "grep" | wc -l` if [ $filebeat_num -eq 0 ]; then return 1 fi volumeMounts: - name: logcollector-config mountPath: /usr/local/container/filebeat-7.12.0/etc/ readOnly: true - name: stdlog-volume # Sidecar 容器挂载业务容器的标准输出挂载的卷名称。 mountPath: /var/log # Sidecar 容器挂载业务容器的标准输出采集路径。 - name: data mountPath: /usr/local/container/filebeat-7.12.0/data env: - name: "LOG_COLLECTOR_ENV_TAGS" value: "__pod_name__|__pod_ip__|__namespace__|__node_name__|__node_ip__" - name: "__pod_name__" valueFrom: fieldRef: fieldPath: metadata.name - name: "__pod_ip__" valueFrom: fieldRef: fieldPath: status.podIP - name: "__namespace__" valueFrom: fieldRef: fieldPath: metadata.namespace - name: MAX_MEM valueFrom: resourceFieldRef: containerName: logcollector resource: limits.memory volumes: # 采集容器文件日志的共享卷定义。 - name: logcollector-config # Sidecar 容器配置文件,即步骤 1 中创建的文件名称。 configMap: defaultMode: 420 name: logcollector-config - name: stdlog-volume # Sidecar 容器挂载业务容器的标准输出挂载的卷名称。 csi: driver: stdlog.csi.volcengine.com - name: data emptyDir: { }
empty-dir
并通过 Sidecar 方式采集容器的文件日志。示例sidecar-vci-pod-demo.yaml
的代码如下:apiVersion: v1 kind: Pod metadata: name: sidecar-vci-pod-demo # VCI Pod 名称。 namespace: default # VCI Pod 所属命名空间。 annotations: vke.volcengine.com/burst-to-vci: enforce # 强制调度到 VCI。 spec: containers: - name: c1 # 业务容器的名称。 image: nginx:1.14.2 # 容器镜像地址和 Tag,请替换为您实际业务中的镜像地址。 args: - /bin/sh - -c - > i=0; while true; do echo "$i: $(date)" >> /var/log/foo.log; i=$((i+1)); sleep 1; done volumeMounts: - name: ${emptydir-name} # 业务容器的文件日志挂载卷名称。 mountPath: /var/log # 业务容器的文件日志挂载路径。 - name: logcollector # Sidecar 容器的名称。 image: ${logcollector-image} # Sidecar 的容器镜像,即日志服务提供的 LogCollector 镜像地址,详情请见 https://www.volcengine.com/docs/6470/190394#logcollector-镜像地址 。 imagePullPolicy: Always args: - /usr/local/container/filebeat-7.12.0/filebeat - -c - /usr/local/container/filebeat-7.12.0/etc/filebeat.yml livenessProbe: initialDelaySeconds: 10 periodSeconds: 10 exec: command: - sh - -c - | filebeat_num=`ps -ef 2>/dev/null | grep "filebeat" | grep -v "grep" | wc -l` if [ $filebeat_num -eq 0 ]; then return 1 fi volumeMounts: - name: logcollector-config mountPath: /usr/local/container/filebeat-7.12.0/etc/ readOnly: true - name: ${emptydir-name} # Sidecar 容器挂载业务容器文件的卷名称。 mountPath: /var/log # Sidecar 容器挂载业务容器文件日志的采集路径。 - name: data mountPath: /usr/local/container/filebeat-7.12.0/data env: - name: "LOG_COLLECTOR_ENV_TAGS" value: "__pod_name__|__pod_ip__|__namespace__|__node_name__|__node_ip__" - name: "__pod_name__" valueFrom: fieldRef: fieldPath: metadata.name - name: "__pod_ip__" valueFrom: fieldRef: fieldPath: status.podIP - name: "__namespace__" valueFrom: fieldRef: fieldPath: metadata.namespace - name: MAX_MEM valueFrom: resourceFieldRef: containerName: logcollector resource: limits.memory volumes: # 采集容器文件日志的共享卷定义。 - name: logcollector-config # Sidecar 容器配置文件,即步骤 1 中创建的文件名称。 configMap: defaultMode: 420 name: logcollector-config - name: ${emptydir-name} # Sidecar 容器挂载业务容器文件的卷名称。 emptyDir: { } - name: data emptyDir: { }
kubectl apply -f sidecar-vci-pod-demo.yaml
预期返回结果如下:kubectl get pods -l app=sidecar-vci-pod-demo
NAME READY STATUS RESTARTS AGE sidecar-vci-pod-demo 1/1 Running 0 32m