logstash是ELK日誌系統中的一部分,主要承擔將收集完成日誌進行過濾,而且輸出到es的職責。linux
logstash自己也能夠做爲客戶端部署到應用系統的服務器上進行日誌收集,可是因爲資源開銷佔用過大,因此客戶端的收集工做交給了beats進行,logstash專心在獨立的服務器上完成日誌解析處理的工做。redis
官方文檔說明:https://www.elastic.co/guide/en/logstash/json
這裏比較建議直接看英文的說明文檔,找到你對應的版本,別的文檔感受都不如它靠譜(血與淚的教訓😭)。centos
ELK的組件版本建議保持一致,這裏我採用的是5.6.10的版本,也就是beats、logstash、kibana和es都是這個版本。ruby
Logstash的事件(logstash將數據流中等每一條數據稱之爲一個event)處理流水線有三個主要角色完成:inputs –> filters –> outputs:bash
inpust:必須,負責產生事件(Inputs generate events),經常使用:File、syslog、redis、beats(如:Filebeats)
filters:可選,負責數據處理與轉換(filters modify them),經常使用:grok、mutate、drop、clone、geoip
outpus:必須,負責數據輸出(outputs ship them elsewhere),經常使用:elasticsearch、file、graphite、statsd服務器
其中inputs和outputs支持codecs(coder&decoder)在1.3.0 版以前,logstash 只支持純文本形式輸入,而後以過濾器處理它。但如今,咱們能夠在輸入 期處理不一樣類型的數據,因此完整的數據流程應該是:input | decode | filter | encode | output;codec 的引入,使得 logstash 能夠更好更方便的與其餘有自定義數據格式的運維產品共存,好比:graphite、fluent、netflow、collectd,以及使用 msgpack、json、edn 等通用數據格式的其餘產品等。 運維
這邊介紹下個人安裝方式,我是在linux centos6.5的操做系統上進行安裝的。elasticsearch
第一步,安裝JDK1.8,這裏不作過多介紹了。ide
第二步,去官網下載logstash安裝包,地址:https://www.elastic.co/cn/downloads/past-releases/logstash-5-6-10,替換後面的版本號找到對應的版本就行。
我下載的tar壓縮包logstash-5.6.10.tar.gz,解壓完後進入目錄。
tar -zxvf logstash-5.6.10.tar.gz -C /usr/
cd /usr/logstash-5.6.10
#在目錄下隨便建個文件夾用存放conf文件
[root@localhost logstash-5.6.10]# mkdir logstash.conf
第三步,編寫一個簡單的conf文件測試功能。
[root@localhost logstash-5.6.10]# vi logstash.conf/stdin.conf
#下面是conf文件示例,只構造了標準輸入和輸出
input {
stdin {
add_field => {"key" => "value"}
codec => "plain"
tags => ["add"]
type => "std"
}
}
output {
# 標準輸出
stdout { codec => rubydebug }
}
構建完成後保存,啓動命令
[root@localhost logstash-5.6.10]# bin/logstash -f logstash.conf/stdin.conf
輸入"hello"
至此logstash的安裝已經完成,還算簡單吧。
一開始介紹的時候說了,logstash通常扮演日誌過濾的角色,日誌收集交給beats來完成,filebeat是beats的一個組件,而且高版本的logstash不少插件如input-log4j2-plugin沒法使用,相信不少小夥伴用logstash來處理log4j的日誌的,官方建議採用beats插件來完成input的功能。
因爲beats包括filebeats在後面介紹beats的時候會詳細講解,這邊就先簡單介紹下安裝過程。
官方下載地址:https://www.elastic.co/cn/downloads/past-releases/filebeat-5-6-10,一樣的下載tar包後解壓就能食用。
tar -zxvf filebeat-5.6.10.tar.gz -C /usr/
cd /usr/filebeat-5.6.10
#修改配置文件filebeat.yml
[root@localhost filebeat-5.6.10]# vi filebeat.yml
filebeat.prospectors:
- input_type: log
path:
#這是filebeat輸入的log存放路徑,改爲你應用的日誌存放路徑
- /home/filebeat_log/*.log
#沒有安裝es集羣的先註釋掉es的配置,不然運行中日誌會warn,打開輸出配置,端口號爲5044,待會在logstash中須要這個端口號
下面給一個啓動filebeat的啓動腳本,也能夠直接命令行啓動:service filebeat start
#!/bin/bash
#注意修改你的home路徑 FILEBEAT_HOME="/usr/filebeat-5.6.10" agent="$FILEBEAT_HOME/filebeat" args="-c $FILEBEAT_HOME/filebeat.yml -path.home $FILEBEAT_HOME -path.config $FILEBEAT_HOME -path.data $FILEBEAT_HOME/data -path.logs $FILEBEAT_HOME/logs" test_args="-e -configtest" test() { echo "test config" $agent $args $test_args } start() { pid=`ps -ef |grep $FILEBEAT_HOME/data |grep -v grep |awk '{print $2}'` if [ ! "$pid" ];then echo "Starting filebeat: " test if [ $? -ne 0 ]; then echo exit 1 fi $agent $args & if [ $? == '0' ];then echo "start filebeat ok" else echo "start filebeat failed" fi else echo "filebeat is still running!" exit fi } stop() { echo -n $"Stopping filebeat: " pid=`ps -ef |grep $FILEBEAT_HOME/data |grep -v grep |awk '{print $2}'` if [ ! "$pid" ];then echo "filebeat is not running" else kill $pid echo "stop filebeat ok" fi } restart() { stop start } status(){ pid=`ps -ef |grep $FILEBEAT_HOME/data |grep -v grep |awk '{print $2}'` if [ ! "$pid" ];then echo "filebeat is not running" else echo "filebeat is running" fi } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; test) test ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac
保存成filebeat.sh後啓動。
sh filebeat.sh start
回到logstash的安裝目錄,新建conf配置文件log4j2.conf
input { beats { port => 5044 } } output { # 標準輸出 stdout { codec => rubydebug } }
對只須要在input里加入beats插件,端口號是你剛剛在filebeat.yml中的端口號,啓動logstash
[root@localhost logstash-5.6.10]# logstash -f logstash.conf/log4j2.conf
當你在/home/filebeat_log/*.log中產生日誌文件時,logstash就會進行解析。