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

安装 LogCollector(Sidecar 方式)

最近更新时间2023.11.09 13:55:59

首次发布时间2023.03.03 16:39:59

本文介绍如何在 Kubernetes 集群上以 Sidecar 方式安装 LogCollector。

背景信息

通过 Sidecar 模式只能采集 LogCollector 所在 Pod 内的其他容器的文本日志,不支持采集容器标准输出。在安装的过程中,主要完成以下步骤:

  1. 创建 LogCollector 的 ConfigMap。
  2. 创建 LogCollector Sidecar。

登录需要安装 LogCollector 的 Kubernetes 集群后,参考以下步骤完成 Sidecar 方式部署 LogCollector。

1 创建 ConfigMap

  1. 创建一个 YAML 文件,文件名为 configmap.yaml

    vim configmap.yaml
    
  2. 编辑 YAML 文件,并在 YAML 文件中输入以下脚本。
    根据实际情况,在脚本中配置相关参数。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: logcollector-config
      namespace: ${namespace}
    data:
      filebeat.yml: |
        filebeat:
          is_sidecar: true
    
        output.tls:
          endpoint: ${volc_endpoint}
          secret_id: ${your_ak}
          secret_key: ${your_sk}
          region: ${volc_region}
          label: ${your_labels}
    
        logging.level: info
        logging.to_files: true
        logging.files:
          name: filebeat
          keepfiles: 7
          permissions: 0644
    

    参数说明如下:

    变量

    示例

    说明

    namespace

    test1

    Sidecar POD 所在的命名空间。

    endpoint

    https://tls-cn-beijing.ivolces.com

    日志服务连接域名,即服务地址。 登录火山引擎控制台后,在日志项目的详情页中查看连接域名。日志服务支持的地域及对应服务地址请参考服务入口

    secret_id

    AK********

    火山引擎主账号或子账号的 Access Key ID。 登录火山引擎控制台后,在页面右上角下拉列表中单击密钥管理,根据页面提示查看并复制 Access Key ID。

    secret_key

    TUdZ********

    火山引擎主账号或子账号的 Secret Access Key。 登录火山引擎控制台后,在页面右上角下拉列表中单击密钥管理,根据页面提示查看并复制 Secret Access Key。

    region

    cn-beijing

    日志项目所在的地域(Region)。 日志服务地域及对应ID请参考服务入口

    label

    http_module

    机器的自定义标识。

    说明

    如果需要将此机器加入机器标识类型的机器组中,则需要填写机器标识。多个标识之间通过逗号(,)分隔。

  3. 执行以下命令,使 configmap.yaml 文件配置生效。

    kubectl apply -f configmap.yaml
    

2 创建 Sidecar 配置

  1. 创建一个 YAML 文件。
    其中,sidecar.yaml 为文件名,请根据实际情况替换。

    vim sidecar.yaml
    
  2. YAML 文件输入如下内容,并根据实际情况设置其中的参数。

    apiVersion: v1
    kind: Pod
    metadata:
      name: sidecar-demo
      namespace: ${namespace}
    spec:
      containers:
        - name: generator
          image: busybox:1.28
          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
          image: ${logcollector-image}
          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
          resources:
            limits:
              cpu: '1'
              memory: 2Gi
            requests:
              cpu: '1'
              memory: 2Gi
          volumeMounts:
            - name: logcollector-config
              mountPath: /usr/local/container/filebeat-7.12.0/etc/
              readOnly: true
            - name: ${emptydir-name}
              mountPath: /var/log
            - 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: "__node_name__"
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: "__node_ip__"
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
            - name: MAX_MEM
              valueFrom:
               resourceFieldRef:
                 containerName: logcollector
                 resource: limits.memory
      volumes:
        - name: logcollector-config
          configMap:
            defaultMode: 420
            name: logcollector-config
        - name: ${emptydir-name}
          emptyDir: { }
        - name: data
          emptyDir: { }
    

    变量

    示例

    说明

    ${namespace}

    test1

    Sidecar POD 所在的命名空间。

    ${logcollector-image}

    logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest

    LogCollector 的镜像地址。最新版本 LogCollector 的镜像地址请参考LogCollector 镜像地址

    ${emptydir-name}

    varlog

    LogCollector 容器和业务容器共享的 Pod 挂载目录。

  3. 执行以下命令,使 sidecar.yaml 文件配置生效。
    其中,sidecar.yaml 为文件名,请根据实际情况替换。

    kubectl apply -f sidecar.yaml
    

LogCollector 镜像地址

日志服务在各个区域提供的最新版本 LogCollector 镜像地址如下:

地域

镜像地址

华北2(北京)

logcollector-cn-beijing.cr.volces.com/logcollector/logcollector:latest

华东2(上海)

logcollector-cn-shanghai.cr.volces.com/logcollector/logcollector:latest

华南1(广州)

logcollector-cn-guangzhou.cr.volces.com/logcollector/logcollector:latest