ELK日誌分析平臺

最近組長安排我一項任務:利用ELK日誌分析平臺收集一個項目的日誌;期間也遇到各類問題,便想記錄下來,但願在記錄我成長的過程當中,爲你們帶來一點點幫助~~(若是存在有錯誤的地方,但願批評指正!)前端

1、概念介紹linux

ELKElasticSearchLogstashKiabana三個開源工具組成:web

1)ElasticSearch是一個基於Lucene的開源分佈式搜索服務器。它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並做爲Apache許可條款下的開放源碼發佈,是第二流行的企業搜索引擎。設計用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便。
在elasticsearch中,全部節點的數據是均等的。
2)Logstash是一個徹底開源的工具,它能夠對你的日誌進行收集、過濾、分析,支持大量的數據獲取方法,並將其存儲供之後使用(如搜索)。說到搜索,logstash帶有一個web界面,搜索和展現全部日誌。通常工做方式爲c/s架構,client端安裝在須要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操做在一併發往elasticsearch上去。
3)Kibana 是一個基於瀏覽器頁面的Elasticsearch前端展現工具,也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。正則表達式

2、Logstashredis

1)輸入(input):採集各類樣式、大小和來源的數據數據庫

數據每每以各類各樣的形式,或分散或集中地存在於不少系統中。Logstash 支持各類輸入支持(filesyslogredisbeats) ,能夠在同一時間從衆多經常使用來源捕捉事件。可以以連續的流式傳輸方式,輕鬆地從您的日誌、指標、Web 應用、數據存儲以及各類 AWS 服務採集數據。json

file:從文件系統的文件中讀取;瀏覽器

syslog:在514端口上監聽系統日誌消息,並根據RFC3164標準進行解析;緩存

redis:從redis service中讀取;服務器

beats:從filebeat中讀取;

2)過濾(filter):實時解析和轉換數據

數據從源傳輸(input)到存儲庫的過程當中,Logstash 過濾器可以解析各個事件,識別已命名的字段以構建結構,並將它們轉換成通用格式,以便更輕鬆、更快速地分析和實現商業價值。

grok:解析任意文本數據,Grok 是 Logstash 最重要的插件。它的主要做用就是將文本格式的字符串,轉換成爲具體的結構化的數據,配合正則表達式使用。

mutate:對字段進行轉換。例如對字段進行刪除、替換、修改、重命名等。

drop:丟棄一部分events不進行處理。

3)輸出(output):選擇您的存儲庫,導出您的數據

儘管 Elasticsearch 是咱們的首選輸出方向,可以爲咱們的搜索和分析帶來無限可能,但它並不是惟一選擇。Logstash 提供衆多輸出選擇,您能夠將數據發送到您要指定的地方,而且可以靈活地解鎖衆多下游用例。(在此處只詳細說明Elasticsearch

elasticsearch:能夠高效的保存數據,而且可以方便和簡單的進行查詢。

3、ELK總體方案

Logstash是一個ETL工具,負責從每臺機器抓取日誌數據,對數據進行格式轉換和處理後,輸出到Elasticsearch中存儲。

Elasticsearch是一個分佈式搜索引擎和分析引擎,用於數據存儲,可提供實時的數據查詢。

Kibana是一個數據可視化服務,根據用戶的操做從Elasticsearch中查詢數據,造成相應的分析結果,以圖表的形式展示給用戶。

在這裏還用到redis做爲緩存使用。經過logstash蒐集日誌數據存入redis,再經過logstash對數據格式轉化處理後儲存到Elasticsearch中。

4、Logstash在linux下的安裝部署

1)首先從官網 https://www.elastic.co/downloads 下載logstash 並解壓

2)編寫配置文件

---------------  test1.config

input:

path:指定日誌文件路徑。此處示例:能夠添加多個不一樣路徑的日誌文件;

type:指定一個名稱,設置type後,能夠在後面的filter和output中對不一樣的type作不一樣的處理,適用於須要消費多個日誌文件的場景。

start_position:指定起始讀取位置,"beginning"表示從文件頭開始,"end"表示從文件尾開始(相似tail -f).

sincedb_path:與Logstash的一個坑有關。一般Logstash會記錄每一個文件已經被讀取到的位置,保存在sincedb中,若是Logstash重啓,那麼對於同一個文件,會繼續從上次記錄的位置開始讀取。若是想從新從頭讀取文件,須要刪除sincedb文件,sincedb_path則是指定

了該文件的路徑。爲了方便,咱們能夠根據須要將其設置爲「/dev/null」,即不保存位置信息。

output:


host:redis所在服務器地址;

port:端口號;

data_type:

 

list:使用rpush

channel:使用publish

 

key:發佈通道名稱;

password:redis密碼,默認不使用密碼;

db:使用redis的數據庫,默認使用0號;

input {
    file {
            path => ["/data/log/test1.log","/data/log/test2.log","/data/home/test2.log",.....]           
            start_position => "beginning"
            sincedb_path => "/dev/null"
            }
        }

#輸入到redis
output {
   redis {
            host => "XXX"
            port => "XXX"
            data_type => "list"
            key => "XXXX"
            db => XX
            password => "XXX"
            }
        }

--------------   test2.config

input:

上一個配置文件的輸出即爲該配置文件的輸入(對應的字段信息要保持一致

filter:

此處就介紹我在處理日誌用到的相關過濾插件;

drop():從配置文件能夠看出若是message(即:輸出的每條日誌信息)不包含字符串「response_log_」就丟棄過濾該條日誌,開始處理下一條日誌。

grok:過濾掉不想要的日誌,想要的的日誌咱們就要經過grok進行下一步處理;此處經過正則表達式摳出本身想要的json部分信息,並存放在mesg字段裏。

json:再進一步的對mesg進行json解析,放入到logs字段,處理結束後就把不須要的message、mesg刪除掉;

(對於logstash 的filter詳細功能介紹可經過官網查看)

output:

最後將處理後的結果存入到es中(把日誌進行json解析是爲了提升es查詢搜索效率)

#須要處理的日誌(示例)
2018
-08-08T07:22:44.266Z ds01 2018-07-24 16:15:16.528 INFO 18879 --- [XNIO-2 task-150] c.i.s.gateway.controller.test: _response_log_{"clientInfo":"test"}
input {
    redis {
        host => "XXX"
        port => "XXX"
        data_type => "list"
        key => "XXXX"
        db => XX
        password => "XXX"
	}
 }

 filter{
     if([message] =~ "^(?!.*?response_log_).*$")){
          drop {}
     }

    grok {
        match=>{"message" => ".*response_log_(?<mesg>(.*))"}
        }
    json {
              source => "mesg"
              target => "logs"
              remove_field=>["mesg"]
              remove_field=>["message"]
        }

 }

output{
    elasticsearch {
        index => "XXXX"
        hosts => ["XXXXX:XXX"]
        }
 }

 

運行logstash:bin/logstash -f ./configs/   (configs與bin處於同級目錄test1.conf、test2.conf處於configs目錄下)這種寫法能夠自動執行該目下的全部配置文件,單個執行也是能夠的。

最後經過Kibana查詢結果以下圖所示:

相關文章
相關標籤/搜索