filebeat配置文件


filebeat主要用於收集和轉發日志。filebeat監視指定的日志文件和位置,收集日志事件,並將它們轉發到es或logstash進行索引。

安裝 

官網:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.html

# 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

說明

Filebeat的工作原理:啟動Filebeat時,它會啟動一個或多個inputs,這些inputs將查找指定的log的路徑。對於查找到的每個日志,Filebeat將啟動一個harvester。每個harvester讀取單個日志的新內容,並將新日志數據發送到libbeat,libbeat聚合事件並將聚合數據發送到配置的output。

我們采用的是 filebeat -> kafka ->logstash -> es。

配置文件

filebeat 配置文件比較簡單, 只需要配置一個filebeat.yml

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

常用配置

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

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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM