基于ECK的下一代日志收集框架

k8s日志收集-基于ECK的下一代日志收集框架

1.哪些日志需要收集

做日志收集首先需要明确有哪些日志需要收集:

  • 操作系统日志 /var/log/messages
  • k8s组件日志(如果有分类的话按照分类的路径找到日志文件,笔记中的集群没有分类组件日志,也在/var/log/messages中)
  • 业务应用程序的日志 :包含云原生日志-输出到控制台(/var/log/containers);非云原生日志-输出到本地文件(容器内日志文件)

2.收集日志常用的技术栈

ELK技术栈:Elasticsearch、Logstash、Kibana(传统架构)

EFK技术栈:Elasticsearch、Fluentd、Kibana(Fluentd在针对亿级流量有缺陷,此时可以替换为Filebeat或者Fluent-bit)(kubernetes架构推荐使用Elasticsearch+Filebeat+Kibana组合)

3.日志收集工具对比

4.云原生应用日志收集框架

5.非云原生应用日志框架

6.操作系统及k8s组件日志收集框架

7.云原生日志框架—ECK

ECK 全称是 Elastic Cloud on Kubernetes。记住最关键的一句话:

ECK 不是一种新的日志采集框架,也不是 ELK/EFK 的替代品;ECK 是 Elastic 官方提供的 Kubernetes Operator,用来在 Kubernetes 中部署和管理 Elasticsearch、Kibana 等 Elastic Stack 组件。

也就是说,ELK/EFK 解决的是“日志怎么采、怎么存、怎么看”,而 ECK 主要解决的是:

这些 Elastic 组件在 Kubernetes 里怎么部署、扩容、升级、维护。

8.ECK核心资源Elasticsearch资源定义

Elasticsearch主要作用:分布式、RESTful 风格的搜索和分析引擎。负责存储、索引、搜索和分析海量数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
apiVersion: elasticsearch.k8s.elastic.co/v1  #资源的api版本,固定写法,安装了ECK CRD后Kubernetes API Server 就能识别这种资源;
kind: Elasticsearch #资源的类型,表示创建一个Elasticsearch集群;
metadata: #资源的元数据,表示资源的名称、命名空间等信息;
name: es-cluster #资源的名称,表示集群的名称;ECK 会基于它生成 Service、StatefulSet、Secret 等资源
namespace: logging #定义这个资源创建在哪个命名空间中。
spec: #定义资源的具体规格,表示集群的配置;
version: 9.5.2 #【必填】指定Elasticsearch 版本;Operator 会部署对应版本的 ES 镜像,如果不能直接访问 Elastic 官方镜像仓库,必须配置image指定镜像下载地址
image: registry.cn-beijing.aliyuncs.com/k8s-liujunwei/elasticsearch:9.5.2 #如果无法拉取官方的镜像,必须配置该参数指定从其他的镜像地址获取镜像
nodeSets: # 【必填】定义 Elasticsearch 节点组;一个集群可以配置多个 nodeSet,每个节点组配置不同的角色,如 master、hot、warm 等
- name: default # 【自定义/必填】指定节点组名称;同一集群内必须唯一,小型集群通常一个 default 即可;大型集群可拆 masters、hot、warm 等多个节点组
count: 3 # 【必填】该 nodeSet 创建多少个 ES 节点,即 3 个 Pod,组成高可用集群
volumeClaimTemplates: #生产环境:持久化存储,为该 nodeSet 中每个 ES Pod 自动创建独立 PVC
- metadata: #存储的原数据
name: elasticsearch-data #ECK 默认 ES 数据卷名称,默认挂载到 Elasticsearch 数据目录,保持默认即可,不建议修改。
spec:
accessModes: #访问模式,生产环境建议使用 ReadWriteOnce
- ReadWriteOnce
resources: #存储资源请求,根据自己的情况配置存储大小
requests:
storage: 20Gi #每一个 ES Pod 的磁盘容量,不是整个集群总容量,count=3时,总容量为20Gix3=60Gi
storageClassName: cfs-sc #指定集群中的 StorageClass名字, 我用cubefs作为存储后端
podTemplate: #pod的模板,用于自定义 Pod 的配置
spec: #pod的配置
volumes:
- name: elasticsearch-data
emptyDir: {}
initContainers: #定义初始化容器的配置,作用是在 Elasticsearch 启动前,把 Kubernetes 宿主机的 vm.max_map_count 调整到 Elasticsearch 要求的值。
# 如果宿主机的满足要求可以不配置初始化容器,可以在宿主机上执行sysctl vm.max_map_count命令查看
- name: sysctl
securityContext:
privileged: true
runAsUser: 0
command:
- sh
- -c
- sysctl -w vm.max_map_count=1048576

