日誌收集系統EFK之Filebeat 模塊與配置

1. 模塊


 

Filebeat模塊簡化了公共日誌格式的收集、解析和可視化。

一個典型的模塊(例如,對於Nginx日誌)是由一個或多個fileset組成的(以Nginx爲例,access 和 error)。

一個fileset包含以下內容:

  • Filebeat 輸入配置,其中包含要默認的查找或者日誌文件路徑。這些默認路徑取決於操作系統。Filebeat配置還負責在需要的時候拼接多行事件。
  • Elasticsearch Ingest Node 管道定義,用於解析日誌行。
  • 字段定義,用於爲每個字段在Elasticsearch中配置正確類型。它們還包含每個字段的簡短描述。
  • 簡單的Kibana dashboards,用於可視化日誌文件。

Filebeat會根據你的環境自動調整這些配置,並將它們加載到相應的 Elastic stack 組件中。

1.1.  常用日誌格式的模塊

Filebeat提供了一組預先構建的模塊,你可以使用這些模塊快速實現並部署一個日誌監控解決方案,包括樣例指示板和數據可視化,完成這些大約只需要5分鐘。

這些模塊支持常見的日誌格式,如Nginx、Apache2和MySQL,可以通過一個簡單的命令來運行。

1.1.1.  先決條件

在運行Filebeat模塊之前:

  • 安裝並配置Elastic stack
  • 完成Filebeat的安裝
  • 安裝 Ingest Node GeoIP 和 User Agent 插件。這些插件用來捕獲地理位置和瀏覽器信息,以供可視化組件所用
  • 檢查Elasticsearch和Kibana是否正在運行,以及Elasticsearch是否準備好從Filebeat那裏接收數據

你可以在Elasticsearch主目錄下運行下列命令來安裝這些插件:

sudo bin/elasticsearch-plugin install ingest-geoip
sudo bin/elasticsearch-plugin install ingest-user-agent

然後,重啓Elasticsearch

1.1.2.  運行Filebeat模塊:

第1步:在filebeat.yml配置文件中設置Elasticsearch安裝的位置。默認情況下,Filebeat假設Elasticsearch運行在9200端口上。

如果你是運行在Elastic Cloud上,指定你的Cloud ID。例如:

cloud.id: "staging:dXMtZWFzdC0xLmlOTYyNTc0Mw=="

如果你是運行在自己的硬件設備上,設置主機和端口。例如:

output.elasticsearch:
    hosts: ["myEShost:9200"]

第2步:如果Elasticsearch配置了安全策略,你需要在filebeat.yml中指定訪問的憑證。

如果你運行在Elastic Cloud上,請指定你的授權憑證。例如:

cloud.auth: "elastic:YOUR_PASSWORD"

如果你運行在自己的硬件設備上,請指定你的Elasticsearch和Kibana憑證。例如:

output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD" 
setup.kibana:
  host: "mykibanahost:5601"
  username: "my_kibana_user"  
  password: "YOUR_PASSWORD"

第3步:啓用你想運行的模塊。例如:

./filebeat modules enable system nginx mysql

第4步:設置初始環境:

./filebeat setup -e

第5步:運行Filebeat

./filebeat -e

第6步:在Kibana中查看你的數據

3.1.3.  設置路徑變量

每個模塊和fileset都有變量,你可以設置它們,以改變模塊的默認行爲,包括模塊查找日誌文件的路徑。

可以在配置文件或者命令行下設置這些路徑。例如:

- module: nginx
  access:
    var.paths: ["/var/log/nginx/access.log*"] 

或者

./filebeat -e -M "nginx.access.var.paths=[/usr/local/var/log/nginx/access.log*]"

 3.2.  Nginx模塊

nginx模塊解析Nginx創建的access和error日誌

當你運行模塊的時候,它在底層執行一些任務:

  • 設置默認的日誌文件路徑
  • 確保將每個多行日誌事件作爲單個事件發送
  • 使用ingest節點解析和處理日誌行,將數據塑造成適合在Kibana中可視化的結構
  • 部署顯示日誌數據的dashboards

