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

前言

本文主要介紹的是ELK日誌系統中的Logstash快速入門和實戰php

ELK介紹

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介紹

Logstash是一個數據流引擎:apache

它是用於數據物流的開源流式ETL引擎,在幾分鐘內創建數據流管道,具備水平可擴展及韌性且具備自適應緩衝,不可知的數據源,具備200多個集成和處理器的插件生態系統,使用Elastic Stack監視和管理部署vim

Logstash包含3個主要部分: 輸入(inputs),過濾器(filters)和輸出(outputs)。
inputs主要用來提供接收數據的規則,好比使用採集文件內容;
filters主要是對傳輸的數據進行過濾,好比使用grok規則進行數據過濾;
outputs主要是將接收的數據根據定義的輸出模式來進行輸出數據,好比輸出到ElasticSearch中.數組

示例圖:ruby

在這裏插入圖片描述

Logstash安裝使用

1、環境選擇

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

2、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

3、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

相關文章
相關標籤/搜索