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

虛無境發表於2020-07-31

前言

本文主要介紹的是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實戰系列:

音樂推薦

原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力!
版權宣告:
作者:虛無境
部落格園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm    
個人部落格出處:http://www.panchengming.com

相關文章