一、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 # 保留原始键名