filebeat配置文件

filebeat主要用于收集和转发日志。filebeat监视指定的日志文件和位置,收集日志事件,并将它们转发到es或logstash进行索引。html

安装 java

官网:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.htmlnode

# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.2-x86_64.rpm
# sudo rpm -vi filebeat-6.5.2-x86_64.rpm

说明mysql

Filebeat的工做原理:启动Filebeat时,它会启动一个或多个inputs,这些inputs将查找指定的log的路径。对于查找到的每一个日志,Filebeat将启动一个harvester。每一个harvester读取单个日志的新内容,并将新日志数据发送到libbeat,libbeat聚合事件并将聚合数据发送到配置的output。nginx

咱们采用的是 filebeat -> kafka ->logstash -> es。redis

配置文件sql

filebeat 配置文件比较简单, 只须要配置一个filebeat.ymlless

input   

#============== Filebeat prospectors ===========
filebeat.inputs:   # 6.3之前是 filebeat.prospectors:
- type: log        # input类型,默认为log,6.0之前配置是 - input_type: log
 paths: - /var/log/java/test-java.log - /var/log/java/*.log - /var/log/*/*.log fields: log_topic: java_log # 附加的可选字段,以向output添加额外的信息。output里面可使用这个变量
  multiline.pattern: '^\['   #多行合并 同logstash的multiline用法类似
 multiline.negate: true multiline.match: after - type: log  # 一个配置文件里面能够同时收集多个日志 enabled: true paths: - /var/log/nginx/*.log fields: my_log_topic: nginx_log

经常使用配置curl

type:   指定input类型,有log、stdin、redis、tcp、syslog等tcp

fields: 能够自定义添加字段,到output中去,后续可使用这些字段,例如:

 fields: log_topic: mysql_slow idc: szjf 

 tail_files:  默认为false。配置为true时,filebeat将重新文件的最后位置开始读取,而不是从开头读取新文件, 注意:若是配合日志轮循使用,新文件的第一行将被跳过。

      此选项适用于Filebeat还没有处理的文件。若是先前运行了Filebeat而且文件的状态已经保留,tail_files则不会应用。

      第一次运行Filebeat时,可​​以使用 tail_files: true 来避免索引旧的日志行。第一次运行后,建议禁用此选项。

registry file
    filebeat会将本身处理日志文件的进度信息写入到registry文件中,以保证filebeat在重启以后可以接着处理未处理过的数据,而无需从头开始。  

若是要让filebeat从头开始读文件,须要中止filebeat,而后删除registry file:

    systemctl stop filebeat ;rm -fr /var/lib/filebeat/registry/* ; systemctl start filebaet

    registry文件里字段的解释:

  • source: 日志文件的路径
  • offset:已经采集的日志的字节数;已经采集到日志的哪一个字节位置
  • inode: 日志文件的inode号
  • device: 日志所在的磁盘编号
  • timestamp: 日志最后一次发生变化的时间戳
  • ttl: 采集失效时间,-1表示只要日志存在,就一直采集该日志

 multiline:   https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html#multiline  处理多行合并

 

output   

     配置输出的位置,好比kafka,logstash,es,redis,file 等

#================================ Outputs ===================================== #-------------------------Kafka output ------------------------------
output.kafka: hosts: ["kafka01:9092","kafka02:9092","kafka03:9092] topic: '%{[fields.my_log_topic]}' partition.round_robin: reachable_only: false version: 0.10.0.0 required_acks: 1 compression: none max_message_bytes: 1000000
#output.logstash: # hosts: ["localhost:5044"]

 

还能够有一些其余配置,好比processor处理器配置(不是必需的)

#====================Preocessors=====================
processors: - drop_fields:    #删除字段,再也不kibana里面展现,默认状况kibana里面会自动展现这些beat字段
      fields: ["beat.hostname","beat.version","beat.name","prospector.type","input.type"] #也能够在logstash里面经过remove_field 删除字段 #mutate{ # remove_field => ["[beat][hostname]","[beat][version]","input","prospector"] # }

 配置完filebeat.yml,启动filebeat 便可。# /etc/init.d/filebeat start

 

 

使用filebeat遇到的问题

filebeat7.2  output 到kafka_2.12-2.0.1 的时候报错:
 
2020-01-16T14:38:52.023+0800    INFO    kafka/log.go:53    kafka message: client/metadata found some partitions to be leaderless
2020-01-16T14:38:52.023+0800    INFO    kafka/log.go:53    client/metadata retrying after 250ms... (1 attempts remaining)
 

 手动在kafka建立topic后,再从新启动filebeat, 问题解决。

 ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 6 --topic nginx_log

经检查发现是由于kafka配置文件里面配置了 auto.create.topics.enable = false。auto.create.topics.enable 参数能够用来配置Kafka Server是否自动建立topic。

相关文章
相关标签/搜索