You need to enable JavaScript to run this app.
导航
通过 Sidecar 方式采集 VCI 容器日志
最近更新时间:2024.04.02 20:01:22首次发布时间:2023.07.12 12:48:16
我的收藏
有用
有用
无用
无用

弹性容器实例支持通过 Sidecar 方式采集容器日志。本文介绍如何通过 Sidecar 方式部署容器日志采集 Agent,采集 VCI 容器的标准输出日志和文件日志。

前提条件

操作步骤

本文以在 Sidecar 容器使用火山引擎日志服务提供的日志采集组件 LogCollector 为例。若您有自己的日志采集组件,可自行实现 Sidecar 容器配置。

使用 Sidecar 方式采集容器日志时,相关可配置的参数注解(Annotation)说明,请参见 Pod Annotation 说明

  1. 创建 Sidecar 容器配置文件。示例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
    
    参数说明如下:
    变量示例说明
    namespacedefaultSidecar 容器所在的命名空间。
    endpointhttps://tls-cn-beijing.ivolces.com日志服务连接域名,即服务地址。日志服务支持的地域及对应服务地址,请参见 服务地址
    regioncn-beijing采集 VCI 容器日志业务所在的地域(Region)。 详情请参见 地域和可用区
    secret_idAK********火山引擎账号或子用户的 Access Key ID。 获取方式,请参见 Access Key(密钥)管理
    secret_keyTUdZ********火山引擎账号或子用户的 Secret Access Key。 获取方式,请参见 Access Key(密钥)管理
    labelhttp_module机器的自定义标识。与 前提条件 中创建的机器组自定义标识保持一致。
  1. 执行以下命令,创建 Sidecar 容器配置文件。
    kubectl apply -f logcollector-config.yaml
    
  2. 创建一个包含 Sidecar 容器的 VCI Pod YAML 文件。
    有如下两种 YAML 示例:

    注意

    请按照 YAML 文件中的注释说明,将参数值替换为您业务相关的实际值。

    • 创建 VCI Pod 时挂载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: { }
      
    • 创建 VCI Pod 时挂载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: { }
    
  3. 执行以下命令,创建 VCI Pod。
    kubectl apply -f sidecar-vci-pod-demo.yaml
    
  4. 获取 Pod 信息,验证 Pod 是否成功创建。
    kubectl get pods -l app=sidecar-vci-pod-demo
    
    预期返回结果如下:
    NAME                   READY   STATUS    RESTARTS   AGE
    sidecar-vci-pod-demo   1/1     Running   0          32m
    
  5. 容器服务控制台 上找到目标 VCI 业务集群,查看 VCI 容器日志。详细操作,请参见 查看容器日志