9.ECK核心资源Kibana资源定义

Kibana主要作用:Elastic Stack 的官方 Web 用户界面,可视化的查询日志。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: kibana
namespace: logging # 和 ES 集群同一命名空间(推荐)
spec:
version: 9.5.2 # 必须和 ES 版本保持一致(或兼容)
image: registry.cn-beijing.aliyuncs.com/k8s-liujunwei/kibana:9.5.2 # 私有仓库时必须指定

count: 2 # 生产建议至少 2 个副本(高可用)

elasticsearchRef:
name: es-cluster # 对应你的 Elasticsearch 资源名称
# namespace: logging # 如果和 ES 不在同一命名空间才需要写

# 可选:自定义 Kibana 配置
# ---------- 与 Ingress 匹配的关键配置 ----------
config:
# 必须和 Ingress 的 host 一致 ,对外访问地址(有 Ingress 时强烈建议设置)
server.publicBaseUrl: "https://kibana.jiugen.cn"
# xpack.security.encryptionKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 建议用 secureSettings 管理
# xpack.reporting.encryptionKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# xpack.encryptedSavedObjects.encryptionKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# ---------- 加密密钥(生产强烈建议配置) ----------
secureSettings: #生产环境通过该参数配置上述三个encryptionKey参数
- secretName: kibana-encryption-keys

http:
service:
spec:
type: ClusterIP # 生产推荐 ClusterIP + Ingress,不直接暴露,测试可以改成NodePort
# tls:
# selfSignedCertificate:
# disabled: true # 如果用 Ingress 做 TLS 终止,该配置必须关闭,否则 Ingress 的 backend-protocol: HTTP 会失败

# ---------- Pod 资源配置 ----------
podTemplate:
spec:
containers:
- name: kibana # 必须叫 kibana
env:
- name: NODE_OPTIONS
value: "--max-old-space-size=2048" # Node.js 堆内存(根据实际内存调整)
resources:
requests:
memory: 2Gi
cpu: "1"
limits:
memory: 2Gi
cpu: "2"
# 可选:亲和性,让 Kibana 不要和 ES 数据节点抢资源
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
common.k8s.elastic.co/type: elasticsearch
topologyKey: kubernetes.io/hostname

10.ECK核心资源Logstash资源定义

主要作用:服务器端的数据处理管道。负责从多种来源采集、转换(过滤/解析)、丰富数据,然后将其发送到指定的输出端(通常是 Elasticsearch)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# 生产向 Logstash:读 Kafka(k8spodlogs) → 写 ES(es-cluster)
apiVersion: logstash.k8s.elastic.co/v1alpha1
kind: Logstash
metadata:
name: logstash
namespace: logging
spec:
# Logstash版本必须与 ES 版本一致
version: 9.5.2
# 私有镜像,如果能拉取官方仓库可以省略image参数
image: registry.cn-beijing.aliyuncs.com/k8s-liujunwei/logstash:9.5.2

# 高可用:3 副本;同一 Kafka group 下分摊分区
count: 3

