1. 程式人生 > >ElasticSearch實戰系列六: Logstash快速入門和實戰

ElasticSearch實戰系列六: Logstash快速入門和實戰

## 前言 本文主要介紹的是ELK日誌系統中的Logstash快速入門和實戰 ## 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的過程。 ## Logstash介紹 Logstash是一個數據流引擎: > 它是用於資料物流的開源流式ETL引擎,在幾分鐘內建立資料流管道,具有水平可擴充套件及韌性且具有自適應緩衝,不可知的資料來源,具有200多個整合和處理器的外掛生態系統,使用Elastic Stack監視和管理部署 Logstash包含3個主要部分: 輸入(inputs),過濾器(filters)和輸出(outputs)。 inputs主要用來提供接收資料的規則,比如使用採集檔案內容; filters主要是對傳輸的資料進行過濾,比如使用grok規則進行資料過濾; outputs主要是將接收的資料根據定義的輸出模式來進行輸出資料,比如輸出到ElasticSearch中. 示例圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200731165920151.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) ## Logstash安裝使用 ### 一、環境選擇 Logstash採用JRuby語言編寫,執行在jvm中,因此安裝Logstash前需要先安裝JDK。如果是6.x的版本,jdk需要在8以上,如果是7.x的版本,則jdk版本在11以上。如果Elasticsearch叢集是7.x的版本,可以使用Elasticsearch自身的jdk。 Logstash下載地址推薦使用清華大學或華為的開源映象站。 **下載地址:** https://mirrors.huaweicloud.com/logstash https://mirrors.tuna.tsinghua.edu.cn/ELK ELK7.3.2百度網盤地址: 連結:https://pan.baidu.com/s/1tq3Czywjx3GGrreOAgkiGg 提取碼:cxng ### 二、JDK安裝 注:JDK版本請以自身Elasticsearch叢集的版本而定。 #### 1,檔案準備 解壓下載下來的JDK tar -xvf jdk-8u144-linux-x64.tar.gz 移動到opt/java資料夾中,沒有就新建,然後將資料夾重新命名為jdk1.8 mv jdk1.8.0_144 /opt/java mv jdk1.8.0_144 jdk1.8 ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTEzODE5Ni8yMDE5MDgvMTEzODE5Ni0yMDE5MDgyMDIwMDE1NDYyMS01MDE2Njk1Ny5wbmc?x-oss-process=image/format,png) #### 2,環境配置 首先輸入 java -version 檢視是否安裝了JDK,如果安裝了,但版本不適合的話,就解除安裝 ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTEzODE5Ni8yMDE5MDgvMTEzODE5Ni0yMDE5MDgyMDIwMDIwNjE0Ny0xMDU1ODIwNzQ5LnBuZw?x-oss-process=image/format,png) 輸入 rpm -qa | grep java 檢視資訊 ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTEzODE5Ni8yMDE5MDgvMTEzODE5Ni0yMDE5MDgyMDIwMDIzNjg3Ny0xMzM0OTcyMDU1LnBuZw?x-oss-process=image/format,png) 然後輸入: rpm -e --nodeps “你要解除安裝JDK的資訊” 如: rpm -e --nodeps java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190820173844671.png) 確認沒有了之後,解壓下載下來的JDK tar -xvf jdk-8u144-linux-x64.tar.gz 移動到opt/java資料夾中,沒有就新建,然後將資料夾重新命名為jdk1.8。 mv jdk1.8.0_144 /opt/java mv jdk1.8.0_144 jdk1.8 然後編輯 profile 檔案,新增如下配置 輸入: vim /etc/profile export JAVA_HOME=/opt/java/jdk1.8 export JRE_HOME=/opt/java/jdk1.8/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export PATH=.:${JAVA_HOME}/bin:$PATH 新增成功之後,輸入: source /etc/profile 使配置生效,然後檢視版本資訊輸入: java -version ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTEzODE5Ni8yMDE5MDgvMTEzODE5Ni0yMDE5MDgyMDIwMDI1MTU0Ni0yMTY1NzMxNjYucG5n?x-oss-process=image/format,png) ### 三、Logstash安裝 #### 1,檔案準備 將下載下來的logstash-7.3.2.tar.gz的配置檔案進行解壓 在linux上輸入: > tar -xvf logstash-7.3.2.tar.gz 然後移動到/opt/elk 裡面,然後將資料夾重新命名為 logstash-7.3.2 輸入 > mv logstash-7.3.2.tar /opt/elk > mv logstash-7.3.2.tar logstash-7.3.2 #### 2,配置修改 這裡簡單介紹一下 inputs,filters、outputs三個主要配置。 ##### inputs inputs主要使用的幾個配置項: - path:必選項,讀取檔案的路徑,基於glob匹配語法。 exclude:可選項,陣列型別,排除不想監聽的檔案規則,基於glob匹配語法。 - sincedb_path:可選項,記錄sinceddb檔案路徑以及檔案讀取資訊位置的資料檔案。 - start_position:可選項,可以配置為beginning/end,是否從頭讀取檔案。預設從尾部值為:end。 - stat_interval:可選項,單位為秒,定時檢查檔案是否有更新,預設是1秒。 - discover_interval:可選項,單位為秒,定時檢查是否有新檔案待讀取,預設是15秒 - ignore_older:可選項,單位為秒,掃描檔案列表時,如果該檔案上次更改時間超過設定的時長,則不做處理,但依然會監控是否有新內容,預設關閉。 - close_older:可選項,單位為秒,如果監聽的檔案在超過該設定時間內沒有新內容,會被關閉檔案控制代碼,釋放資源,但依然會監控是否有新內容,預設3600秒,即1小時。 - tags :可選項,在資料處理過程中,由具體的外掛來新增或者刪除的標記。 type :可選項,自定義處理時間型別。比如nginxlog。 **一個簡單的input輸入示例:** ``` input { file { path => "/home/logs/mylog.log" } } ``` 上述這段配置表示採集`/home/logs/mylog.log`的日誌,如果是採集整個目錄的話,則可以通過*萬用字元來進行匹配,如 ``` path => "/home/logs/*.log" ``` 表示採集該目錄下所有後綴名為.log的日誌。 通過logstash-input-file外掛匯入了一些本地日誌檔案時,logstash會通過一個名為sincedb的獨立檔案中來跟蹤記錄每個檔案中的當前位置。這使得停止和重新啟動Logstash成為可能,並讓它在不丟失在停止Logstashwas時新增到檔案中的行數的情況下繼續執行。 在除錯的時候,我們可能希望取消sincedb的記錄功能,使檔案每次都能從頭開始讀取。此時,我們可以這樣來做 示例: ``` input { file { path => "/home/logs/mylog.log" start_position => "beginning" sincedb_path => "/dev/null" } } ``` 如果想使用HTTP輸入,可以將型別改成http,只不過裡面的引數有不同而已,tcp、udp、syslog和beats等等同理。 示例: ``` input { http { port => 埠號 } } ``` ##### filter filter主要是實現過濾的功能,比如使用grok實現日誌內容的切分等等。 比如對apache的日誌進行grok過濾 樣例資料: > 127.0.0.1 - - [13/Apr/2015:17:22:03 +0800] "GET /router.php HTTP/1.1" 404 285 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" grok: > %{COMBINEDAPACHELOG} 這裡我們可以使用kibana的grok來進行分析,grok在開發工具中。當然也可以在http://grokdebug.herokuapp.com/網站進行匹配除錯。 使用示例: ``` filter { grok { match => ["message", "%{COMBINEDAPACHELOG}"] } } ``` 示例圖: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200731165842456.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) 如果沒有這方面的需求,可以不配做filter。 ##### output output主要作用是將資料進行輸出,比如輸出到檔案,或者elasticsearch中。 這裡將資料輸出到ElasticSearch中,如果是叢集,通過逗號可以配置多個節點。 ``` output { elasticsearch { hosts => ["127.0.0.1:9200"] } } ``` 如果想在控制檯進行日誌輸出的話,可以加上stdout配置。如果想自定義輸出的index話,也可以加上對應的索引庫名稱,不存在則根據資料內容進行建立,也可以自動按天建立索引庫。 示例如下: ``` output { stdout { codec => rubydebug } elasticsearch { hosts => ["127.0.0.1:9200"] index => "mylogs-%{+YYYY.MM.dd}" } } ``` 更多logstash配置:https://www.elastic.co/guide/en/logstash/current/index.html #### 3,使用 ##### demo 在/home/logs/目錄下新增一個日誌檔案, 然後在logstash資料夾中建立一個**logstash-test.conf**檔案,然後在該檔案中新增如下配置: ``` input { file { path => "/home/logs/mylog.log" start_position => "beginning" sincedb_path => "/dev/null" } } filter { } output { stdout { codec => rubydebug } elasticsearch { hosts => ["192.168.9.238:9200"] } } ``` 然後在logstash 目錄輸入如下命令進行啟動: > nohup ./bin/logstash -f logstash-test.conf 後臺啟動: > nohup ./bin/logstash -f logstash-test.conf >/dev/null 2>&1 & 熱配置載入啟動: > nohup ./bin/logstash -f logstash-test.conf --config.reload.automatic >/dev/null 2>&1 & 啟動成功之後,如果是非後臺啟動,可以在控制檯檢視資料的傳輸,如果是後臺啟動,則可以在logstash的log目錄中進行檢視。 ##### 在kibana展示 開啟kibana,建立一個索引模板,操作如下圖所示: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200731170112414.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) 這裡因為未指定索引庫,logstash使用的是logstash預設的模板,這裡選擇它就可。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200731170121130.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) 然後建立一個儀表盤,選擇剛剛建立的索引庫模板,就可以檢視資料的情況了。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200731170127550.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FhendzeHBjbQ==,size_16,color_FFFFFF,t_70) ## 其它 參考:https://elasticstack.blog.csdn.net/article/details/105973985 [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) ### 音樂推薦 原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力! 版權宣告: 作者:虛無境 部落格園出處:http://www.cnblogs.com/xuwujing CSDN出處:http://blog.csdn.net/qazwsxpcm     個人部落格出處:http://www.panchengming.com