本文主要介紹的是ELK日誌系統中的Filebeat快速入門教程。html
ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件。新增了一個FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Filebeat佔用資源少,適合於在各個服務器上搜集日誌後傳輸給Logstash,官方也推薦此工具。linux
Elasticsearch是個開源分佈式搜索引擎,提供蒐集、分析、存儲數據三大功能。它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。正則表達式
Logstash 主要是用來日誌的蒐集、分析、過濾日誌的工具,支持大量的數據獲取方式。通常工做方式爲c/s架構,client端安裝在須要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操做在一併發往elasticsearch上去。redis
Kibana 也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助彙總、分析和搜索重要數據日誌。json
Filebeat是一個輕量型日誌採集器,能夠方便的同kibana集成,啓動filebeat後,能夠直接在kibana中觀看對日誌文件進行detail的過程。服務器
Filebeat 是使用 Golang 實現的輕量型日誌採集器,也是 Elasticsearch stack 裏面的一員。本質上是一個 agent ,能夠安裝在各個節點上,根據配置讀取對應位置的日誌,並上報到相應的地方去。
Filebeat 的可靠性很強,能夠保證日誌 At least once 的上報,同時也考慮了日誌蒐集中的各種問題,例如日誌斷點續讀、文件名更改、日誌 Truncated 等。
Filebeat 並不依賴於 ElasticSearch,能夠單獨存在。咱們能夠單獨使用Filebeat進行日誌的上報和蒐集。filebeat 內置了經常使用的 Output 組件, 例如 kafka、ElasticSearch、redis 等,出於調試考慮,也能夠輸出到 console 和 file 。咱們能夠利用現有的 Output 組件,將日誌進行上報。
固然,咱們也能夠自定義 Output 組件,讓 Filebeat 將日誌轉發到咱們想要的地方。
filebeat 實際上是 elastic/beats 的一員,除了 filebeat 外,還有 HeartBeat、PacketBeat。這些 beat 的實現都是基於 libbeat 框架。restful
Filebeat 由兩個主要組件組成:harvester 和 prospector。架構
採集器 harvester 的主要職責是讀取單個文件的內容。讀取每一個文件,並將內容發送到 the output。 每一個文件啓動一個 harvester,harvester 負責打開和關閉文件,這意味着在運行時文件描述符保持打開狀態。若是文件在讀取時被刪除或重命名,Filebeat 將繼續讀取文件。併發
查找器 prospector 的主要職責是管理 harvester 並找到全部要讀取的文件來源。若是輸入類型爲日誌,則查找器將查找路徑匹配的全部文件,併爲每一個文件啓動一個 harvester。每一個 prospector 都在本身的 Go 協程中運行。app
注:Filebeat prospector只能讀取本地文件, 沒有功能能夠鏈接到遠程主機來讀取存儲的文件或日誌。
示例圖:
Filebeat下載地址推薦使用清華大學或華爲的開源鏡像站。
下載地址:
https://mirrors.huaweicloud.com/logstash
https://mirrors.tuna.tsinghua.edu.cn/ELK
ELK7.3.2百度網盤地址:
連接:https://pan.baidu.com/s/1tq3Czywjx3GGrreOAgkiGg
提取碼:cxng
將下載下來的filebeat-7.3.2-linux-x86_64.gz的配置文件進行解壓
在linux上輸入:
tar -xvf filebeat-7.3.2-linux-x86_64.tar.gz
而後移動到/opt/elk 裏面,而後將文件夾重命名爲 filebeat-7.3.2
輸入
mv filebeat-7.3.2-linux-x86_64 /opt/elk
mv filebeat-7.3.2-linux-x86_64 filebeat-7.3.2
這裏簡單介紹一下 filebeat.inputs,和outputs的主要配置。
inputs主要使用的幾個配置項:
一個簡單的input輸入示例:
filebeat.inputs: - type: log enabled: true paths: - /home/logs/*.txt
上述這段配置表示採集/home/logs/
目錄全部後綴名爲.txt的日誌。
在採集日誌時,會涉及到對於應用中異常堆棧日誌的處理。在上一篇博文中,咱們使用了logstash實現了日誌歸併,在本篇中咱們也可使用filbeat來實現合併。使用multiline.pattern、multiline.negate和multiline.match來實現,咱們經過制定匹配規則將以空格開頭的全部行合併到上一行,並把以Caused by開頭的也追加到上一行。
示例:
filebeat.inputs: - type: log enabled: true paths: - /home/logs/*.txt multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:' multiline.negate: false multiline.match: after
如果想採集多個目錄,第一種方式,直接在採集的目錄下再添加一行
示例圖:
第二種方式,想採集多個目錄而且輸出到不一樣的索引庫中,能夠增長fields來表示,相似logstash的type。
示例圖:
判斷的時候,使用if [fields][log-test] == "true"{ }
這樣既可。
output主要做用是將數據進行輸出,好比輸出到kafka、elasticsearch或者logstash中。
這裏將數據輸出到ElasticSearch中,若是是集羣,經過逗號能夠配置多個節點。
示例:
output.elasticsearch: hosts: ["127.0.0.1:9200"]
按照上述配置會將讀取的數據輸出默認的模板索引庫中,若是咱們想指定索引庫輸出的話,只須要添加索引庫名稱便可。
示例:
output.elasticsearch: hosts: ["127.0.0.1:9200"] index: "mylog"
輸出到Logstash配置:
output.logstash: hosts: ["localhost:5044"]
在/home/logs/目錄下添加一個日誌文件, 而後在filebeat文件夾中建立一個filebeat_test.yml文件,而後在該文件中添加以下配置:
filebeat.inputs: - type: log enabled: true paths: - /home/logs/*.txt multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:' multiline.negate: false multiline.match: after output.elasticsearch: hosts: ["192.168.8.78:9200"]
使用root用戶在filebeat文件夾輸入
./filebeat -c filebeat_test.yml test config
進行配置啓動測試
啓動命令:
./filebeat -e -c filebeat_logstash.yml
後臺啓動命令:
nohup ./filebeat -c filebeat_logstash.yml >/dev/null 2>&1 &
如果後臺啓動,能夠在filebeat統計目錄的logs目錄查看日誌信息。
啓動filebeat採集日誌寫入到ES中,默認會使用filebeat的模板, 若是想使用自定義模板實現,能夠查看我上一篇博文,地址:ElasticSearch實戰系列七: Logstash實戰使用-圖文講解
示例圖以下:
有時候,咱們想採集json文件並直接將json文件的數據按照格式寫入到ES對應的索引庫中,咱們也能夠經過filebeat去實現。
1.在filebeat的目錄下建立一個filebeat_json.yml
的yml文件。
配置文件:
filebeat.inputs: - type: log enabled: true tags: ["i", "love", "json"] json.message_key: user_name json.keys_under_root: true json.add_error_key: true fields: qwe: xuwujing paths: - /home/logs/myjson.log output.elasticsearch: hosts: ["127.0.0.1:9200"] index: "myjson_index" setup.ilm.enabled: false setup.template.name: myjson_index setup.template.pattern: myjson_index
2.在kibana的開發工具頁面中執行以下語句:
PUT myjson_index { "mappings": { "properties": { "id": { "type": "long" }, "user_name": { "type": "keyword" }, "blog": { "type": "keyword" } } } }
3.建立json文件
{"user_name": "xuwujing", "id": 1, "blog": "www.panchengming.com"} {"user_name": "xuwujing", "id": 2, "blog": "www.panchengming.com"} {"user_name": "xuwujing", "id": 3, "blog": "www.panchengming.com"}
4.啓動filebeat,並在kibana查詢數據
./filebeat -e -c filebeat_json.yml
示例圖:
原創不易,若是感受不錯,但願給個推薦!您的支持是我寫做的最大動力!
版權聲明:
做者:虛無境
博客園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm
掘金出處:https://juejin.im/user/5ae45d5bf265da0b8a6761e4
我的博客出處:http://www.panchengming.com