# 关联 ECK 管理的 ES(名称必须是 Elasticsearch CR 的 name)
# 若 CRD 要求单数,改为:
# elasticsearchRef:
# name: es-cluster
elasticsearchRefs:
- name: es-cluster #关联到 Elasticsearch 资源的 metadata.name字段
clusterName: es-cluster # 部分版本需要;explain 里有再写。这是自定义一个别名,用于在 Logstash Pipeline 配置中引用这个 ES 集群。它不需要与任何 K8s 资源名称匹配。
namespace: logging #如果 ES 和 Logstash 在不同命名空间 → 必须填写 ES 所在的命名空间,如果在同一个命名空间,可以省略
# 内联 pipeline(生产也可改成 ConfigMap,便于单独变更配置)
pipelines:
- pipeline.id: main
config.string: |
input {
kafka {
# Kafka 集群初始连接地址(host:port)。客户端通过它发现整个集群的 broker 列表。
# 生产环境优先使用 K8s 内部 DNS(如 kafka.logging.svc.cluster.local:9092)。
bootstrap_servers => "kafka.logging.svc.cluster.local:9092"
# 要消费的 Kafka 主题列表。支持多个主题,用数组表示。
# 按业务拆分主题可提升隔离性与扩展性。
topics => ["k8spodlogs"] # 指定消费的 Kafka topic
group_id => "logstash-logging-prod" # 消费者组名,用于分摊分区,自定义一个名字即可
codec => json #消息解码方式

# 单个 Logstash 实例内并行消费的线程数。
# 重要约束:所有 Logstash Pod 的副本数 × consumer_threads ≤ topic 分区数。
# 超出部分的线程拿不到分区,会空转浪费资源。
# 当前 topic 分区=3,Pod 副本=3,因此设为 1 最合理。
consumer_threads => 1
enable_auto_commit => true #是否自动提交消费位移(offset) true表示自动提交offset;
auto_commit_interval_ms => "1000" # 每隔1秒提交一次offset,生产常用 1000~5000
auto_offset_reset => "earliest" #无有效 offset 时从哪里开始消费,earliest表示从头开始消费(适合新组/重跑);latest:只消费启动之后产生的新消息(生产日常常用,避免历史积压)。

#客户端与 Kafka 之间使用的安全协议。
# PLAINTEXT:明文,无加密、无认证
# SASL_PLAINTEXT:有 SASL 认证,传输不加密(不走 TLS)
# SASL_SSL,SASL :认证 + TLS 加密
# SSL:仅 TLS,通常配合证书认证
security_protocol => "SASL_PLAINTEXT" #启用 SASL 认证但不加密传输(内网常用), 必须与 Kafka 服务端配置保持一致。
# SASL 认证机制(怎么验证用户名密码)。
# PLAIN用户名密码几乎明文方式交给服务端(需配合 TLS 才相对安全)
# SCRAM-SHA-256密码经 SCRAM 挑战应答,不直接传原始密码,
# 用 SHA-256SCRAM-SHA-512同上,哈希为 SHA-512
# GSSAPIKerberos
sasl_mechanism => "SCRAM-SHA-256"
# JAAS 登录配置字符串。用于告诉 Kafka 客户端如何用用户名密码登录。账号密码来自环境变量(由 Secret 注入),禁止写死密码
sasl_jaas_config => 'org.apache.kafka.common.security.scram.ScramLoginModule required username="${KAFKA_USERNAME}" password="${KAFKA_PASSWORD}";'
}
}

output {
elasticsearch {
# Elasticsearch 节点地址列表。支持多个节点,写数组可提高可用性。
# 生产环境使用 ECK 或自建集群的内部服务名(带 https)。
hosts => ["https://es-cluster-es-http:9200"]
#写入的目标索引名。支持日期模板 %{+YYYY.MM.dd},实现按天滚动索引。
index => "k8spodlogs-%{+YYYY.MM.dd}"
#Elasticsearch 基本认证用户名。建议通过环境变量注入,禁止明文。
user => "${ELASTICSEARCH_USERNAME}"
# Elasticsearch 基本认证密码。建议通过环境变量注入,禁止明文。
password => "${ELASTICSEARCH_PASSWORD}"
#是否启用 HTTPS 连接。生产环境必须设为 true。
ssl_enabled => true
# 用于验证 Elasticsearch 服务端证书的 CA 证书路径。
# ECK 部署时通常由 elasticsearchRefs 自动注入对应环境变量。
# 如果变量名不对,可进入logstash的 Pod 中执行 env | grep -i ssl 查看实际名称。
ssl_certificate_authorities => "${ES_CLUSTER_ES_SSL_CERTIFICATE_AUTHORITY}"
}
}
# 定义pod模板(可选)
podTemplate:
spec:
containers:
- name: logstash
resources:
# 学习用偏小;不够再加大(你说了后面会自己扩)
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "1"
memory: "2Gi"
env:
- name: KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: logstash-credentials #这里是6.2中创建的secret名称
key: kafka-username # 6.2中创建的secret中的key,把kafka-username这个key的值赋值给KAFKA_USERNAME变量
- name: KAFKA_PASSWORD #同上,定义KAFKA_PASSWORD变量,值是从logstash-credentials secret中获取的kafka-password的值
valueFrom:
secretKeyRef:
name: logstash-credentials
key: kafka-password
- name: ELASTICSEARCH_USERNAME #定义一个环境变量,用来保存Elasticsearch 用户名
value: "elastic" #Elasticsearch 用户名的值
- name: ELASTICSEARCH_PASSWORD ##定义一个环境变量,用来保存Elasticsearch 用户的密码
valueFrom: #密码的值来自名字是es-cluster-es-elastic-user的secret中的elastic key的值
secretKeyRef:
name: es-cluster-es-elastic-user
key: elastic
# 堆约为容器内存一半量级,避免 OOM,可根据需要调整
# - name: LS_JAVA_OPTS
# value: "-Xms1g -Xmx1g"
# 可选:与 broker 打散(节点少时 soft 即可)
# affinity:
# podAntiAffinity:
# preferredDuringSchedulingIgnoredDuringExecution:
# - weight: 100
# podAffinityTerm:
# labelSelector:
# matchLabels:
# logstash.k8s.elastic.co/name: logstash
# topologyKey: kubernetes.io/hostname

