前言
本文主要介紹的是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 => ["127.0.0.1:9200"]
}
}
然后在logstash 目錄輸入如下命令進行啟動:
./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