集群均采用helm进行的安装部署,如果helm尚未部署,可参考helm安装
获取filebeat包
helm repo add elastic https://helm.elastic.co
helm fetch elastic/filebeat --version 7.2.0
若添加源失败,亦可通过https://helm.elastic.co直接获取对应的包
配置文件
在包同级目录下创建配置文件filebeat-settings.yaml,内容如下
filebeatConfig:
filebeat.yml: |- // filebeat主配置文件
filebeat.inputs:
- type: docker
combine_partials: true
containers.ids:
- "*" // 收集的container-id,*代表所有
encoding: plain
fields_under_root: true // 此项默认是false,设置为true后,field下的值为顶级变量
ignore_older: 0
close_older: 1h
scan_frequency: 11s
harvester_buffer_size: 16384
max_bytes: 10485760
tail_files: true
backoff: 1s
max_backoff: 10s
backoff_factor: 2
processors:
- add_kubernetes_metadata: // 添加k8s描述信息
in_cluster: true
default_indexers.enabled: true // 7.0以后版本一定要开启这两项,默认为false
default_matchers.enabled: true // 表示能够添加额外的索引及匹配规则
annotations.dedot: false
include_annotations: // 将Pod的annotation内容引入
- "filebeat.harvest"
- "filebeat.index"
- drop_event: // 匹配不包含预设的annotation,不等则丢弃该日志
when:
not:
equals:
kubernetes.annotations.filebeat.harvest: "true"
- rename: // 将annotation定义的index重命名为service
fields:
- from: "kubernetes.annotations.filebeat.index"
to: "service"
- drop_fields: // 丢弃以下字段,一定要位于drop_event之后,程序自上而下执行
fields:
- "@metadata"
- "beat"
- "kubernetes.labels"
- "kubernetes.container"
- "kubernetes.annotations"
- "host"
- "prospector"
- "input"
- "offset"
- "stream"
- "source"
output.kafka: // 输出到kafka
hosts:
- kafka:9092
version: 2.0.0
topic: 'beat-%{[service]}' // topic名称取决于于pod定义的annotation.index
partition.round_robin:
reachable_only: false
spool_size: 2048
idle_timeout: 5s
需要额外注意的点:
-
默认docker类型的日志收集去默认路径"/var/lib/docker",由于我们的docker工作目录为/data/lib/docker/,所以我们需要将template/daemonset.yaml中挂载目录修改一下
-
区分topic是基于kubernetes annotaions中预定义的值,所以需要在应用的yaml中预先定义好该两项
启动
helm install --name filebeat -f filebeat-settings.yaml filebeat
更新配置
helm upgrade filebeat -f filebeat-settings.yaml filebeat
停止服务
helm delete filebeat --purge
上一篇《容器日志收集ELK+Filebeat+Kafka》 下一篇《Kubernetes部署Kafka》