這個模塊需要 ingest-user-agent 和 ingest-geoip 兩個Elasticsearch插件

3.2.1.  設置並運行模塊

第1步:啓用模塊

./filebeat modules enable nginx

爲了查看啓用或者禁用的模塊列表,運行:

./filebeat modules list

第2步:設置初始環境

./filebeat setup -e

第3步:運行

./filebeat -e

3.2.2.  配置模塊

通過在modules.d/nginx.yml中指定變量設置,或者在命令行中重寫設置來改變模塊的行爲。例如:

- module: nginx
  access:
    enabled: true
    var.paths: ["/path/to/log/nginx/access.log*"]
  error:
    enabled: true
    var.paths: ["/path/to/log/nginx/error.log*"]

或者

-M "nginx.access.var.paths=[/path/to/log/nginx/access.log*]" -M "nginx.error.var.paths=[/path/to/log/nginx/error.log*]"

3.3.  Kafka模塊

3.3.1.  配置

- module: kafka
  log:
    enabled: true
    var.paths:
      - "/path/to/logs/controller.log*"
      - "/path/to/logs/server.log*"
      - "/path/to/logs/state-change.log*"
      - "/path/to/logs/kafka-*.log*"

或者

-M "kafka.log.var.paths=[/path/to/logs/controller.log*, /path/to/logs/server.log*, /path/to/logs/state-change.log*, /path/to/logs/kafka-*.log*]"

其它模塊配置大同小異,不再贅述,更多請參考  https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html

4.  配置Filebeat

爲了配置Filebeat,你可以編輯配置文件 filebeat.yml。還有一個完整的配置文件示例 filebeat.reference.yml

4.1.  指定運行哪個模塊

Filebeat提供了幾種啓用模塊的不同方式:

  • 用modules.d目錄下的配置啓用模塊
  • 運行Filebeat的時候啓用模塊
  • 用filebeat.yml啓用模塊配置

4.1.1.  用modules.d目錄啓用模塊配置

./filebeat modules enable apache2 mysql

4.1.2.  運行Filebeat是啓用模塊

./filebeat --modules nginx,mysql,system

4.1.3.  在filebeat.yml中啓用模塊

如果可能的話,你應該用modules.d目錄下的配置文件

filebeat.modules:
- module: nginx
- module: mysql
- module: system

 4.2.  配置inputs

爲了手動配置Filebeat(代替用模塊),你可以在filebeat.yml中的filebeat.inputs區域下指定一個inputs列表。

列表時一個YMAL數組,並且你可以指定多個inputs,相同input類型也可以指定多個。例如:

filebeat.inputs:
- type: log
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
- type: log
  paths:
    - "/var/log/apache2/*"
  fields:
    apache: true
  fields_under_root: true

4.2.1.  Log input

從日誌文件讀取行

爲了配置這種input,需要指定一個paths列表,列表中的每一項必須能夠定位並抓取到日誌行。例如:

filebeat.inputs:
- type: log
  paths:
    - /var/log/messages
    - /var/log/*.log

你還可以應用設置其它額外的配置項(比如,fields, include_lines, exclude_lines, multiline等等)來從這些文件中讀取行。你設置的這些配置對所有這種類型的input在獲取日誌行的時候都生效。

爲了對不同的文件應用不同的配置,你需要定義多個input區域:

filebeat.inputs:
- type: log   # 從system.log和wifi.log中讀取日誌行
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
- type: log   # 從apache2目錄下的每一個文件中讀取日誌行,並且在輸出的時候會加上額外的字段apache
  paths:
    - "/var/log/apache2/*"
  fields:
    apache: true
  fields_under_root: true

配置項

paths

例如:/var/log/*/*.log 將會抓取/var/log子目錄目錄下所有.log文件。它不會從/var/log本身目錄下的日誌文件。如果你應用recursive_glob設置的話,它將遞歸地抓取所有子目錄下的所有.log文件。

