一、ECK核心资源Beat配置详解

ECK核心资源Beat配置示例:

apiVersion: beat.k8s.elastic.co/v1beta1  
kind: Beat
metadata:
  name: filebeat
  labels:
    app: filebeat
spec:
  type: filebeat                        # 固定为filebeat类型
  version: 8.14.3                       # 与ES版本一致
  image: registry.cn-beijing.aliyuncs.com/dotbalo/filebeat:8.14.3  # 阿里云优化镜像
  # 核心配置:自动发现+Kafka输出
  config:
    filebeat:
      autodiscover:
        providers:
        - type: kubernetes              # 自动发现K8s容器日志
          node: ${NODE_NAME}            # 从Downward API获取节点名
          hints.enabled: true
          hints.default_config:
            type: container
            paths:
              - /var/log/containers/*${data.kubernetes.container.id}.log
      inputs:
        - type: log
          enabled: false                # 禁用默认日志输入
      # 元数据注入(K8s标签透传)
      fields:
        kubernetes:
          namespace: ${POD_NAMESPACE}
          pod_name: ${POD_NAME}
          container_name: ${CONTAINER_NAME}
      # 输出到Kafka(支持动态topic)
      output.kafka:
        hosts: ["kafka:9092"]           # Kafka集群地址
        topic: "%{[fields.log_topic]}"  
        partition.round_robin:
          reachable_only: true
        required_acks: 1
        compression: gzip
    # 配置热重载(无需重启Filebeat)
    config.reloader:
      enabled: true
  # 守护进程模式(每个节点运行一个Filebeat)
  daemonSet:
    spec:
      template:
        spec:
          volumes:
          - name: varlog
            hostPath:
              path: /var/log
          - name: varlibdockercontainers
            hostPath:
              path: /var/lib/docker/containers
          containers:
          - name: filebeat
            securityContext:
              runAsUser: 0     # 允许访问宿主日志(需Node授权)
            volumeMounts:
            - mountPath: /var/log
              name: varlog
            - mountPath: /var/lib/docker/containers
              name: varlibdockercontainers
            # 注入K8s元数据(通过Downward API)
            env:
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: CONTAINER_NAME
              valueFrom:
                fieldRef:
                  fieldPath: status.containerStatuses[0].name
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName

2.6 FileBeat配置详解

2.6.1 FileBeat基于k8s自动发现配置

ECK核心资源FileBeat配置示例:

filebeat.autodiscover.providers:
  - node: ${NODE_NAME}  # 自动区分节点的名字
    type: kubernetes    # 发现类型,支持docker、kubernetes等
    templates:          # 配置模板(修正缩进)
      - config:         # 下面也可以配置多个
          - paths:      # 收集的日志路径
              - /var/log/containers/*${data.kubernetes.container.id}.log  
          tail_files: true  # 从文件的末尾开始读取日志
          type: container  # 声明这是一个容器类型的输入
          fields:         # 额外的字段
            log_topic: k8spodlogs
          processors:     # 处理器,用于数据预处理
            add_cloud_metadata: 
            add_host_metadata:  

2.6.2 FileBeat基于inputs配置

ECK核心资源FileBeat配置示例:

filebeat.inputs:
- type: log  # 指定输入类型
  paths:
    - /var/log/myapp/*.log  # 采集的路径
  fields:
    tail files: true  # 保留原始键名