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。

相關文章
相關標籤/搜索