You need to enable JavaScript to run this app.
导航

通过 Sidecar 方式采集 VCI 容器日志

最近更新时间2024.02.07 15:34:31

首次发布时间2023.07.12 12:48:16

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

前提条件

操作步骤

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

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

  1. 创建 Sidecar 容器配置的 YAML 文件。示例logcollector-config.yaml的代码如下:

    说明

    按照下方参数说明表和 YAML 文件中的注释说明,将占位符变量(${占位符})替换为您业务相关的实际值。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: logcollector-config
      namespace: ${namespace}
    data:
      filebeat.yml: |
        filebeat:
          is_sidecar: true
          autodiscover:  # 仅多租户隔离场景下需要该配置。表示使用 Autodiscover 监控容器。
            providers:
              - type: kubernetes
    
        output.tls:
          endpoint: ${volc_tls_endpoint}
          region: ${volc_region}
          secret_id: ${your_ak}
          secret_key: ${your_sk}
          role_providers:  # 仅多租户场景下需要该配置。表示 AK&SK 经过 STS Token 认证。
            - AssumeRoleProvider
          volc_endpoint: open.volcengineapi.com
          role_name: ${assumerole_name}
          account_id_key: account-id  # 仅多租户场景下需要该配置。默认值为 account-id,表示通过该参数在 Pod 注解中获取火山引擎账号 ID(AccountID)。
          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(密钥)管理
    role_nameuser1通过角色扮演获取安全令牌(STS Token)时的角色会话名称(RoleSessionName)。更多信息,请参见 AssumeRole(通过角色扮演获取临时安全令牌)
    labelhttp_module机器的自定义标识。与 前提条件 中创建的机器组自定义标识保持一致。
  2. 执行以下命令,创建 Sidecar 容器配置文件。
    kubectl apply -f logcollector-config.yaml
    
  3. 创建一个包含 Sidecar 容器的 Deployment YAML 文件。示例vci-log-sidecar-demo.yaml的代码如下:

    说明

    按照 YAML 文件中的注释说明,将占位符变量(${占位符})替换为您业务相关的实际值。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vci-log-sidecar-demo # 工作负载的名称。
      namespace: default # 部署工作负载的命名空间。
    spec:
      replicas: 1 # 工作负载的副本数。
      selector:
        matchLabels:
          app: vci-log-sidecar-demo
      template:
        metadata:
          labels:
            app: vci-log-sidecar-demo
          annotations:
            vke.volcengine.com/burst-to-vci: enforce # 调度到 VCI Pod。
            vci.volcengine.com/tls-enable: "true" # 仅在关联火山引擎日志服务的场景下需要配置。表示将 VCI 容器的日志采集到火山引擎日志服务。
        spec:
          containers:
            - name: c1 # 业务容器的名称。
              image: ${your_container_image} # 业务容器的容器镜像。
              ports:
                - containerPort: 80 
              volumeMounts:
                - mountPath: /stdlog  # 业务容器的标准输出日志采集路径。
                  name: stdlog-volume 
            - name: logcollector # Sidecar 容器的名称。
              image: ${your_sidecar_image} # Sidecar 容器的容器镜像。
              imagePullPolicy: Always
              args:
                - /usr/local/container/filebeat-7.12.0/filebeat
                - -c
                - /usr/local/container/filebeat-7.12.0/etc/filebeat.yml
                - --httpprof
                - 0.0.0.0:6060
              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
                - mountPath: /stdlog # Sidecar 容器挂载业务容器标准输出日志的采集路径。
                  name: stdlog-volume
              env:
                - name: MAX_MEM
                  valueFrom:
                    resourceFieldRef:
                      containerName: logcollector
                      resource: limits.memory
          volumes: # 采集容器标准输出日志的共享卷定义。
            - name: stdlog-volume 
              csi: 
                driver: stdlog.csi.volcengine.com
            - name: logcollector-config
              configMap:
                defaultMode: 420
                name: logcollector-config	 # Sidecar 容器配置文件,即步骤 1 中创建的文件名称。
    
  4. 执行以下命令,创建 Deployment。
    kubectl apply -f vci-log-sidecar-demo.yaml
    
  5. 获取 Pod 信息,验证 Deployment 是否成功创建。
    kubectl get pods -l app=vci-log-sidecar-demo
    
    预期返回结果如下:
    NAME                                    READY   STATUS    RESTARTS   AGE
    vci-log-sidecar-demo-84587d9796-krn5z   1/1     Running   0          32m
    
  6. 容器服务控制台 上找到目标 VCI 业务集群,查看 VCI 容器日志。详细操作,请参见 查看容器日志