本文主要介紹的是ELK日誌系統中的Logstash快速入門和實戰php
ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件。新增了一個FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Filebeat佔用資源少,適合於在各個服務器上搜集日誌後傳輸給Logstash,官方也推薦此工具。html
Elasticsearch是個開源分佈式搜索引擎,提供蒐集、分析、存儲數據三大功能。它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。java
Logstash 主要是用來日誌的蒐集、分析、過濾日誌的工具,支持大量的數據獲取方式。通常工做方式爲c/s架構,client端安裝在須要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操做在一併發往elasticsearch上去。node
Kibana 也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助彙總、分析和搜索重要數據日誌。linux
Filebeat是一個輕量型日誌採集器,能夠方便的同kibana集成,啓動filebeat後,能夠直接在kibana中觀看對日誌文件進行detail的過程。nginx
Logstash是一個數據流引擎:apache
它是用於數據物流的開源流式ETL引擎,在幾分鐘內創建數據流管道,具備水平可擴展及韌性且具備自適應緩衝,不可知的數據源,具備200多個集成和處理器的插件生態系統,使用Elastic Stack監視和管理部署vim
Logstash包含3個主要部分: 輸入(inputs),過濾器(filters)和輸出(outputs)。
inputs主要用來提供接收數據的規則,好比使用採集文件內容;
filters主要是對傳輸的數據進行過濾,好比使用grok規則進行數據過濾;
outputs主要是將接收的數據根據定義的輸出模式來進行輸出數據,好比輸出到ElasticSearch中.數組
示例圖:ruby
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版本請以自身Elasticsearch集羣的版本而定。
解壓下載下來的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
首先輸入 java -version
查看是否安裝了JDK,若是安裝了,但版本不適合的話,就卸載
輸入
rpm -qa | grep java
查看信息
而後輸入:
rpm -e --nodeps 「你要卸載JDK的信息」 如: rpm -e --nodeps java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64
確認沒有了以後,解壓下載下來的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
將下載下來的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
這裏簡單介紹一下 inputs,filters、outputs三個主要配置。
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主要是實現過濾的功能,好比使用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}"] } }
示例圖:
若是沒有這方面的需求,能夠不配作filter。
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
在/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,建立一個索引模板,操做以下圖所示:
這裏由於未指定索引庫,logstash使用的是logstash默認的模板,這裏選擇它就可。
而後建立一個儀表盤,選擇剛剛建立的索引庫模板,就能夠查看數據的狀況了。
參考:https://elasticstack.blog.csdn.net/article/details/105973985
原創不易,若是感受不錯,但願給個推薦!您的支持是我寫做的最大動力!
版權聲明:
做者:虛無境
博客園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm
我的博客出處:http://www.panchengming.com