recursive_glob.enabled

允許將**擴展爲遞歸glob模式。啓用這個特性後,每個路徑中最右邊的**被擴展爲固定數量的glob模式。例如:/foo/**擴展到/foo, /foo/*, /foo/**,等等。如果啓用,它將單個**擴展爲8級深度*模式。這個特性默認是啓用的,設置recursive_glob.enabled爲false可以禁用它。

encoding

讀取的文件的編碼

下面是一些W3C推薦的簡單的編碼:

  • plain, latin1, utf-8, utf-16be-bom, utf-16be, utf-16le, big5, gb18030, gbk, hz-gb-2312
  • euc-kr, euc-jp, iso-2022-jp, shift-jis, 等等

plain編碼是特殊的,因爲它不校驗或者轉換任何輸入。

exclude_lines

一組正則表達式,用於匹配你想要排除的行。Filebeat會刪除(PS:我覺得用“丟棄”更合適)這組正則表達式匹配的行。默認情況下,沒有行被刪除。空行被忽略。

如果指定了multiline,那麼在用exclude_lines過濾之前會將每個多行消息合併成一個單行。(PS:也就是說,多行合併成單行後再支持排除行的過濾)

下面的例子配置Filebeat刪除以DBG開頭的行:

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

include_lines

一組正則表達式,用於匹配你想要包含的行。Filebeat只會導出那些匹配這組正則表達式的行。默認情況下,所有的行都會被導出。空行被忽略。

如果指定了multipline設置,每個多行消息先被合併成單行以後再執行include_lines過濾。

下面是一個例子,配置Filebeat導出以ERR或者WARN開頭的行:

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

(畫外音:如果 include_lines 和 exclude_lines 都被定義了,那麼Filebeat先執行 include_lines 後執行 exclude_lines,而與這兩個選項被定義的順序沒有關係。include_lines 總是在 exclude_lines選項前面執行,即使在配置文件中 exclude_lines 出現在 include_lines的前面。)

下面的例子導出那些除了以DGB開頭的所有包含sometext的行:

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

harvester_buffer_size

當抓取一個文件時每個harvester使用的buffer的字節數。默認是16384。

max_bytes

單個日誌消息允許的最大字節數。超過max_bytes的字節將被丟棄且不會被髮送。對於多行日誌消息來說這個設置是很有用的,因爲它們往往很大。默認是10MB(10485760)。

json

這些選項使得Filebeat將日誌作爲JSON消息來解析。例如:

json.keys_under_root: true
json.add_error_key: true
json.message_key: log

爲了啓用JSON解析模式,你必須至少指定下列設置項中的一個:

  keys_under_root

  默認情況下,解碼後的JSON被放置在一個以"json"爲key的輸出文檔中。如果你啓用這個設置,那麼這個key在文檔中被複製爲頂級。默認是false。

  overwrite_keys

  如果keys_under_root被啓用,那麼在key衝突的情況下,解碼後的JSON對象將覆蓋Filebeat正常的字段

  add_error_key

  如果啓用,則當JSON反編排出現錯誤的時候Filebeat添加 "error.message" 和 "error.type: json"兩個key,或者當沒有使用message_key的時候。

  message_key

  一個可選的配置,用於在應用行過濾和多行設置的時候指定一個JSON key。指定的這個key必須在JSON對象中是頂級的,而且其關聯的值必須是一個字符串,否則沒有過濾或者多行聚集發送。

  ignore_decoding_error

  一個可選的配置,用於指定是否JSON解碼錯誤應該被記錄到日誌中。如果設爲true,錯誤將被記錄。默認是false。

multiline

用於控制Filebeat如何擴多行處理日誌消息

exclude_files

一組正則表達式,用於匹配你想要忽略的文件。默認沒有文件被排除。

下面是一個例子,忽略.gz的文件

filebeat.inputs:
- type: log
  ...
  exclude_files: ['\.gz$']

ignore_older

如果啓用,那麼Filebeat會忽略在指定的時間跨度之前被修改的文件。如果你想要保留日誌文件一個較長的時間,那麼配置ignore_older是很有用的。例如,如果你想要開始Filebeat,但是你只想發送最近一週最新的文件,這個情況下你可以配置這個選項。

你可以用時間字符串,比如2h(2小時),5m(5分鐘)。默認是0,意思是禁用這個設置。

你必須設置ignore_olderclose_inactive更大。

close_*

close_*配置項用於在一個確定的條件或者時間點之後關閉harvester。關閉harvester意味着關閉文件處理器。如果在harvester關閉以後文件被更新,那麼在scan_frequency結束後改文件將再次被拾起。然而,當harvester關閉的時候如果文件被刪除或者被移動,那麼Filebeat將不會被再次拾起,並且這個harvester還沒有讀取的數據將會丟失。

close_inactive

當啓用此選項時,如果文件在指定的持續時間內未被獲取,則Filebeat將關閉文件句柄。當harvester讀取最後一行日誌時,指定週期的計數器就開始工作了。它不基於文件的修改時間。如果關閉的文件再次更改,則會啓動一個新的harvester,並且在scan_frequency結束後,將獲得最新的更改。

推薦給close_inactive設置一個比你的日誌文件更新的頻率更大一點兒的值。例如,如果你的日誌文件每隔幾秒就會更新,你可以設置close_inactive爲1m。如果日誌文件的更新速率不固定,那麼可以用多個配置。

將close_inactive設置爲更低的值意味着文件句柄可以更早關閉。然而,這樣做的副作用是,如果harvester關閉了,新的日誌行不會實時發送。

關閉文件的時間戳不依賴於文件的修改時間。代替的,Filebeat用一個內部時間戳來反映最後一次讀取文件的時間。例如,如果close_inactive被設置爲5分鐘,那麼在harvester讀取文件的最後一行以後,這個5分鐘的倒計時就開始了。

你可以用時間字符串,比如2h(2小時),5m(5分鐘)。默認是5m。

close_renamed

 當啓用此選項時,Filebeat會在重命名文件時關閉文件處理器。默認情況下,harvester保持打開狀態並繼續讀取文件,因爲文件處理器不依賴於文件名。如果啓用了close_rename選項,並且重命名或者移動的文件不再匹配文件模式的話,那麼文件將不會再次被選中。Filebeat將無法完成文件的讀取。

close_removed

當啓用此選項時,Filebeat會在刪除文件時關閉harvester。通常,一個文件只有在它在由close_inactive指定的期間內不活躍的情況下才會被刪除。但是,如果一個文件被提前刪除,並且你不啓用close_removed,則Filebeat將保持文件打開,以確保harvester已經完成。如果由於文件過早地從磁盤中刪除而導致文件不能完全讀取,請禁用此選項。

close_timeout

當啓用此選項是,Filebeat會給每個harvester一個預定義的生命時間。無論讀到文件的什麼位置,只要close_timeout週期到了以後就會停止讀取。當你想要在文件上只花費預定義的時間時,這個選項對舊的日誌文件很有用。儘管在close_timeout時間以後文件就關閉了,但如果文件仍然在更新,則Filebeat將根據已定義的scan_frequency再次啓動一個新的harvester。這個harvester的close_timeout將再次啓動,爲超時倒計時。

scan_frequency

Filebeat多久檢查一次指定路徑下的新文件(PS:檢查的頻率)。例如,如果你指定的路徑是 /var/log/* ,那麼會以指定的scan_frequency頻率去掃描目錄下的文件(PS:週期性掃描)。指定1秒鐘掃描一次目錄,這還不是很頻繁。不建議設置爲小於1秒。

如果你需要近實時的發送日誌行的話,不要設置scan_frequency爲一個很低的值,而應該調整close_inactive以至於文件處理器保持打開狀態,並不斷地輪詢你的文件。

默認是10秒。

scan.sort

如果你指定了一個非空的值,那麼你可以決定用scan.order的升序或者降序。可能的值是 modtime 和 filename。爲了按文件修改時間排序,用modtime,否則用 filename。默認此選項是禁用的。

scan.order

可能的值是 asc 或者 desc。默認是asc。

更多配置請查看 https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html

(畫外音:

這裏再重點說一下 ignore_older , close_inactive , scan_frequency 這三個配置項 

  • ignore_older: 它是設置一個時間範圍(跨度),不在這個跨度範圍之內的文件更新都不管
  • scan_frequency: 它設置的是掃描文件的頻率,看看文件是否更新
  • close_inactive:它設置的是文件如果多久沒更新的話就關閉文件句柄,它是有一個倒計時,如果在倒計時期間,文件沒有任何變化,則當倒計時結束的時候關閉文件句柄。不建議設置爲小於1秒。

如果文件句柄關了以後,文件又被更新,那麼在下一個掃描週期結束的時候變化發現這個改變,於是會再次打開這個文件讀取日誌行,前面我們也提到過,每個文件上一次讀到什麼位置(偏移量)都記錄在registry文件中。

4.3.  管理多行消息

Filebeat獲取的文件可能包含跨多行文本的消息。例如,多行消息在包含Java堆棧跟蹤的文件中很常見。爲了正確處理這些多行事件,你需要在filebeat.yml中配置multiline以指定哪一行是單個事件的一部分。

4.3.1.  配置項

你可以在filebeat.yml的filebeat.inputs區域指定怎樣處理跨多行的消息。例如:

multiline.pattern: '^\['
multiline.negate: true
multiline.match: after

上面的例子中,Filebeat將所有不以 [ 開始的行與之前的行進行合併。

multiline.pattern

指定用於匹配多行的正則表達式

multiline.negate

定義模式是否被否定。默認false。

multiline.match

指定Filebeat如何把多行合併成一個事件。可選的值是 after 或者 before

這種行爲還收到negate的影響:

multiline.flush_pattern

指定一個正則表達式,多行將從內存刷新到磁盤。

multiline.max_lines

可以合併成一個事件的最大行數。如果一個多行消息包含的行數超過max_lines,則超過的行被丟棄。默認是500。

4.4.  多行配置示例

4.4.1.  Java堆棧跟蹤

Java堆棧跟蹤由多行組成,在初始行之後的每一行都以空格開頭,例如下面這樣:

Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
        at com.example.myproject.Author.getBookTitles(Author.java:25)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

 爲了把這些行合併成單個事件,用寫了多行配置:

multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after

這個配置將任意以空格開始的行合併到前一行

下面是一個稍微更復雜的例子

複製代碼

Exception in thread "main" java.lang.IllegalStateException: A book has a null property
       at com.example.myproject.Author.getBookIds(Author.java:38)
       at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
       at com.example.myproject.Book.getId(Book.java:22)
       at com.example.myproject.Author.getBookIds(Author.java:35)
       ... 1 more

複製代碼

爲了合併這個,用下面的配置:

multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
multiline.negate: false
multiline.match: after

在這個例子中,模式匹配下列行:

  • 以空格開頭,後面跟 at 或者 ... 的行
  • 以 Caused by: 開頭的行

 

一些編程語言使用行尾的反斜槓(\)字符表示該行繼續,如本例所示:

printf ("%10.10ld  \t %10.10ld \t %s\
  %f", w, x, y, z );

爲了把這樣的多行合併成單個事件,用下列配置:

multiline.pattern: '\\$'
multiline.negate: false
multiline.match: before

這段配置合併任意以 \ 結尾的行

4.4.2.  時間戳

下面是以時間戳開始的日誌

[2015-08-24 11:49:14,389][INFO ][env                      ] [Letha] using [1] data paths, mounts [[/
(/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]

爲了合併這種行,用下列配置:

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

4.4.3.  應用事件

有時你的應用日誌包含事件,自定義的開始和結束時間,例如:

[2015-08-24 11:49:14,389] Start new event
[2015-08-24 11:49:14,395] Content of processing something
[2015-08-24 11:49:14,399] End event

爲了合併這種行,用下面的多行配置:

multiline.pattern: 'Start new event'
multiline.negate: true
multiline.match: after
multiline.flush_pattern: 'End event'

4.5.  加載外部配置文件

Filebeat允許將配置分隔爲多個較小的配置文件,然後加載外部配置文件。

4.5.1.  輸入配置

filebeat.config.inputs:
  enabled: true
  path: configs/*.yml

每一個在path下的文件都必須包含一個或多個input定義,例如:

複製代碼

- type: log
  paths:
    - /var/log/mysql.log
  scan_frequency: 10s

- type: log
  paths:
    - /var/log/apache.log
  scan_frequency: 5s

複製代碼

4.5.2.  模塊配置

filebeat.config.modules:
  enabled: true
  path: ${path.config}/modules.d/*.yml

每個被發現的配置文件必須包含一個或多個模塊定義,例如:

複製代碼

- module: apache2
  access:
    enabled: true
    var.paths: [/var/log/apache2/access.log*]
  error:
    enabled: true
    var.paths: [/var/log/apache2/error.log*]

複製代碼

4.6.  配置output

4.6.1.  配置Elasticsearch output  

當你指定Elasticsearch作爲output時,Filebeat通過Elasticsearch提供的HTTP API向其發送數據。例如:

output.elasticsearch:
  hosts: ["https://localhost:9200"]
  index: "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
  ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
  ssl.certificate: "/etc/pki/client/cert.pem"
  ssl.key: "/etc/pki/client/cert.key"

爲了啓用SSL,只需要在hosts下的所有URL添加https即可

output.elasticsearch:
  hosts: ["https://localhost:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD"

如果Elasticsearch節點是用IP:PORT的形式定義的,那麼添加protocol:https。

output.elasticsearch:
  hosts: ["localhost"]
  protocol: "https"
  username: "{beatname_lc}_internal"
  password: "{pwd}"

配置項

enabled

啓用或禁用該輸出。默認true。

hosts

Elasticsearch節點列表。事件以循環順序發送到這些節點。如果一個節點變得不可訪問,那麼自動發送到下一個節點。每個節點可以是URL形式,也可以是IP:PORT形式。如果端口沒有指定,用9200。

output.elasticsearch:
  hosts: ["10.45.3.2:9220", "10.45.3.1:9230"]
  protocol: https
  path: /elasticsearch

username

用於認證的用戶名

password

用戶認證的密碼

protocol

可選值是:http 或者 https。默認是http。

path

HTTP API調用前的HTTP路徑前綴。這對於Elasticsearch監聽HTTP反向代理的情況很有用。

headers

將自定義HTTP頭添加到Elasticsearch輸出的每個請求。

index

索引名字。(PS:意思是要發到哪個索引中去)。默認是"filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"(例如,"filebeat-6.3.2-2017.04.26")。如果你想改變這個設置,你需要配置 setup.template.name 和 setup.template.pattern 選項。如果你用內置的Kibana dashboards,你也需要設置setup.dashboards.index選項。

indices

索引選擇器規則數組,支持條件、基於格式字符串的字段訪問和名稱映射。如果索引缺失或沒有匹配規則,將使用index字段。例如:

複製代碼

output.elasticsearch:
  hosts: ["http://localhost:9200"]
  index: "logs-%{[beat.version]}-%{+yyyy.MM.dd}"
  indices:
    - index: "critical-%{[beat.version]}-%{+yyyy.MM.dd}"
      when.contains:
        message: "CRITICAL"
    - index: "error-%{[beat.version]}-%{+yyyy.MM.dd}"
      when.contains:
        message: "ERR"

複製代碼

timeout

請求超時時間。默認90秒。

4.6.2.  配置Logstash output

output.logstash:
  hosts: ["127.0.0.1:5044"]

上面是配置Filebeat輸出到Logstash,那麼Logstash本身也有配置,例如:

複製代碼

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" 
  }
}

複製代碼

4.6.3.  配置Kafka output

複製代碼

output.kafka:
  # initial brokers for reading cluster metadata
  hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]

  # message topic selection + partitioning
  topic: '%{[fields.log_topic]}'
  partition.round_robin:
    reachable_only: false

  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

複製代碼

4.7.  負載均衡

爲了啓用負載均衡,當你配置輸出的時候你需要指定 loadbalance: true

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

4.8.  加載索引模板

在filebeat.yml配置文件的setup.template區域指定索引模板,用來設置在Elasticsearch中的映射。如果模板加載是啓用的(默認的),Filebeat在成功連接到Elasticsearch後自動加載索引模板。

你可以調整下列設置或者覆蓋一個已經存在的模板。

setup.template.enabled

設爲false表示禁用模板加載

setup.template.name

模板的名字。默認是filebeat。Filebeat的版本總是跟在名字後面,所以最終的名字是 filebeat-%{[beat.version]}

setup.template.pattern

模板的模式。默認模式是filebeat-*。例如:

setup.template.name: "filebeat"
setup.template.pattern: "filebeat-*"

setup.template.fields

描述字段的YAML文件路徑。默認是 fields.yml。

setup.template.overwrite

是否覆蓋存在的模板。默認false。

setup.template.settings._source

setup.template.name: "filebeat"
setup.template.fields: "fields.yml"
setup.template.overwrite: false
setup.template.settings:
  _source.enabled: false

4.9.  監控Filebeat

X-Pack監控使得可以很容易從Kibana監控Filebeat。

爲了配置Filebeat收集併發送監控信息,

第1步:創建一個具有適當權限向Elasticsearch發送系統級監視數據的用戶。

第2步:在Filebeat配置文件中添加xpack.monitoring設置。如果你配置了Elasticsearch輸出,指定下面最小的配置:

xpack.monitoring.enabled: true

如果你配置的是其它輸出,比如Logstash,那麼你必須指定一些額外的配置項。例如:

xpack.monitoring:
  enabled: true
  elasticsearch:
    hosts: ["https://example.com:9200", "https://example2.com:9200"]
    username: beats_system
    password: beatspassword

(注意:目前,你必須將監視數據發送到與所有其他事件相同的集羣。如果你配置了Elasticsearch輸出,請不要在監視配置中指定其他主機。)

第3步:在Kibana中配置監控

第4步:在Kibana中查看監控

 

5.  FAQ


5.1.  Too many open file handler?(太多打開的文件句柄)

Filebeat保持文件處理器打開,以防它到達文件的末尾,以便它可以實時讀取新的日誌行。如果Filebeat正在收集大量文件,那麼打開文件的數量可能成爲一個問題。在大多數環境中,主動更新的文件數量很少。應該相應地設置close_inactive配置選項,以關閉不再活動的文件。

5.2.  Filebeat沒有從一個文件收集行

爲了解決這個問題:

  • 確保路徑配置正確
  • 檢查這個文件是不是比指定的ignore_older值更舊
  • 確保Filebeat能夠發送時間到配置的輸出。以debug模式運行Filebeat來檢查是否可以成功發送事件:
  • ./filebeat -c config.yml -e -d "*"
    

https://www.elastic.co/guide/en/beats/filebeat/current/faq.html

5.3.  Filebeat佔用了太多CPU資源

Filebeat可能配置掃描文件太過頻繁。檢查filebeat.yml中的scan_frequency設置。

原文鏈接:https://www.cnblogs.com/cjsblog/p/9495024.html

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