1. 程式人生 > >ElasticSearch實戰系列八: Filebeat快速入門和使用---圖文詳解

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下載地址推薦使用清華大學或華為的開源映象站。 **下載地址:** https://mirrors.huaweicloud.com/logstash https://mirrors.tuna.tsinghua.edu.cn/ELK ELK7.3.2百度網盤地址: 連結:https://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的日誌。 在採集日誌時,會涉及到對於應用中異常堆疊日誌的處理。在[上一篇博文](https://www.cnblogs.com/xuwujing/p/13520666.html)中,我們使用了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 ``` 若是想採集多個目錄,第一種方式,直接在採集的目錄下再新增一行 示例圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819213306368.png#pic_center) 第二種方式,想採集多個目錄並且輸出到不同的索引庫中,可以增加fields來表示,類似[logstash](https://www.cnblogs.com/xuwujing/p/13520666.html)的type。 示例圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819213300950.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70#pic_center) 判斷的時候,使用`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實戰使用-圖文講解](https://www.cnblogs.com/xuwujing/p/13520666.html) 示例圖如下: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200814154553682.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70#pic_center) #### 自定義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 ``` 示例圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200814152029745.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70#pic_center) ## 其它 [ElasticSearch實戰系列](https://www.cnblogs.com/xuwujing/tag/elasticsearch/): - [ElasticSearch實戰系列一: ElasticSearch叢集+Kinaba安裝教程](https://www.cnblogs.com/xuwujing/p/11385255.html) - [ElasticSearch實戰系列二: ElasticSearch的DSL語句使用教程---圖文詳解](https://www.cnblogs.com/xuwujing/p/11567053.html) - [ElasticSearch實戰系列三: ElasticSearch的JAVA API使用教程](https://www.cnblogs.com/xuwujing/p/11645630.html) - [ElasticSearch實戰系列四: ElasticSearch理論知識介紹](https://www.cnblogs.com/xuwujing/p/12093933.html) - [ElasticSearch實戰系列四: ElasticSearch理論知識介紹](https://www.cnblogs.com/xuwujing/p/12093933.html) - [ElasticSearch實戰系列五: ElasticSearch的聚合查詢基礎使用教程之度量(Metric)聚合](https://www.cnblogs.com/xuwujing/p/12385903.html) - [ElasticSearch實戰系列六: Logstash快速入門](https://www.cnblogs.com/xuwujing/p/13412108.html) - [ElasticSearch實戰系列七: Logstash實戰使用-圖文講解](https://www.cnblogs.com/xuwujing/p/13520666.html) ### 音樂推薦 原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力! 版權宣告: 作者:虛無境 部落格園出處:http://www.cnblogs.com/xuwujing CSDN出處:http://blog.csdn.net/qazwsxpcm 掘金出處:https://juejin.im/user/5ae45d5bf265da0b8a6761e4     個人部落格出處:http://www.panchengm