續 • 《開始使用Filebeat》html
1. 關於Filebeatjava
當你要面對成百上千、甚至成千上萬的服務器、虛擬機和容器生成的日誌時,請告別 SSH 吧!Filebeat 將爲你提供一種輕量型方法,用於轉發和彙總日誌與文件,讓簡單的事情再也不繁雜。mysql
關於Filebeat,記住兩點:nginx
2. Filebeat是如何工做的正則表達式
Filebeat由兩個主要組件組成:inputs 和 harvesters (直譯:收割機,採集器)。這些組件一塊兒工做以跟蹤文件,並將事件數據發送到你指定的輸出。sql
2.1. harvester是什麼apache
一個harvester負責讀取一個單個文件的內容。編程
harvester逐行讀取每一個文件(一行一行地讀取每一個文件),並把這些內容發送到輸出。json
每一個文件啓動一個harvester。數組
harvester負責打開和關閉這個文件,這就意味着在harvester運行時文件描述符保持打開狀態。
在harvester正在讀取文件內容的時候,文件被刪除或者重命名了,那麼Filebeat會續讀這個文件。這就有一個問題了,就是隻要負責這個文件的harvester沒用關閉,那麼磁盤空間就不會釋放。默認狀況下,Filebeat保存文件打開直到close_inactive到達。
2.2. input是什麼
一個input負責管理harvesters,並找到全部要讀取的源。
若是input類型是log,則input查找驅動器上與已定義的glob路徑匹配的全部文件,併爲每一個文件啓動一個harvester。
每一個input都在本身的Go例程中運行。
下面的例子配置Filebeat從全部匹配指定的glob模式的文件中讀取行:
filebeat.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log
2.3. Filebeat如何保持文件狀態
Filebeat保存每一個文件的狀態,並常常刷新狀態到磁盤上的註冊文件(registry)。狀態用於記住harvester讀取的最後一個偏移量,並確保全部日誌行被髮送(到輸出)。若是輸出,好比Elasticsearch 或者 Logstash等,沒法訪問,那麼Filebeat會跟蹤已經發送的最後一行,並只要輸出再次變得可用時繼續讀取文件。當Filebeat運行時,會將每一個文件的狀態新保存在內存中。當Filebeat從新啓動時,將使用註冊文件中的數據從新構建狀態,Filebeat將在最後一個已知位置繼續每一個harvester。
對於每一個輸入,Filebeat保存它找到的每一個文件的狀態。由於文件能夠重命名或移動,因此文件名和路徑不足以標識文件。對於每一個文件,Filebeat存儲唯一標識符,以檢測文件是否之前讀取過。
若是你的狀況涉及天天建立大量的新文件,你可能會發現註冊表文件變得太大了。
(畫外音:Filebeat保存每一個文件的狀態,並將狀態保存到registry_file中的磁盤。當從新啓動Filebeat時,文件狀態用於在之前的位置繼續讀取文件。若是天天生成大量新文件,註冊表文件可能會變得太大。爲了減少註冊表文件的大小,有兩個配置選項可用:clean_remove和clean_inactive。對於你再也不訪問且被忽略的舊文件,建議您使用clean_inactive。若是想從磁盤上刪除舊文件,那麼使用clean_remove選項。)
2.4. Filebeat如何確保至少投遞一次(at-least-once)?
Filebeat保證事件將被投遞到配置的輸出中至少一次,而且不會丟失數據。Filebeat可以實現這種行爲,由於它將每一個事件的投遞狀態存儲在註冊表文件中。
在定義的輸出被阻塞且沒有確認全部事件的狀況下,Filebeat將繼續嘗試發送事件,直到輸出確認收到事件爲止。
若是Filebeat在發送事件的過程當中關閉了,則在關閉以前它不會等待輸出確認全部事件。當Filebeat從新啓動時,發送到輸出(但在Filebeat關閉前未確認)的任何事件將再次發送。這確保每一個事件至少被髮送一次,可是你最終可能會將重複的事件發送到輸出。你能夠經過設置shutdown_timeout選項,將Filebeat配置爲在關閉以前等待特定的時間。
3. 模塊
Filebeat模塊簡化了公共日誌格式的收集、解析和可視化。
一個典型的模塊(例如,對於Nginx日誌)是由一個或多個fileset組成的(以Nginx爲例,access 和 error)。
一個fileset包含如下內容:
Filebeat會根據你的環境自動調整這些配置,並將它們加載到相應的 Elastic stack 組件中。
3.1. 經常使用日誌格式的模塊
Filebeat提供了一組預先構建的模塊,你可使用這些模塊快速實現並部署一個日誌監控解決方案,包括樣例指示板和數據可視化,完成這些大約只須要5分鐘。
這些模塊支持常見的日誌格式,如Nginx、Apache2和MySQL,能夠經過一個簡單的命令來運行。
3.1.1. 先決條件
在運行Filebeat模塊以前:
你能夠在Elasticsearch主目錄下運行下列命令來安裝這些插件:
sudo bin/elasticsearch-plugin install ingest-geoip sudo bin/elasticsearch-plugin install ingest-user-agent
而後,重啓Elasticsearch
3.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-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提供了幾種啓用模塊的不一樣方式:
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編碼是特殊的,由於它不校驗或者轉換任何輸入。
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_older比close_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 這三個配置項
若是文件句柄關了之後,文件又被更新,那麼在下一個掃描週期結束的時候變化發現這個改變,因而會再次打開這個文件讀取日誌行,前面咱們也提到過,每一個文件上一次讀到什麼位置(偏移量)都記錄在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
在這個例子中,模式匹配下列行:
一些編程語言使用行尾的反斜槓(\)字符表示該行繼續,如本例所示:
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沒有從一個文件收集行
爲了解決這個問題:
./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設置。