Filebeat7 原理和配置說明

1 原理

Filebeat包含兩個主要組件:inputs和harvesters。這些組件一起工作以尾部文件並將事件數據發送到您指定的輸出。

1】Harvester

harvester負責讀取單個文件的內容。harvester逐行讀取每個文件,然後將內容發送到輸出。每個文件啓動一個harvester。harvester負責打開和關閉文件,這意味着在harvester運行時文件描述符保持打開狀態。如果在收集文件時將其刪除或重命名,Filebeat將繼續讀取該文件。這樣做的副作用是磁盤上的空間將保留,直到harvester關閉爲止。默認情況下,Filebeat保持文件打開直到close_inactive到達。

關閉harvester有以下後果:

  •     關閉文件處理程序,如果在harvester仍在讀取文件時刪除了文件,則釋放了基礎資源。
  •     只有在scan_frequency經過之後,纔會再次開始文件的收集。
  •     如果在harvester關閉時移動或刪除文件,則文件的收割將不會繼續。

2】Input

input負責管理harvester並查找所有可讀取的資源。

如果輸入類型爲log,則輸入將在驅動器上找到與定義的全局路徑匹配的所有文件,併爲每個文件啓動收集器。每個輸入都在其自己的Go例程中運行。

3】Filebeat如何保持文件狀態

Filebeat保留每個文件的狀態,並經常將狀態刷新到註冊表文件中的磁盤。該狀態用於記住harvester正在讀取的最後一個偏移量,並確保發送所有日誌行。如果無法到達輸出(例如Elasticsearch或Logstash),則Filebeat會跟蹤發送的最後幾行,並在輸出再次變爲可用時繼續讀取文件。在Filebeat運行時,狀態信息也保存在內存中,用於每個輸入。重新啓動Filebeat時,將使用註冊表文件中的數據來重建狀態,並且Filebeat會在最後一個已知位置繼續每個harvester。

對於每個輸入,Filebeat會保留找到的每個文件的狀態。由於可以重命名或移動文件,因此文件名和路徑不足以標識文件。對於每個文件,Filebeat都存儲唯一的標識符以檢測文件是否以前被收穫過。

4】Filebeat如何確保至少一次交付

Filebeat保證事件將至少一次傳遞到配置的輸出,並且不會丟失數據。Filebeat之所以能夠實現此行爲,是因爲它在註冊表文件中存儲了每個事件的傳遞狀態。

在定義的輸出被阻止並且尚未確認所有事件的情況下,Filebeat將繼續嘗試發送事件,直到輸出確認已接收到事件爲止。

如果Filebeat在發送事件的過程中關閉,則它不會在關閉之前等待輸出確認所有事件。重新啓動Filebeat時,將再次發送發送到輸出但在Filebeat關閉之前未確認的所有事件。這樣可以確保每個事件至少發送一次,但是最終可能會將重複的事件發送到輸出。

 

2 Inputs

每個輸入都以破折號"-"開頭,可以指定多個輸入,並且可以多次指定相同的輸入類型。

2.1 Log input

1】enabled

啓用和禁用輸入。默認爲true。

2】paths

日誌文件絕對路徑

filebeat.inputs:
- type: log
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
    - /var/log/*/*.log    # 從/var/log的子文件夾中提取所有.log文件

3】tags

filebeat.inputs:
- type: log
  . . .
  tags: ["json"]

4】fields

指定可選字段以將其他信息添加到輸出中。

fields_under_root選項設置爲true,則自定義字段將作爲頂級字段存儲在輸出文檔中,而不是分組在fields子詞典下。

filebeat.inputs:
- type: log 
  ...
  fields:
    apache: true
  fields_under_root: true

5】exclude_lines

匹配Filebeat排除的行

filebeat.inputs:
- type: log
  ...
  exclude_lines: ['^DBG']

6】include_lines

匹配Filebeat包括的行

filebeat.inputs:
- type: log
  ...
  include_lines: ['^ERR', '^WARN']

如果同時定義了include_lines和exclude_lines,則Filebeat首先執行include_lines,然後執行exclude_lines。

filebeat.inputs:
- type: log
  ...
  include_lines: ['sometext']
  exclude_lines: ['^DBG']

7】harvester_buffer_size

每個harvester在獲取文件時使用的緩衝區大小(以字節爲單位),默認值爲16384。

8】max_bytes

一條日誌消息可以具有的最大字節數。默認值爲10MB(10485760)。

9】multiline

控制Filebeat如何處理跨多行的日誌消息的選項。

非[開頭的行與上一行合併。

filebeat.inputs:
- type: log
  ...
  multiline.pattern: '^\['
  multiline.negate: true
  multiline.match: after

非“[2015-08-24”格式開頭的行,合併到上一行。

filebeat.inputs:
- type: log
  ...
  multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after

 

 

 

3 Output

3.1 Logstash

編輯Filebeat配置文件以通過註釋掉它來禁用Elasticsearch輸出,並通過取消註釋logstash部分來啓用Logstash輸出。

output.logstash:
  hosts: ["localhost:5044", "localhost:5045"]
  loadbalance: true

1】worker

每個配置的主機向Logstash發佈事件的工作程序數。

 

3.2 Elasticsearch

output.elasticsearch:
  hosts: ["http://192.160.1.31:9200","http://192.160.1.32:9200"]
  index: "elk-es-%{+yyyy.MM.dd}"
setup.template.name: "elk-es"
setup.template.pattern: "elk-es-*"
setup.template.settings:
  index.number_of_shards: 1
  index.number_of_replicas: 1
setup.ilm.enabled: false

1】setup.template.enabled

設置爲false可禁用模板加載。

2】setup.template.name

模板的名稱,默認值爲filebeat。

3】setup.template.pattern

適用於默認索引設置的模板模式。

4】setup.template.fields

描述字段的YAML文件的路徑,默認值爲fields.yml

5】setup.template.overwrite

是否覆蓋現有模板,默認爲false。

6】setup.template.settings

要放入elasticsearch模板字典中的設置字典。

7】setup.ilm.enabled

 

3.3 Kafka

output.kafka:
  hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
  topic: '%{[fields.log_topic]}'
  partition.round_robin:
    reachable_only: false

  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

 

output.kafka:
  hosts: ["localhost:9092"]
  topic: "logs-%{[beat.version]}"
  topics:
    - topic: "critical-%{[beat.version]}"
      when.contains:
        message: "CRITICAL"
    - topic: "error-%{[beat.version]}"
      when.contains:
        message: "ERR"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章