# 数据目录持久化(含队列),CubeFS RWO 20Gi
volumeClaimTemplates:
- metadata:
name: logstash-data
spec:
accessModes:
- ReadWriteOnce
storageClassName: cfs-sc
resources:
requests:
storage: 20Gi

11.ECK核心资源Beat资源定义

主要作用:安装在数据源(主机、容器、网络设备)上的轻量级代理,负责单向发送数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# Beat 资源
apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:
name: filebeat # 资源名称,生成的 DaemonSet 会叫 filebeat-beat
namespace: logging
labels:
app: filebeat
spec:
# ---------- 基础信息 ----------
type: filebeat # 必须指定 Beat 类型
version: "9.5.2" # ★ 请改成与自己 的 ES 版本一致
image: registry.cn-beijing.aliyuncs.com/k8s-liujunwei/filebeat:9.5.2 # ★ 请改成与自己的 ES 版本一致

# ----------# Filebeat 配置,相当于传统部署中的 filebeat.yml----------
config:
# 全局设置
name: "filebeat-${NODE_NAME}" # 每个节点实例名称(便于区分)
# # Filebeat 自身日志,日志级别:生产建议 info 或 warning,排查问题时改 debug
logging.level: info
logging.to_stderr: true # 日志输出到 stderr,方便 kubectl logs 查看
logging.metrics.enabled: false # 关闭 Filebeat 自身 metrics 日志(减少噪音)

