ElasticSearch實戰系列八: Filebeat快速入門和使用—圖文詳解
- 2020 年 8 月 19 日
- 筆記
- elasticsearch, Filebeat
前言
本文主要介紹的是ELK日誌系統中的Filebeat快速入門教程。
ELK介紹
ELK是三個開源軟體的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟體。新增了一個FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Filebeat佔用資源少,適合於在各個伺服器上搜集日誌後傳輸給Logstash,官方也推薦此工具。
-
Elasticsearch是個開源分散式搜索引擎,提供搜集、分析、存儲數據三大功能。它的特點有:分散式,零配置,自動發現,索引自動分片,索引副本機制,restful風格介面,多數據源,自動搜索負載等。
-
Logstash 主要是用來日誌的搜集、分析、過濾日誌的工具,支援大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往elasticsearch上去。
-
Kibana 也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 介面,可以幫助匯總、分析和搜索重要數據日誌。
-
Filebeat是一個輕量型日誌採集器,可以方便的同kibana集成,啟動filebeat後,可以直接在kibana中觀看對日誌文件進行detail的過程。
Filebeat介紹
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 框架。
Filebeat 由兩個主要組件組成:harvester 和 prospector。
採集器 harvester 的主要職責是讀取單個文件的內容。讀取每個文件,並將內容發送到 the output。 每個文件啟動一個 harvester,harvester 負責打開和關閉文件,這意味著在運行時文件描述符保持打開狀態。如果文件在讀取時被刪除或重命名,Filebeat 將繼續讀取文件。
查找器 prospector 的主要職責是管理 harvester 並找到所有要讀取的文件來源。如果輸入類型為日誌,則查找器將查找路徑匹配的所有文件,並為每個文件啟動一個 harvester。每個 prospector 都在自己的 Go 協程中運行。
註:Filebeat prospector只能讀取本地文件, 沒有功能可以連接到遠程主機來讀取存儲的文件或日誌。
示例圖:
Filebeat安裝使用
Filebeat下載地址推薦使用清華大學或華為的開源鏡像站。
下載地址:
//mirrors.huaweicloud.com/logstash
//mirrors.tuna.tsinghua.edu.cn/ELK
ELK7.3.2百度網盤地址:
鏈接://pan.baidu.com/s/1tq3Czywjx3GGrreOAgkiGg
提取碼:cxng
三、Filebeat安裝
1,文件準備
將下載下來的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
2,配置修改
這裡簡單介紹一下 filebeat.inputs,和outputs的主要配置。
inputs
inputs主要使用的幾個配置項:
- paths:必選項,讀取文件的路徑,基於glob匹配語法。
- enabled:是否啟用該模組。
- exclude_lines: 排除匹配列表中的正則表達式。
- include_lines:包含匹配列表中的正則表達式。
- exclude_files: 排除的文件,匹配正則表達式的列表。
- fields: 可選的附加欄位。這些欄位可以自由選擇,添加附加資訊到抓取的日誌文件進行過濾。
- multiline.pattern: 多行合併匹配規則,匹配正則表達式。
- multiline.match:匹配可以設置為「after」或「before」。它用於定義是否應該將行追加到模式中在之前或之後匹配的,或者只要模式沒有基於negate匹配。注意:在Logstash中,After等同於previous, before等同於next.
- multiline.negate: 定義模式下的模式是否應該被否定。默認為false。這個配置有點繞,其實就是負負得正,如果符合上面的就配置false,否則就配置true。
一個簡單的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
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"]
3,使用
demo
在/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文件並直接將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
示例圖:
其它
- ElasticSearch實戰系列一: ElasticSearch集群+Kinaba安裝教程
- ElasticSearch實戰系列二: ElasticSearch的DSL語句使用教程—圖文詳解
- ElasticSearch實戰系列三: ElasticSearch的JAVA API使用教程
- ElasticSearch實戰系列四: ElasticSearch理論知識介紹
- ElasticSearch實戰系列四: ElasticSearch理論知識介紹
- ElasticSearch實戰系列五: ElasticSearch的聚合查詢基礎使用教程之度量(Metric)聚合
- ElasticSearch實戰系列六: Logstash快速入門
- ElasticSearch實戰系列七: Logstash實戰使用-圖文講解
音樂推薦
原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力!
版權聲明:
作者:虛無境
部落格園出處://www.cnblogs.com/xuwujing
CSDN出處://blog.csdn.net/qazwsxpcm
掘金出處://juejin.im/user/5ae45d5bf265da0b8a6761e4
個人部落格出處://www.panchengming.com