前言
本文主要介紹的是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中.
示例圖:
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
2,環境配置
首先輸入 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安裝
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}"]
}
}
示例圖:
如果沒有這方面的需求,可以不配做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,建立一個索引模板,操作如下圖所示:
這裡因為未指定索引庫,logstash使用的是logstash預設的模板,這裡選擇它就可。
然後建立一個儀表盤,選擇剛剛建立的索引庫模板,就可以檢視資料的情況了。
其它
參考:https://elasticstack.blog.csdn.net/article/details/105973985
- ElasticSearch實戰系列一: ElasticSearch叢集+Kinaba安裝教程
- ElasticSearch實戰系列二: ElasticSearch的DSL語句使用教程---圖文詳解
- ElasticSearch實戰系列三: ElasticSearch的JAVA API使用教程
- ElasticSearch實戰系列四: ElasticSearch理論知識介紹
- ElasticSearch實戰系列四: ElasticSearch理論知識介紹
- ElasticSearch實戰系列五: ElasticSearch的聚合查詢基礎使用教程之度量(Metric)聚合
音樂推薦
原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力!
版權宣告:
作者:虛無境
部落格園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm
個人部落格出處:http://www.panchengming.com