# 输入配置(采集日志)
# 输入:Autodiscover + filestream(生产推荐)
filebeat.autodiscover:
providers:
- type: kubernetes
node: ${NODE_NAME} # 只处理本节点 Pod(必须配合 hostNetwork)
hints.enabled: true # 开启 hints 机制(允许 Pod 使用 annotation 控制 Filebeat不采集自己的日志,如:co.elastic.logs/enabled: "false")
hints.default_config:
type: filestream
id: "kubernetes-container-${data.kubernetes.container.id}"
paths:
- /var/log/containers/*${data.kubernetes.container.id}.log
# parsers:
# - container:
# stream: all
# format: auto
prospector.scanner:
fingerprint.enabled: true
symlinks: true
file_identity.fingerprint: {}
# Kubernetes 日志轮转/删除时,不立即关闭文件
# 防止尾部日志还未读完就丢失
close.on_state_change.removed: false
# 忽略过旧日志,防止重启后全量重发
ignore_older: 72h
close.on_state_change.inactive: 5m
# 清理 registry 中超过 96 小时的旧状态
# 必须大于 ignore_older + scanner.check_interval(默认10秒)
clean_inactive: 96h
fields:
log_topic: k8spodlogs # 如需动态 topic 可配合使用
cluster: production
fields_under_root: false

# ========================================================
# 处理器(丰富元数据 + 过滤)
# ========================================================
processors:
# 添加 Kubernetes 元数据(namespace、pod、container、labels、annotations 等),依赖已创建的RBAC
# - add_kubernetes_metadata: #待确认
# host: ${NODE_NAME} # 指定节点,避免跨节点查询
# default_indexers.enabled: true
# default_matchers.enabled: true

# 添加主机元数据(主机名、IP、OS 等)
- add_host_metadata:
when.not.contains.tags: forwarded
netinfo.enabled: true # 包含网络接口信息
# 生产必须:丢弃 Filebeat 自己的日志,防止循环采集
- drop_event:
when:
equals:
kubernetes.container.name: "filebeat"
- drop_event:
when:
not:
or:
- equals:
kubernetes.namespace: "monitoring"
- equals:
kubernetes.namespace: "kube-system"

# 输出配置(生产推荐走 Kafka 做缓冲)
# ---------- 输出到 Kafka(推荐)----------
output.kafka:
# Kafka broker 地址(请改成你实际的 Service 名称)
# 常见命名:kafka-broker-0.kafka-broker.logging.svc:9092 或 kafka.logging.svc:9092
hosts:
- "kafka.logging.svc.cluster.local:9092"
# Topic 名称(Logstash 会从这个 Topic 消费)
topic: "k8spodlogs" #把日志输出到名字是k8spodlogs的Topic
# 分区策略
# partition.round_robin:
# reachable_only: true # 只向可达的 broker 写,官方默认是false,生产也推荐用false
# 可靠性
required_acks: 1 # 0=不等待 1=leader确认 -1=所有ISR确认(最可靠但慢)
compression: gzip # 压缩算法:none / gzip / snappy / lz4 / zstd
max_message_bytes: 1000000 # 单条消息最大字节,Filebeat 的max_message_bytes <= Kafka 的broker message.max.bytes

# ---------- SASL 认证(你的环境必须配置)----------
username: "user1"
password: "${KAFKA_PASSWORD}" # 通过环境变量注入,禁止明文写在 YAML
sasl.mechanism: "SCRAM-SHA-256"
# ========================================================
# 队列与性能调优(生产关键)
# ========================================================
queue.mem:
events: 4096 # 内存队列事件数(默认 4096)
flush.min_events: 512 # 批量刷新最小事件数
flush.timeout: 5s # 最长等待时间

# ========================================================
# HTTP 监控端点(可选,用于 Prometheus 抓取)
# ========================================================
http.enabled: true
http.host: localhost
http.port: 5066

# ---------- 部署模型:DaemonSet(每个节点一个实例)----------
daemonSet:
updateStrategy: # 可选滚动更新策略
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
podTemplate:
metadata:
labels:
app: filebeat
k8s-app: filebeat
annotations:
co.elastic.logs/enabled: "false" # 不收集filebeat自己的日志(可选)
spec:
# ---------- 服务账号,必须提前创建好该资源 ----------
serviceAccountName: filebeat
automountServiceAccountToken: true # 必须 true,才能访问 K8s API

# ---------- 网络 ----------
hostNetwork: true # 使用宿主机网络(获取更准确的主机元数据,且避免端口冲突)
dnsPolicy: ClusterFirstWithHostNet # 配合 hostNetwork 使用

# ---------- 安全上下文 ----------
securityContext:
runAsUser: 0 # Filebeat 需要 root 权限读取 /var/log


# 允许调度到控制平面节点(如需采集 master 日志)
# tolerations:
# - key: node-role.kubernetes.io/control-plane
# operator: Exists
# effect: NoSchedule
# - key: node-role.kubernetes.io/master
# operator: Exists
# effect: NoSchedule
# - key: node.kubernetes.io/not-ready
# operator: Exists
# effect: NoExecute
# tolerationSeconds: 300
# - key: node.kubernetes.io/unreachable
# operator: Exists
# effect: NoExecute
# tolerationSeconds: 300
# ---------- 终止宽限期 ----------
terminationGracePeriodSeconds: 30

containers:
- name: filebeat # 容器名必须叫 filebeat(ECK 约定)
# 资源限制(生产根据实际日志量调整)
# resources:
# requests:
# cpu: 100m
# memory: 200Mi
# limits:
# cpu: 1000m
# memory: 1Gi
# 环境变量
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName # 注入当前节点名,供配置使用
- name: KAFKA_PASSWORD
valueFrom:
secretKeyRef:
name: kafka-user-passwords
key: client-passwords


# 健康检查(可选)
# livenessProbe:
# httpGet:
# path: /
# port: 5066
# initialDelaySeconds: 30
# periodSeconds: 10
# readinessProbe:
# httpGet:
# path: /
# port: 5066
# initialDelaySeconds: 10
# periodSeconds: 10
volumeMounts:
# 宿主机日志目录(必须)
- name: varlogcontainers
mountPath: /var/log/containers

- name: varlogpods
mountPath: /var/log/pods

- name: varlibdockercontainers
mountPath: /var/lib/docker/containers

# Filebeat 数据目录(registry 状态文件,必须持久)
- name: data
mountPath: /usr/share/filebeat/data
# 如果使用自定义证书
# - name: kafka-certs
# mountPath: /etc/ssl/certs
# readOnly: true

volumes:
- name: varlogcontainers
hostPath:
path: /var/log/containers
- name: varlogpods
hostPath:
path: /var/log/pods
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers


# 数据目录建议用 hostPath(每个节点独立,避免多 Pod 竞争)
- name: data
hostPath:
path: /var/lib/filebeat-data # 宿主机上的持久目录
type: DirectoryOrCreate

11.1Filebeat Autodiscover自动发现解析

详细解读参考案例中的配置

11.2Filebeat Inputs静态文件解析

详细解读参考案例中的配置