弹性容器实例支持通过 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